Tomcat5.5にさわる

作成 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のトップ画面(見た目あまり変わってないね。。。)

JREで起動

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にアクセスすると、あら不思議。ちゃんとコンパイルされて表示されます。

CGI

TomcatなのにCGI/SSIが利用可能になりました。ただしまだけっこう実験段階であまり使わせたくないのか、多少設定が必要です。

CGI(Common Gateway Interface)とは、静的なHTMLと違い、動的なページ生成や処理を行う仕組みです。JavaのサーブレットもCGIの一種かもしれませんが、一般にPerlやPHPなどで実行するのがCGIと言われるものです(たぶん)。

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メモ)。

CGIの作成

以下、簡単なperlスクリプトの例です。

hello.cgi

print "Content-type: text/html\n\n";
print "hello ";

このファイルをWEB-INF/cgiの下に置きます。

CGIにアクセス

Tomcatを起動し、ブラウザで、http://localhost:8080/testweb/cgi-bin/hello.cgi にアクセスすると上記のCGIスクリプトが実行されhelloと表示されます。

デフォルトはperlですが、phpやrubyなども利用できると思います(やってないけど)。

ちなみに、最初CGIの実行を試したとき、なぜだかエラー(Create Processなんとかエラー)が出てうまくいきませんでした。Tomcatを再起動したり、JREをJDKに変えたりなどしているといつの間にかうまくいきました。原因不明。

SSI

SSI(Server Side Include)とは、CGIと同じく動的なページ生成や処理を行う仕組みですが、HTML内にSSIの処理命令を記述します。CGIがサーブレットとしたら、SSIはJSPみたいなもんです。ちょっと違うか。まあ、いいや。

SSIの方もCGIと似たような設定が必要です。

SSIを有効にする設定

まず、%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の作成

SSIを記述したファイルを作成します。これはcgiディレクトリとかの中でなく、JSPやHTML同様、ブラウザからアクセスできる場所におきます。拡張子はshtmlとします。

hoge.shtml(SSIの例)

<html>
<body>

<h2>SSI</h2>

<!--#exec cmd="cmd /C cd"-->

</body>
</html>

SSIにアクセス

ブラウザで、上記shtmlファイルにアクセスすると、HTMLが表示され、記述したSSIの結果も表示されます。

WEB-INF/cgiに置いたスクリプトを実行したかったりするのですが、どうやってそのパスを取るのか今不明。

TODO

参考

とほほのCGI入門/SSI入門
http://tohoho.wakusei.ne.jp/wwwcgi.htm
http://tohoho.wakusei.ne.jp/wwwssi.htm


Top