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 以下面的方式指定其行為: