作成 2004/9/10
Tomcat5.5が開発版ながらリリースされました。Tomcat5.5は、JDK1.5(5.0)用に開発されたTomcatの新バージョンです。コンパイラが内臓されたため、javacツールが不要になったことや、CGIが使えたり(←5からあったみたい)と、新機能もいくつかあります。Tomcat5.5でちょっと楽しそうな機能にさわってみます。
TomcatのWebサイト
http://jakarta.apache.org/tomcat/
ChangeLog
http://jakarta.apache.org/tomcat/tomcat-5.5-doc/changelog.html
ここでは以下の環境で試しました。
Tomcatは、上記TomcatのWebサイトのDownload→Binariesからダウンロードします。ここでは現在の最新版の5.5.1 zipをダウンロードしました。適当なディレクトリに配置すればインストールは完了です。
なお、Tomcat5.5はデフォルトで、J2SE1.5(5.0)用なので、SunのサイトからJ2SE1.5(5.0)をダウンロード、インストールしておく必要があります。なお、J2SE1.5より前のJREも利用可能ですが、その場合は、TomcatのダウンロードでCompatモジュールも一緒にダウンロード、インストールする必要があります。
Tomcat5.5の基本的な使い方はTomcat5と同じです。JAVA_HOME(やTOMCAT_HOME)環境変数を設定して、binのstartup/shutdownで起動、停止です。ファイルの配置もそれほど変わってないようなので、EclipseのSysdeo Tomcatプラグインなども利用できました。
Tomcatのトップ画面(見た目あまり変わってないね。。。)
Tomcat5.5では、デフォルトでEclipseのJDTコンパイラが内臓され、javacを含む"JDK"は必須ではなくなりました。JREでTomcatを実行し、JSPにアクセス可能です。JREで起動するには、JAVA_HOMEでJREを指定すればいいだけです。
set JAVA_HOME=C:\Program Files\Java\jre1.5.0
いいだけですといいながら、ちょっとスクリプトがダメっぽくて若干修正が必要です。setclasspath.batでJDKの一部のファイルがないと、他の変数をセットしないようになっているので、これを修正します。setclasspath.batの17行目付近の2行をremります。
@rem if not exist "%JAVA_HOME%\bin\jdb.exe" goto noJavaHome @rem if not exist "%JAVA_HOME%\bin\javac.exe" goto noJavaHome
Tomcatを起動し、JSPにアクセスすると、あら不思議。ちゃんとコンパイルされて表示されます。
TomcatなのにCGI/SSIが利用可能になりました。ただしまだけっこう実験段階であまり使わせたくないのか、多少設定が必要です。
CGI(Common Gateway Interface)とは、静的なHTMLと違い、動的なページ生成や処理を行う仕組みです。JavaのサーブレットもCGIの一種かもしれませんが、一般にPerlやPHPなどで実行するのがCGIと言われるものです(たぶん)。
まず、%TOMCAT_HOME%/server/libの以下のJARの名前を変更します。
servlets-cgi.renametojar → servlets-cgi.jar
そして、%TOMCAT_HOME%/conf/web.xmlのcgiサーブレットのコメントをはずします。
283行目付近
<!-- <servlet> <servlet-name>cgi</servlet-name> <servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>6</param-value> </init-param> <init-param> <param-name>cgiPathPrefix</param-name> <param-value>WEB-INF/cgi</param-value> </init-param> <load-on-startup>5</load-on-startup> </servlet> -->
343行目付近
<!-- <servlet-mapping> <servlet-name>cgi</servlet-name> <url-pattern>/cgi-bin/*</url-pattern> </servlet-mapping> -->
これでCGIを動作させる設定は完了です。デフォルトでは、CGIスクリプトは、WEB-INF/cgi以下、CGIの言語はperl、サーブレットマッピングは、/cgi-bin/* になっています。
なお、Perlを実行するにはWindowsであればActive Perlなどをインストールする必要があります(参考 Active Perlメモ)。
以下、簡単なperlスクリプトの例です。
hello.cgi
print "Content-type: text/html\n\n"; print "hello ";
このファイルをWEB-INF/cgiの下に置きます。
Tomcatを起動し、ブラウザで、http://localhost:8080/testweb/cgi-bin/hello.cgi にアクセスすると上記のCGIスクリプトが実行されhelloと表示されます。
デフォルトはperlですが、phpやrubyなども利用できると思います(やってないけど)。
ちなみに、最初CGIの実行を試したとき、なぜだかエラー(Create Processなんとかエラー)が出てうまくいきませんでした。Tomcatを再起動したり、JREをJDKに変えたりなどしているといつの間にかうまくいきました。原因不明。
SSI(Server Side Include)とは、CGIと同じく動的なページ生成や処理を行う仕組みですが、HTML内にSSIの処理命令を記述します。CGIがサーブレットとしたら、SSIはJSPみたいなもんです。ちょっと違うか。まあ、いいや。
SSIの方もCGIと似たような設定が必要です。
まず、%TOMCAT_HOME%/server/libの以下のJARの名前を変更します。
servlets-ssi.renametojar → servlets-ssi.jar
そして、%TOMCAT_HOME%/conf/web.xmlのssiサーブレットのコメントをはずします。
228行目付近
<!-- <servlet> <servlet-name>ssi</servlet-name> <servlet-class> org.apache.catalina.ssi.SSIServlet </servlet-class> <init-param> <param-name>buffered</param-name> <param-value>1</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>expires</param-name> <param-value>666</param-value> </init-param> <init-param> <param-name>isVirtualWebappRelative</param-name> <param-value>0</param-value> </init-param> <load-on-startup>4</load-on-startup> </servlet> -->
343行目付近
<!-- <servlet-mapping> <servlet-name>ssi</servlet-name> <url-pattern>*.shtml</url-pattern> </servlet-mapping> -->
これでSSIを利用する設定は完了です。デフォルトで、SSIサーブレットは、*.shtmlにマッピングされています。
SSIを記述したファイルを作成します。これはcgiディレクトリとかの中でなく、JSPやHTML同様、ブラウザからアクセスできる場所におきます。拡張子はshtmlとします。
hoge.shtml(SSIの例)
<html> <body> <h2>SSI</h2> <!--#exec cmd="cmd /C cd"--> </body> </html>
ブラウザで、上記shtmlファイルにアクセスすると、HTMLが表示され、記述したSSIの結果も表示されます。
WEB-INF/cgiに置いたスクリプトを実行したかったりするのですが、どうやってそのパスを取るのか今不明。
とほほのCGI入門/SSI入門
http://tohoho.wakusei.ne.jp/wwwcgi.htm
http://tohoho.wakusei.ne.jp/wwwssi.htm