連載
» 2004年09月07日 10時00分 UPDATE

JavaTips 〜アプリケーションサーバ/コンテナ活用編:TomcatでCGIを使う

[佐藤匡剛,@IT]

 ユーザの入力やシステムの状態によって表示が変化する、動的な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」フォルダにあります。

各Webアプリケーションのweb.xml
<?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に設定可能なパラメータは以下のとおりです。

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)]を選択してください。以下のインストーラが起動します。

ActivePerlのインストーラ ActivePerlのインストーラ

 後はウィザードに従って進めていくだけです。特にカスタマイズする必要がなければ、ずっと「Next」を押していくだけでインストールは完了します。デフォルトのインストール場所は、「C:\Perl」になります。

 Tomcatがすでに起動している場合は、ActivePerlのインストール完了後に、再起動させてください。インストールしたPerlのパス設定を有効にするためです。

CGIプログラムの動作を確認する

 最後に、CGIプログラムが実際にTomcat上で動作することを確認しておきましょう。以下のようなごく基本的なCGIプログラムを用意し、アプリケーションルート配下の「/WEB-INF/cgi」フォルダに配置してください。

hello.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© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。