Java CGI HOWTO 中译版 作者: David H. Silber [1]javacgi-document@orbits.com 译者: [2]黄志伟 [3]cwhuang@phys.ntu.edu.tw v0.5, 1 December 1998 翻译日期: 17 December 1998 _________________________________________________________________ 本文解释如何设定你的伺服器,使其能使用 Java 来写 CGI 程式,以及如何用 Java 来写 CGI 程式.虽然 HOWTO 文件的目的是用在 Linux 作业系统上,但这 篇特别的文章事实上与特定版本的 UNIX 系统无关. _________________________________________________________________ 1. 简介 * 1.1 预备知识 * 1.2 这份文件 * 1.3 软体套件 * 1.4 The Mailing List 2. 设定伺服器以执行 Java CGI 程式 (解释篇) * 2.1 系统需求 * 2.2 Java CGI 辅助软体 * 2.3 解开原始档 * 2.4 决定你的本地目录策略 * 2.5 测试你的安装 3. 设定伺服器以执行 Java CGI 程式 (简略篇) 4. 执行一个 Java CGI 程式 * 4.1 以 CGI 模式执行 Java 程式的障碍 * 4.2 执行 Java CGI 解决问题 5. 使用 Java CGI 类别 * 5.1 CGI * 5.2 CGI_Test * 5.3 Email * 5.4 Email_Test * 5.5 HTML * 5.6 HTML_Test * 5.7 Text 6. 未来的计画 7. 版本修改记录 * 7.1 由 0.4 到 0.5 的修改 * 7.2 由 0.3 到 0.4 的修改 * 7.3 由 0.2 到 0.3 的修改 * 7.4 由 0.1 到 0.2 的修改 _________________________________________________________________ 1. 简介 由於 Java 的设计方式程式设计师没有简易的方法可以取得系统的环境变数. 由 於 Java 发展工具 (JDK) 建立的方式,呼叫一个程式必须使用多重表 徵(tokens), 这和标准的 HTML forms/CGI 运作方式不易配合. 有一些办法可 以克服这些限制,而我就实作了其中一种.详情请见下述. 我写下前段的时间是 1996. 到现在 Java 的技术已经有很大的改变了。 目前可 能有更好的方法来执行伺服器端的 Java 程式 -- 也许你应该看一看 servlets(?). 1.1 预备知识 我假定你有 HTML 与 CGI 概念的一般知识,而且了解关於你的 HTTP 伺服器的最 基本知识. 你也应该知道如何写 Java 程式,否则这些都没有意义. 1.2 这份文件 本文的最新版本可以从此找到: [4]http://www.orbits.com/software/Java_CGI.html. 1.3 软体套件 本文所提到的软体套件的最新版本可由匿名 FTP 取得 [5]ftp://ftp.orbits.com/pub/software/java_cgi-0.5.tgz. 这套件包含本文的 SGML 原始档. 这些套件的散布必须依据 GNU Library General Public License. 本文可依 Linux HOWTO 的版权声明散布. 如果你使用本软体,请制作一些参考指向 [6]http://www.orbits.com/software/Java_CGI.html, 以便让其它人能找到 Java CGI 的类别. 我已经没有时间再去维护这个套件,因此这或许是最後一版了。 如果有人非常地 喜欢这个程式,而想接手维护,请与我联络: [7]javacgi-document@orbits.com 1.4 The Mailing List 我已经建了一个 majordomo 通信论坛让使用本程式的人们可以互相帮忙解决问题 。 请送信件到 [8]javacgi-request@orbits.com 内容包含 subscribe 这个字。 2. 设定伺服器以执行 Java CGI 程式 (解释篇) 这一节教你安装我的 Java CGI 套件,以及大量的解释,让你能够了解你的行为 会导致什麽结果. 如果你只想安装程式而不想了解为什麽,直接跳到 [9]设定伺 服器以执行 Java CGI 程式 (简略篇). 2.1 系统需求 本软体应该能在已安装 Java 程式发展工具的任何类 UNIX 的 web 伺服器上安装 . 我将它装在执行 apache 伺服器的 Debian Linux 系统上. 如果你发觉它无 法在你的伺服器上运作,请利用通信论坛. 细节请见 [10]The Mailing List. 不幸的是,Java 执行时期解译器似乎是吃记忆体的怪物 -- 如果你将使用许多 Java CGI 程式的话你可能要再丢数 MB 的 RAM 到你的伺服器里. 2.2 Java CGI 辅助软体 我写的辅助软体就叫做 Java CGI.你可从 [11]ftp://ftp.orbits.com/pub/software/java_cgi-0.5.tgz 取得(版本号码可 能会改变). 2.3 解开原始档 找一个合适的目录将套件解开. (如果你还没有标准放置软体的地方,我建议你 放在 /usr/local/src.) 用这个指令解开套件: gzip -dc java_cgi-0.5.tgz | tar -xvf - 这会产生一个叫 java_cgi-0.5 的目录. 在那里你可以找到本文其它地方提到的 档案. (如果版本号码改变了,就改用那套件里的.) 2.4 决定你的本地目录策略 你必须决定让你的 Java CGI 程式住在那里. 一般来说,你会希望放在和你的 cgi-bin 平行的目录. 我的 apache 伺服器设定使用 /var/www/cgi-bin 为 cgi-bin 目录, 因此我用 /var/www/javacgi 作为放置 Java CGI 程式的地方. 你可能不会想让将你的 Java CGI 程式放进某一已存在的 CLASSPATH 目录. 编 辑 Makefile 来反应你的系统配置.确定你用 root 签入然後执行 make install. 这将编译 Java 程式,修改 java.cgi 指令稿以符合你的系统,并且 将程式安装进适当的位置. 如果你希望拥有本文的 HTML 版本以及一份 HTML 测 试文件,改用 make all. 2.5 测试你的安装 由本套件安装的 HTML 文件叫做 javacgitest.html, javaemailtest.html 以及 javahtmltest.html. 如果你在前节使用 make all,它们会放在你於 Makefile 中指定的 WEBDIR 目录中. 如果不是,你可以执行 make test 从 javacgitest.html-dist, javaemailtest.html-dist 以及 javahtmltest.html-dist 来建立它们. 当你确定你的安装可以正确运作後,你可能希望从你的 JAVACGI 目录移除 CGI_Test, Email_Test 以及 HTML_Test 类别,还有从 WEBDIR 目录移除 javacgitest.html, javaemailtest.html 以及javahtmltest.html,因为它们会 显示应该只有伺服器管理者才看得到的使用者资讯. 3. 设定伺服器以执行 Java CGI 程式 (简略篇) 1. 从 [12]ftp://ftp.orbits.com/pub/software/java_cgi-0.5.tgz. 取回 Java CGI 套件.(版本号码可能会改变.) 2. 用这个指令解开套件: gzip -dc java_cgi-0.5.tgz | tar -xvf - (如果版本号码改变了,就改用那套件里的.) 3. 修改在新产生的 java_cgi-0.5 目录里的 Makefile 以符合你的系统. 4. 以 root 身份,执行 make install. 这将编译 Java 程式,加上你系统特 定的资讯并安装许多档案. 如果你希望拥有本文的 HTML 版本以及一份 HTML 测试文件,改用 make all. 5. 然後应该就可以用了. 4. 执行一个 Java CGI 程式 4.1 以 CGI 模式执行 Java 程式的障碍 从 web 伺服器执行 Java 程式有两个主要的问题: 你不能像一般执行档一样执行 Java 程式 你必需执行 Java 的执行时刻(run-time)解译器并且以命令列的方式提供初始类 别(程式执行所需). 在一个 HTML form 里面没有办法提供命令列给 web 伺服器 . Java 程式没有一般的方法可以取得环境变数 Java 程式所需的每个环境变数都必需被传入. (在 Java 程式中)没有类似 C 语 言的 getenv() 函数. 4.2 执行 Java CGI 解决问题 为了处理这些困难,我写了一个 CGI 指令稿程式,提供 Java 解译器所需的资讯 . java.cgi 指令稿 这个指令稿管理 HTTP 伺服器与你希望使用的 Java CGI 程式之间的互动. 它从 server 端提供的资料中取出你想要执行程式的名称. 它将所有的环境变数资料 将髹到一个暂存档里.然後,它将这个档案以及程式名称加命令列中, 执行 Java 的执行时刻解译器. java.cgi 指令稿的设定与安装在 [13]决定你的本地目录策略 一节说明. 从 HTML form 中引发 java.cgi 使用 Java CGI 程式的 HTML form 以下面的方式指定其行为: