ユーザの入力やシステムの状態によって表示が変化する、動的なWebページを構築する技術としては、サーバサイドJavaが登場する以前から、CGI(Common Gateway Interface)がよく知られています。CGIとは、Webサーバから外部プログラムを呼び出すための仕組みです。PerlやRubyなどのスクリプトを呼び出すことで、Webページを動的に表示させることができます。
小・中規模のWebサイト構築では、まだまだサーブレット・コンテナを導入できないことも多いので、いまだにCGIがよく使われます。一方ではサーバサイドJavaの開発、もう一方ではPerlによるCGIの開発、というようなプログラマの方も多いことと思います。
さて、そのようにJavaとCGIを並行で開発していて、Tomcatがすでにインストールされている環境に、さらにApacheをインストールしなくてはならないのを面倒に感じたことはないでしょうか? Tomcat上でCGIも動かせれば、わざわざApacheをインストールする必要もなく、開発環境がシンプルで済みます。
実は、Tomcatでは、デフォルトでCGIが無効になっているだけで、CGIの実行自体はサポートされているのです。TomcatでCGIを走らせることで、上記のようなニーズに応えることができますし、また、CGIで構築された既存のシステムとJavaを連携させる必要がある場合など、Tomcatのみで環境を作ることもできるわけです。
TomcatでCGIを有効にする方法
上で書いたとおり、Tomcatでは、デフォルトでCGIサポートが無効になってるため、設定を有効にしてやる必要があります。
まず、「%CATALINA_HOME%\server\lib」フォルダ以下のservlet-cgi.renametojarファイルを、servlet-cgi.jarに名前を変更します。
注:「%CATALINA_HOME%」は、Tomcatのルートフォルダを示すこととします。Windowsでのデフォルトは、「C:\Program Files\Apache Software Foundation\Tomcat 5.0」です。
続いて、CGIを利用したいWebアプリケーションのweb.xmlに、以下のようにして、CGI起動用のサーブレット(org.apache.catalina.servlets.CGIServlet)を配備します。web.xmlは、Webアプリケーションのルート配下の「WEB-INF」フォルダにあります。
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> ...中略... <servlet> <servlet-name>cgi</servlet-name> <servlet-class> org.apache.catalina.servlets.CGIServlet </servlet-class> <init-param> <param-name>clientInputTimeout</param-name> <param-value>100</param-value> </init-param> <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> ...中略... <servlet-mapping> <servlet-name>cgi</servlet-name> <url-pattern>/cgi-bin/*</url-pattern> </servlet-mapping> ・・・中略・・・ </web-app>
CGIServletに設定可能なパラメータは以下のとおりです。
パラメータ名 | 説明 | |
---|---|---|
cgiPathPrefix | CGIスクリプトの置かれている場所の指定。頭の「/」を除いた、Webアプリケーションのルートからの絶対パスで指定する。デフォルトの場所は「WEB-INF/cgi」 | |
clientInputTimeout | ブラウザからの入力がないと判定するまでの時間(単位はミリ秒)。デフォルトは100ミリ秒 | |
debug | ログへ出力させるデバッグ情報の表示レベル。デフォルトは0 | |
executable | スクリプトの実行コマンド。デフォルトは「perl」。実行環境において、perlなどの実行コマンドのパスが通っていない場合は、「C:\Perl\bin\perl.exe」のように絶対パスで場所を指定してやる必要がある |
なお、上記のCGI利用のための配備記述は、「%CATALINA_HOME\conf」フォルダにあるweb.xmlに、コメントアウトされた形ですでに記述されています。従って、そのコメントアウトを取り除いて記述を有効にするだけで、簡単に設定することが可能です。しかし、こちらのweb.xmlで記述してしまうと、TomcatサーバのすべてのWebアプリケーションでCGIが有効になりますので、注意が必要です。すべてのWebアプリケーションでCGIを使う必要がないのであれば、先に示したとおり、個々のWebアプリケーションのweb.xmlでCGIの設定をする方が無難です。
これで設定は終了ですが、Windowsをお使いでPerlをCGIに利用したい場合、デフォルトではPerlはインストールされていません。Perlのインストールが必要であれば、以下を参考にPerlをインストールしてください。
Perlをインストールする(Windowsの場合)
LinuxやMac OS Xでは、デフォルトでPerlの実行環境がインストールされていますが、Windowsには入っていません。そのため、Windowsでは、まずはPerlをインストールしてやる必要があります。Red Hat社のCygwinからも、Perlの実行環境をインストールすることができますが、ここではActive State社のActivePerlのインストール方法について説明します。
まず、以下のURLよりActivePerlのインストーラをダウンロードします。
・http://www.activestate.com/Products/ActivePerl/
インストーラには、アンインストーラの付いているもの(MSI版)と付いていないもの(AS Package版)がありますが、特に問題がない限り、アンインストーラ付きの方(ファイル名ActivePerl-x.x.x.xxx-MSWin32-x86.msi)をダウンロードします。
ダウンロードしたファイルActivePerl-x.x.x.xxx-MSWin32-x86.msiを右クリックし、[インストール(I)]を選択してください。以下のインストーラが起動します。
後はウィザードに従って進めていくだけです。特にカスタマイズする必要がなければ、ずっと「Next」を押していくだけでインストールは完了します。デフォルトのインストール場所は、「C:\Perl」になります。
Tomcatがすでに起動している場合は、ActivePerlのインストール完了後に、再起動させてください。インストールしたPerlのパス設定を有効にするためです。
CGIプログラムの動作を確認する
最後に、CGIプログラムが実際にTomcat上で動作することを確認しておきましょう。以下のようなごく基本的なCGIプログラムを用意し、アプリケーションルート配下の「/WEB-INF/cgi」フォルダに配置してください。
#! c:/perl/bin/perl print "Content-Type: text/html\n\n"; print "<html><body>"; print "Hello, CGI!"; print "</body></html>"
「http://localhost:8080/sample/cgi-bin/hello.cgi」でアクセスできれば、成功です。
Copyright © ITmedia, Inc. All Rights Reserved.