【问题标题】:Cobol web development/hosting resources [closed]Cobol Web 开发/托管资源 [关闭]
【发布时间】:2010-03-29 16:57:37
【问题描述】:

我受雇于德国一家相当大的公司,并得到了为其创建主要网站的工作,该网站将包含:

  • 静态内容;信息和演示文稿
  • 一个员工区(大约 6000 名员工),其中包含日历、职位描述、某种组等各种内容
  • 其他动态内容太多我无法在此处列出

我决定使用 COBOL 来完成这项工作,它可能被低估了,但它是一种非常强大的语言,尤其是对于商业应用程序,而且正如我的同事所说,对于 web (2.0) 开发也是如此。

我还需要使用COBOL,因为公司所有的后端和交易系统都在里面编程(一些小部分也是用LISP编程的,我不知道为什么)。我还收到了一个 API,它可以轻松地将 COBOL 与 MySQL 一起使用。

这是一个大项目,可能需要两个多月的时间来编写它。

  • 在使用 COBOL 构建大型 Web 应用程序时,我有什么期望?
  • 是否有适用于 COBOL 的 Web 框架?某种 MVC?
  • 对于使用 COBOL 进行实际 Web 开发有什么好的资源吗?

提前致谢

【问题讨论】:

  • 平台是 IBM i 系列,也称为 AS/400?
  • Pete Duncanson:这不是一个开玩笑的问题,我必须在这个项目中使用 COBOL,而且我听说它并没有大家说的那么糟糕。 S.Lott:不,他们将使用 OpenCobol 编译项目,然后将其绑定到 CGI,我对这个过程不是很熟悉,尽管这只是项目的开始。对不起,我的英语不好,德语,你知道的。

标签: cobol


【解决方案1】:

在构建时我必须期待什么 COBOL 中的大型 Web 应用程序?

这需要很长时间。 Django、Ruby on Rails 或 CodeIgniter 等框架专门设计用于在很短的时间内创建网站。

这些框架中的大多数可以在 20 分钟内构建有效的动态内容网站。 COBOL 不能。除非您可以非常快速地打字,否则在您可以使用任何更现代的工具学习和构建网站的时间里,您可能只有很少的可用代码。

是否有用于 COBOL 的 Web 框架 可用的?某种 MVC?

现在问这个问题表明选择使用 COBOL 是一个非常非常糟糕的主意。

通常的策略是先选择框架。在做出框架选择之后,我们会忍受利用该框架所需的语言。

但是,总是有http://www.coboloncogs.org/HOME.HTM

有什么好的资源 使用 COBOL 进行实际的 Web 开发?

http://search.barnesandnoble.com/COBOL-Programming-Using-the-NET-Framework/Ronald-D-Reeves/e/9780130668431

实际的 Web 开发是使用特定于 Web 的框架完成的。数十个 Python Web 框架、Ruby on Rails、任何 PHP 框架、任何 Java 框架中的任何一个。他们高度专业化,可以快速、廉价地构建网站。

COBOL 对此并不高度专业化。也没有人(在 i 系列之外)认真考虑将 COBOL 用于 Web 开发。

您最大的希望是使用尽可能多的外部库并尽可能少地编写 COBOL。您必须大量使用 OpenCOBOL 的 COBOL 到 C 功能才能使用 C 语言 API,并且 - 实际上 - 使用 COBOL 包装器在 C 中构建您的站点。

【讨论】:

  • 作为一名全职“硬核”COBOL 程序员和“小时候”Web 开发人员,我不得不同意S.Lott。不要将 COBOL 用于前端 Web 开发!真的会很痛!另一方面,利用您的 COBOL 系统为 Web 驱动的应用程序提供后端支持可能是一个合理的选择。
  • @NealB:很多人正是这样做的——Web 前端通过 COBOL 程序启动后端处理。
  • 就像 NealB 说的,使用 COBOL 与现有的后端系统进行交互。 Web 部件与 COBOL 所针对的应用程序类型非常不同。考虑与 Web 服务器交互、使用 HTTP、处理原始表单数据、生成 HTML 和 JSON。让 COBOL 做其他系统本机支持的事情将花费大量时间。选择一个 Web 框架,创建一个基于 REST 或 SOAP 的服务层,从现有系统中公开功能并使用 COBOL 来实现这些服务。
【解决方案2】:

请,请,请不要为此使用 COBOL。将来必须支持该网站的任何人都会感谢您选择更...现代的工具。

我建议您使用 Web 框架来编写前端,例如 PHP、ASP.NET MVC 等。然后创建一个 API(或具有某种接口的单独进程,如果需要),它将允许该工具与您的 COBOL 后端对话。这将允许您在前端使用 Web 框架 - 它将大放异彩 - 同时允许您利用公司对 COBOL 的大量投资。

【讨论】:

  • 如前所述,我必须使用 COBOL。
  • @felixm:“我决定使用 COBOL”听起来你做了一个错误的决定。 “我必须使用 COBOL”听起来像是其他人做出了错误的决定。谁——特别是——在做出这个错误的决定?为什么你不得不使用 COBOL?谁在吸引你?
  • 我以为你决定使用它?无论如何,我建议您使用 Web 框架来编写前端,例如 PHP、ASP.NET MVC 等。然后创建一个 API(或具有某种接口的单独进程,如果需要),它将允许与您的 COBOL 后端对话的工具。这将允许您在前端使用 Web 框架 - 它将大放异彩 - 同时允许您利用公司对 COBOL 的重大投资。
【解决方案3】:

已经发布了 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.

这是一个添加了一点 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>

补充一点,当我为 OpenCOBOL FAQ 测试这个时,它是使用嵌入在 COBOL 中的 WebKit 浏览器,利用 Vala WebKit 绑定。发挥魅力。 COBOL 控制处理 CGI 的浏览器。

【讨论】:

    【解决方案4】:

    大多数人对开发 Web 应用程序的第一反应 在 COBOL 中是非常负面的!

    总的来说,我同意,并且建议不要简单地使用 COBOL 进行前端 Web 开发 因为还有其他工具附带了很多预打包的支持 构建这种应用程序。支持通常来自图书馆 Web 服务的附加组件和预构建接口。这 实现语言本身不太重要。

    例如,Ruby on Rails 是一种 基于使用 Ruby(语言)的 MVC 模型的应用程序框架 将它们“粘合”在一起。相当一部分您的开发工作蒸发了 只要你坚持使用 Rails 框架。但是,打破框架 它很可能会让你崩溃。我看到使用诸如 Ruby on Rails 之类的框架 非常适合您从头开始控制一切的新开发。

    您的情况可能有些不同。如果我理解正确,你 有一个 COBOL 应用程序的基础和一个需要集成的 mySQL 数据库 一个新的网络应用程序。 Rails 框架可能会也可能不会特别 在这种情况下很有用。这完全取决于你如何“在中间相遇”。这是 一种相当普遍的行业实践,即使用强大的支持 Web 的工具进行前端 具有基于 COBOL 的后端的 Web 应用程序。让两者走到一起 是一种相当特定于平台的艺术形式。

    相同的 cmets 适用于任何其他 Web 应用程序框架和工具集。我只是 以 Ruby on Rails 为例。底线是,没有多少人(我其中) 已经考虑过使用 COBOL 来前端 Web 应用程序。

    尽管如此,我注意到您在您的商店中使用了 openCobol。 这可以使建筑 一个COBOL唯一的解决方案是一个合理的前景。与许多 COBOL 实现不同, openCobol 来“网络就绪”并且 有一个database independent abstract layer 所以访问你的 mySQL 数据库应该很轻松。 Web 就绪部分是 openCobol 使用 C 应用程序二进制接口 (ABI)。 C ABI 应该极大地促进在一个 混合语言环境并使与 CGI(通用网关接口)的交互非常漂亮 很琐碎;从这个example可以看出。

    OpenCobol 使构建 Web 应用程序变得可行,但它实用吗?如前所述, 除非有一个记录在案的 Web 应用程序框架可供使用,否则您 最终会自己做很多事情。我想你可能已经来到这个 在发布您的问题时得出结论。据我所知,开发这样一个框架 也是可行的,但尚不存在。如果你继续这个项目, 也许您可以为开发 openCobol 的 Web 应用程序框架做出贡献。

    我在接受的答案中找到了“Cobol on Cogs”参考 有点不公平,你问了一个严肃的问题 并且应该得到一个完全严肃的答案。这种类型的参考可能反映了一点 对 COBOL 的“红脖子”封闭思想(是的,我已经准备好并期待 对此投反对票)。

    【讨论】:

      【解决方案5】:

      如果您因为需要与一些遗留的 COBOL API 集成而不得不使用 Cobol,那么您如何使用 Cobol 通过一些 RESTful(或类似)API 来公开数据。然后用 Django 之类的现代工具编写您的 Web 应用程序(这非常好)。然后,Python Web 应用程序可以通过您在 Cobol 中提供的 RESTful API 轻松访问必要的数据。

      这将允许您为每项工作使用正确的工具:用于 Web 应用程序的现代 Web 应用程序框架和一些 Cobol 代码,用于公开您只有 Cobol API 的数据。

      【讨论】:

        【解决方案6】:

        Microfocus 提供一个名为 Enterprise Server 的产品,它允许 COBOL 与 Web 服务交互。

        如果您有一个 COBOL 程序 A 和另一个 COBOL 程序 B 并且 A 通过接口部分调用 B,则该工具允许您将 B 的接口部分公开为 Web 服务。

        对于程序 A,然后生成客户端代理,A 现在可以通过 Web 服务调用 B。

        当然,因为 B 现在有了 Web 服务,任何其他类型的程序(命令行、Windows 应用程序、Java、ASP 等)现在也可以调用它。

        他们还有另一个产品“COBOL.Net”,它为 COBOL 程序提供了 .NET IL 的解释器。

        因为是.NET平台,所以可以和C#等混搭。

        这可以让您两全其美。您保留现有的 COBOL 后端,但可以使用现代工具开发 Web 应用程序,例如ASP/MVC/Struts/JSP。然后你通过一个网络服务将两者链接在一起。

        【讨论】:

        • 基于原始海报制作的 cmets,看起来他们正在使用 OpenCOBOL,它基本上是一个 COBOL 到 C 的翻译器。也许他们打算利用这个“特性”来打破 COBOL 的框框。
        猜你喜欢
        • 1970-01-01
        • 2019-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-17
        • 2010-09-06
        相关资源
        最近更新 更多