Java CGI HOWTO by David H. Silber javacgi-document@orbits.com v0.5, 1 December 1998 藤原輝嘉 fujiwara@linux.or.jp この HOWTO 文書は,Javaで書かれた CGI プログラムを WWW サーバ上で実行 できるように設定する方法と,CGI プログラムを書くための Java の使い方を 説明します.一般に HOWTO 文書は Linux を対象として書かれていますが,こ の文書に限っては UNIX の種類には依存していません. ______________________________________________________________________ 目次 1. はじめに 1.1 本文書で前提とする知識 1.2 本文書について 1.3 プログラム・パッケージについて 1.4 メーリングリスト 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.1.1 Java のプログラムは普通の実行ファイルのようには実行できない 4.1.2 Java は環境変数にアクセスする一般的な方法を持たない 4.2 Java CGI プログラムの実行による問題の解決 4.2.1 java.cgi スクリプト 4.2.2 HTML の FORM からの java.cgi の起動 5. Java CGI クラスの使用 5.1 CGI 5.1.1 クラスの文法 5.1.2 クラスについての説明 5.1.3 メンバの概略 5.1.4 参照 5.1.5 CGI() 5.1.6 getNames() 5.1.7 getValue() 5.2 CGI_Test 5.2.1 メンバの概略 5.2.2 参照 5.2.3 main() 5.3 Email 5.3.1 クラスの文法 5.3.2 Class Description 5.3.3 メンバの概略 5.3.4 参照 5.3.5 Email() 5.3.6 send() 5.3.7 sendTo() 5.3.8 subject() 5.4 Email_Test 5.4.1 メンバの概略 5.4.2 参照 5.4.3 main() 5.5 HTML 5.5.1 クラスの書式 5.5.2 クラスについての説明 5.5.3 メンバ概略 5.5.4 参照 5.5.5 HTML() 5.5.6 author() 5.5.7 definitionList() 5.5.8 definitionListTerm() 5.5.9 endList() 5.5.10 listItem() 5.5.11 send() 5.5.12 title() 5.6 HTML_Test 5.6.1 メンバの概略 5.6.2 参照 5.6.3 main() 5.7 Text 5.7.1 クラスの書式 5.7.2 クラスについての説明 5.7.3 メンバの概略 5.7.4 参照 5.7.5 add() 5.7.6 addLineBreak() 5.7.7 addParagraph() 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, Java Development Kit)の設定の ため,プログラムを起動するには複数のトークンが必要となりますが,これは HTML の FORM や CGI の操作と組み合わせて用いるには不便です.これらの制 限を回避する方法はいくつもありますが,筆者はそのうちの一つを実装しまし た.詳しくは後の章を見てください. 筆者が前の段落を書いた1996年より,Java の技術は大きく変化しています. サーバ側で Java プログラムを実行するためのより優れた解が現在は利用でき ます.サーブレット(servlet)を調べてみてください. 1.1. 本文書で前提とする知識 筆者は HTML や CGI の概念についての一般的な知識および読者自身が使う HTTP サーバについての最小限の知識を持っていることを前提とします.ま た,読者が Java のプログラムの書き方を知っていなければ,本文書の大部分 は無意味になってしまうと思います. 1.2. 本文書について 本文書の最新版は http://www.orbits.com/software/Java_CGI.html で読むこ とができます. 1.3. プログラム・パッケージについて 本文書で説明するプログラムのパッケージの最新版は ftp://ftp.orbits.com/pub/software/java_cgi-0.5.tgz から anonymous FTP で入手できます.パッケージには本文書の SGML ソースも含まれています. パッケージは GNU Library General Public License の条項に従って配布する ことができます.本文書そのものは Linux HOWTO copyright notice の条項に 従って配布することができます. (訳注: 日本語訳も Linux HOWTO copyright notice に従って配布することができます.) もしこのソフトウェアを使う場合には,他の人もこの Java CGI クラスを見つ けることができるように http://www.orbits.com/software/Java_CGI.html へ のハイパーリファレンスを張っていただけると幸いです. 筆者はこのパッケージのメンテナンスやサポートを行う時間が取れなくなった ため,これがおそらく最終リリースとなります.このプログラムが気に入っ て,メンテナンスを引き継ごうという方がいらっしゃれば筆者( javacgi-document@orbits.com)にご連絡ください. 1.4. メーリングリスト このソフトウェアのインストールや利用における共通の問題を通してお互いの 作業を助け合えるようにするため,筆者は majordomo のメーリングリストを 作りました. javacgi-request@orbits.com 宛に本文が subscribe であるメ ールを送ってください. 2. Java の CGI プログラムを実行するためのサーバの設定(説明つき) この章では,Java CGIパッケージのインストールについて,ユーザの操作がど のような影響を及ぼすかも分かるように,詳しく説明します.単にインストー ルすることが目的で,細かい理由はあまり気にならない人は,この章は飛ばし て``Java の CGI プログラムを実行するためのサーバの設定(簡略版)'' へ進 んでください. 2.1. 要求されるシステム性能 このソフトウェアは Java 開発キットがインストールされているほとんど全て の UNIX 系 OS のウェブサーバ上で動作します.筆者は Debian Linux パッケ ージを用いており,HTTP デーモンとしては apache を使っています.もしあ なたが使っているサーバ上で動作しなかった場合には,メーリングリストで連 絡してください.詳しくは ``メーリングリスト''を参照してください. 残念ながら Java ランタイムインタプリタはメモリを大量消費するようです. Java の CGI プログラムをたくさん実行するようならば,サーバ機のメモリを 増設した方が良いかもしれません. 2.2. Java CGI アドオン・ソフトウェア Java による CGI プログラム実行を支援するために私が書いたソフトウェアは Java CGIと言います.このパッケージは 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サーバ はcgi-binディレクトリとして /var/www/cgi-binを用いるよう設定しているの で,Java CGI のプログラムを置く場所として/var/www/javacgiを使っていま す.既に CLASSPATHに含まれているディレクトリに Java CGI のプログラムを 置くことは好まれないと思います.場所を決めたら,システム設定を反映させ るために Makefile を編集します.次に root でログインして,make installを実行します.これによって,Java のプログラムがコンパイルさ れ,java.cgiスクリプトがシステム設定に応じて修正され,各プログラムが適 切な場所にインストールされます.これらに加えて本文書の HTML 版やテスト 用の HTML 文書が必要であれば, make installの代わりにmake allを実行し ます. 2.5. インストールのテスト パッケージによってインストールが行われる HTML 文書は, javacgitest.html, javaemailtest.html 及び javahtmltest.htmlです.前節 でmake allを実行した場合には,これらの文書は Makefile中の WEBDIR で指 定したディレクトリにあります.そうでない場合には,javacgitest.html- dist, javaemailtest.html-dist,javahtmltest.html-dist から各文書を作る ためにmake testを実行してください. 本来はクライアント側では得られないはずの各種情報が表示されていれば,イ ンストールが正常にできています.これを確かめた後は, CGI_Test.class, Email_Test.class, HTML_Test.classを JAVACGI ディレクトリから, javacgitest.html, javaemailtest.html, javahtmltest.html は WEBDIR ディ レクトリから削除しても構いません. 3. Java の CGI プログラムを実行するためのサーバの設定(簡略版) o Java CGI パッケージを ftp://ftp.orbits.com/pub/software/java_cgi-0.5.tgz から入手します. (バージョン番号は変わるかもしれません.) o パッケージを次のコマンドで展開します: gzip -dc java_cgi-0.5.tgz | tar -xvf - (もしバージョン番号が変わっている場合には,これ以降はパッケージに含ま れる文書の指示に従ってください.) o 展開によって新しくできたディレクトリ内にあるMakefileを編集し, java_cgi-0.5の部分をあなたが使っているシステムに合わせて変更しま す. o root になってmake installを実行します.これにより Java プログラムの コンパイル,システム特有の情報の適用,各ファイルのインストールが行 われます.本文書の HTML 版とテスト用の HTML 文書が必要な場合には, make installの代わりにmake allを実行します. o 以上で準備完了です. 4. Java CGI プログラムの実行 4.1. CGI モデルの下で Java を実行する際の障害 WWW サーバから Java のプログラムを実行する際には 2つの大きな問題があり ます: 4.1.1. Java のプログラムは普通の実行ファイルのようには実行できない Java のプログラムを実行するためには,コマンドライン上でJava ランタイ ム・インタプリタを実行し,これに初期クラス(実行するプログラム)を与えな ければなりません.ところが,HTML の FORM を使う場合,WWW サーバにコマ ンドラインを教えることはできません. 4.1.2. Java は環境変数にアクセスする一般的な方法を持たない Java のプログラムが必要とする環境変数は,明示的に渡してやらなければな りません. C言語のgetenv()関数のような方法はありません. 4.2. Java CGI プログラムの実行による問題の解決 これらの問題を解決するため,Java インタプリタが必要とする情報を与える ための CGI シェルスクリプトを作りました. 4.2.1. java.cgi スクリプト このシェルスクリプトは HTTP デーモンと 実行する Java CGI プログラムの やりとりを管理します.このスクリプトは,まず実行するプログラムの名前を サーバが与えたデータから展開します.次に全ての環境変数をテンポラリファ イルに集めます.それから,環境変数についての情報ファイルの名前とプログ ラムの名前をコマンドラインに指定してJava インタプリタを実行します. ``ローカルパスについての方針の決定'' の節で設定およびインストールされ ています. 4.2.2. HTML の FORM からの java.cgi の起動 Java CGI を使う FORM では以下のように FORM のアクションを指定します: