我在德国的一家大公司工作,并且得到了创建它的主要网站的工作,其中包括:
我决定使用COBOL来完成工作,它可能会被低估,但它是一种非常强大的语言,特别是对于商业应用程序,正如我的同事所说的那样,web(2.0)开发也是如此.
我还需要使用COBOL,因为公司的所有后端和交易系统都在其中编程(一些小部件也在LISP中编程,我不确切知道为什么).我还收到了一个API,可以轻松地将COBOL与MySQL结合使用.
这是一个大项目,可能需要2个多月的编程时间.
提前致谢
S.L*_*ott 17
在COBOL中构建庞大的Web应用程序时,我有什么期望?
这需要很长时间.像Django,Ruby on Rails或CodeIgniter这样的框架专门用于在很短的时间内创建网站.
大多数这些框架可以在20分钟内构建工作动态内容网站.COBOL不能.除非您能够快速打字,否则在您学习和使用更现代化的工具构建网站时,您可能只需要很少的可行代码.
是否有可用于COBOL的Web框架?某种MVC?
现在提出这个问题表明,选择使用COBOL是一个非常非常糟糕的主意.
通常的策略是首先选择框架.在选择框架之后,我们会忍受利用该框架所需的语言.
但是,总有http://www.coboloncogs.org/HOME.HTM
使用COBOL进行实际的Web开发是否有很好的资源?
实用的Web开发是通过特定于Web的框架完成的.任意数十个Python Web框架,Ruby on Rails,任何PHP框架,任何Java框架.他们非常专业,可以快速,廉价地构建网站.
COBOL对此并不高度专业化.Nor(在i系列之外)是否有人认真考虑使用COBOL进行Web开发.
您最大的希望是尽可能多地使用外部库并尽可能少地编写COBOL.您必须大量使用OpenCOBOL的COBOL到C功能来使用C语言API,并且 - 实际上 - 使用COBOL包装器在C中构建您的站点.
请,请不要使用COBOL.任何不得不支持该网站的人都会感谢您选择更现代的工具.
我建议你使用一个Web框架写的前端,比如PHP,ASP.NET MVC等,然后创建一个API(或带有某种接口的独立的过程中,如果需要的话),这将允许该工具与你的COBOL后端交谈.这将允许您使用前端的Web框架 - 它将发挥作用 - 同时允许您利用公司在COBOL上的重大投资.
在发布了用于CGI和AJAX的OpenCOBOL示例之后,我只想补充一下,去吧.COBOL可以做前端.
>>SOURCE FORMAT IS FIXED
******************************************************************
* Author: Brian Tiffin, Francois Hiniger
* Date: 30-Aug-2008
* Purpose: Display the CGI environment space
* Tectonics: cobc -x cgienv.cob
* Move cgienv to the cgi-bin directory as cgienv.cgi
* browse http://localhost/cgi-bin/cgienv.cgi or cgienvform.html
******************************************************************
identification division.
program-id. cgienv.
environment division.
input-output section.
file-control.
select webinput assign to KEYBOARD.
data division.
file section.
fd webinput.
01 postchunk pic x(1024).
working-storage section.
78 name-count value 34.
01 newline pic x value x'0a'.
01 name-index pic 99 usage comp-5.
01 value-string pic x(256).
01 environment-names.
02 name-strings.
03 filler pic x(20) value 'AUTH_TYPE'.
03 filler pic x(20) value 'CONTENT_LENGTH'.
03 filler pic x(20) value 'CONTENT_TYPE'.
03 filler pic x(20) value 'DOCUMENT_ROOT'.
03 filler pic x(20) value 'GATEWAY_INTERFACE'.
03 filler pic x(20) value 'HTTP_ACCEPT'.
03 filler pic x(20) value 'HTTP_ACCEPT_CHARSET'.
03 filler pic x(20) value 'HTTP_ACCEPT_ENCODING'.
03 filler pic x(20) value 'HTTP_ACCEPT_LANGUAGE'.
03 filler pic x(20) value 'HTTP_COOKIE'.
03 filler pic x(20) value 'HTTP_CONNECTION'.
03 filler pic x(20) value 'HTTP_HOST'.
03 filler pic x(20) value 'HTTP_REFERER'.
03 filler pic x(20) value 'HTTP_USER_AGENT'.
03 filler pic x(20) value 'LIB_PATH'.
03 filler pic x(20) value 'PATH'.
03 filler pic x(20) value 'PATH_INFO'.
03 filler pic x(20) value 'PATH_TRANSLATED'.
03 filler pic x(20) value 'QUERY_STRING'.
03 filler pic x(20) value 'REMOTE_ADDR'.
03 filler pic x(20) value 'REMOTE_HOST'.
03 filler pic x(20) value 'REMOTE_IDENT'.
03 filler pic x(20) value 'REMOTE_PORT'.
03 filler pic x(20) value 'REQUEST_METHOD'.
03 filler pic x(20) value 'REQUEST_URI'.
03 filler pic x(20) value 'SCRIPT_FILENAME'.
03 filler pic x(20) value 'SCRIPT_NAME'.
03 filler pic x(20) value 'SERVER_ADDR'.
03 filler pic x(20) value 'SERVER_ADMIN'.
03 filler pic x(20) value 'SERVER_NAME'.
03 filler pic x(20) value 'SERVER_PORT'.
03 filler pic x(20) value 'SERVER_PROTOCOL'.
03 filler pic x(20) value 'SERVER_SIGNATURE'.
03 filler pic x(20) value 'SERVER_SOFTWARE'.
02 filler redefines name-strings.
03 name-string pic x(20) occurs name-count times.
procedure division.
* Always send out the Content-type before any other IO
display
"Content-type: text/html"
newline
end-display.
display
"<html><body>"
end-display.
display
"<h3>CGI environment with OpenCOBOL</h3>"
end-display.
display
'<a href="/cgienvform.html">To cgienvform.html</a>'
"<p><table>"
end-display.
* Accept and display some of the known CGI environment values
perform varying name-index from 1 by 1
until name-index > name-count
accept value-string from environment
name-string(name-index)
end-accept
display
"<tr><td>"
name-string(name-index)
": </td><td>"
function trim (value-string trailing)
"</td></tr>"
end-display
if (name-string(name-index) = "REQUEST_METHOD")
and (value-string = "POST")
open input webinput
read webinput
at end move spaces to postchunk
end-read
close webinput
display
'<tr><td align="right">'
"First chunk of POST:</td><td>"
postchunk(1:72)
"</td></tr>"
end-display
end-if
end-perform.
display "</table></p></body></html>" end-display.
goback.
Run Code Online (Sandbox Code Playgroud)
这是一个添加一点AJAX的表单.
<html>
<head>
<title>Simple Ajax Example</title>
<script language="Javascript">
function xmlhttpPost(strURL) {
var xmlHttpReq = false;
var self = this;
// Mozilla/Safari
if (window.XMLHttpRequest) {
self.xmlHttpReq = new XMLHttpRequest();
}
// IE
else if (window.ActiveXObject) {
self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
}
self.xmlHttpReq.open('POST', strURL, true);
self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
self.xmlHttpReq.onreadystatechange = function() {
if (self.xmlHttpReq.readyState == 4) {
updatepage(self.xmlHttpReq.responseText);
}
}
self.xmlHttpReq.send(getquerystring());
}
function getquerystring() {
var form = document.forms['f1'];
var word = form.word.value;
qstr = 'w=' + escape(word); // NOTE: no '?' before querystring
return qstr;
}
function updatepage(str){
document.getElementById("result").innerHTML = str;
}
</script>
</head>
<body>
<form name="f1">
<p>word: <input name="word" type="text">
<input value="Go" type="button" onclick='javascript:xmlhttpPost("/cgi-bin/cgienv.cgi")'></p>
<div id="result"></div>
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
只是添加,当我为OpenCOBOL FAQ测试它时,它使用嵌入在COBOL中的WebKit浏览器,利用Vala WebKit绑定.充满魅力.COBOL控制处理CGI的浏览器.
大多数人对在 COBOL 中开发 Web 应用程序的最初反应是非常消极的!
总的来说,我同意,并建议不要使用 COBOL 进行前端 Web 开发,因为还有其他工具为构建此类应用程序提供了大量预先打包的支持。支持通常来自库附加组件和 Web 服务的预构建接口。实现语言本身不太重要。
例如,Ruby on Rails 是一种基于 MVC 模型的应用程序框架,使用 Ruby(语言)将其“粘合”在一起。只要您坚持使用 Rails 框架,您的开发工作就会烟消云散。然而,打破框架,它很可能会破坏你。我认为使用诸如 Ruby on Rails 之类的框架非常适合您从头开始控制一切的新开发。
你的情况可能有些不同。如果我理解正确的话,您有一个 COBOL 应用程序基础和一个需要集成到新 Web 应用程序中的 mySQL 数据库。Rails 框架在这种情况下可能特别有用,也可能不是特别有用。这完全取决于您如何“在中间相遇”。使用强大的支持 Web 的工具来使用基于 COBOL 的后端的前端 Web 应用程序是一种相当普遍的行业实践。将两者结合在一起是一种相当平台特定的艺术形式。
相同的评论适用于任何其他 Web 应用程序框架和工具集。我只是以 Ruby on Rails 为例。最重要的是,没有多少人(其中包括我)考虑过使用 COBOL 前端 Web 应用程序。
尽管如此,我注意到您在您的商店中使用了 openCobol。这可以使构建 COBOL 唯一解决方案成为一个合理的前景。与许多 COBOL 实现不同,openCobol 是“Web 就绪的”,并且具有独立 于数据库的抽象层,因此访问 mySQL 数据库应该非常轻松。Web 就绪部分是 openCobol 使用 C 应用程序二进制接口 (ABI) 的结果。C ABI 应该极大地促进在混合语言环境中的工作,并使与 CGI(通用网关接口)的交互变得非常简单;从这个例子可以看出。
OpenCobol 使构建 Web 应用程序变得可行,但它实用吗?如前所述,除非有文档化的 Web 应用程序框架可供利用,否则您最终将自己做很多事情。我想您在发布问题时可能已经得出了这个结论。据我所知,开发这样的框架也是可行的,但尚不存在。如果你继续这个项目,也许你可以为 openCobol 开发一个 web 应用程序框架做出贡献。
我发现接受的答案中的“Cobol on Cogs”参考有点不公平,您提出了一个严肃的问题,应该得到一个完全严肃的回答。这种类型的参考可能反映了对 COBOL 的一些“红脖子”封闭思想(是的,我已经准备好并期待对这个问题的投票)。