TomcatとNetscapeの手引き

Gal Shachor著 <shachor@il.ibm.com>

この文書は、Tomcatと協調させるためにNetscape Webサーバーをセットアップする方法を説明します。 Netscape Webサーバーは、通常独自のServletエンジンとともに提供されます。 しかし、Tomcatリダイレクタプラグインを使用すれば、JSPとServletの要求をTomcatに転送するように設定することができます。

ドキュメントの表記法と仮定

<tomcat_home> は、tomcatのルートディレクトリです。 Tomcatをインストールするためは、以下のサブディレクトリが必要です。

  1. <tomcat_home>\conf - さまざまな設定ファイルを置きます
  2. <tomcat_home>\webapps - サンプルアプリケーションを含みます
  3. <tomcat_home>\bin - Webサーバープラグインを置きます

本文書中の全ての例では、<tomcat_home> を c:\jakarta-tomcat と記述します。

ワーカ (worker)は、tomcatプロセスがNetscapeサーバーから仕事を受け取るために定義します。

サポートする構成

Netscape-Tomcat リダイレクタは、次の環境で開発とテストをおこないました。

  1. WinNT4.0-i386 SP4/SP5/SP6a (NTサービスパックとUNIXの他のバージョンで動作しなければなりません)
  2. Netscape Enterprise 3.0 と 3.61
  3. Tomcat3.0 - Tomcat3.2

リダイレクタは、Tomcatコンテナに要求を送るために、 ajp12 を使用します。 Tomcatを内部プロセスで使用することもできます。 内部プロセスモードについての詳細は「内部プロセスの手引き」を見てください。

インストール

Tomcat 3.2 より、Win32用に事前にビルドされたNetscape リダイレクタ・サーバ・プラグインの nsapi_redirect.dllが、 Tomcatバイナリ配布の win32/i386ディレクトリに用意されています。 Netscapeをあなたのブラウザとして使用する場合には、可能であれば、 ファイルのzpiバージョンのダウンロードを試してください。Netscapeを使用して DLLをダウンロードする際に問題が発生することがあります。

あなたは、また、Tomcatのソース配布をローカルにコピーしてソースから構築する ことができます。

Tomcat リダイレクタには、以下の2つが必要です。

  1. nsapi_redirect.dll - Netscape サーバープラグイン。すでにビルドされているDLLを入手するか、 あなた自身でビルドしてください (ビルドセクションを参照)。
  2. workers.properties - ワーカ(Tomcatプロセス)のために使用されるホスト名とポート番号を記述するファイル。 このファイルは、(jakarta-tomcat/conf/workers.properties)にあります。

インストールでは、以下のことをおこないます。

  1. NSAPIリダイレクタをデフォルトの/exsamples コンテキストで設定して、 Netscapeでサーブレットが実行できることを確認します。
  2. さらに他のコンテキストを設定に追加します。

NSAPI リダイレクタの設定

この文書では、nsapi_redirect.dll は、 c:\jakarta-tomcat\bin\win32\i386\nsapi_redirect.dll にあり、 プロパティファイルを c:\jakarta-tomcat\confに作成したと仮定します。

  1. Netscapeが、サーブレットをサポートサポートするようにビルドされていれば、それを無効にします。
  2. リダイレクタプラグインをNetscapeサーバー設定に追加します。 サーバーの obj.conf を編集して、以下の行を追加します。
  3. Netscape を再スタート(サーバーの停止と開始)をします。

これで終りです。 あなたはtomcatを起動して、Netscapeに http://server:port/examples/ を問い合わせることができます。

さらにコンテキストを追加する

サンプルコンテキストは、インストールを検証するのに役立ちます。 しかし、さらに自分のコンテキストを追加する必要があります。 新しいコンテキストを追加するためには、2つの操作が必要です。

  1. コンテキストをTomcatに追加します(このドキュメントでは説明しません).
  2. NSAPIリダイレクタに、このコンテキストを処理するように割り当てます。

NSAPIリダイレクタに、このコンテキストを取り扱うように命じることは簡単で、 obj.confを編集して、以下のようなNameTrans行を追加するだけです。

NameTrans fn="assign-name" from="/<context name>/*" name="servlet"

obj.confを保存してからNetscapeをリスタートすれば、あたらしいコンテキストを取扱います。

Tomcat 3.2での新機能として、Tomcatが開始されるたびに、obj.conf-autoが自動的に書かれます。 このファイルは、Tomcatが実行している間、提供するそれぞれのコンテキストの設定が含まれます。 それぞれのコンテキストは、Tomcatが扱うサーブレットとJSP要求(Netscapeに全ての他の 内容を提供させる設定と同様に)を持つために設定を持ちます。 それが直接使用されるまえに、このファイルは若干の修正を必要とします。 もしあなたが、その内容のいくつかをどこか別のファイルにコピーするのではなく、このファイルを 直接使用したい場合には、(次にTomcatを起動したときに、それが上書きされないよう)その名前を変えて、 どんな必要な変更も作成しなければなりません。

リダイレクタをビルドする

リダイレクタはVisual C++ Ver.6.0を使って開発されたので、カスタムビルドしたい場合には、あらかじめこの環境を用意しておく必要があります。

あなたがおこなう必要がある手順は以下のとおりです。

  1. nsapiプラグインソースディレクトリに移動します。
  2. nsapi.dsp を編集して、includeとライブラリパスが、あなたがインストールしたNetscapeサーバーを参照するように更新します。 (コンパイラオプションの /I とリンカオプションの /libpathを調べてください)
  3. 以下のコマンドを実行します。
    MSDEV nsapi.dsp /MAKE ALL
    もし、msdevがパスに無い場合には、msdev.exeへのフルパスを入力します。

これは、リダイレクタプラグインのリリース版とデバッグ版の両方をビルドします。

他に、msdevで nsapiワークスペースファイル(nsapi.dsw)を開いて、ビルドメニューを使用してビルドできます。

どのように動作するのか?

  1. Netscape-Tomcat リダイレクタは、Netscapeのサービスステッププラグインです。 Netscape は、リダイレクタプラグインを読み込み、"servlet"設定オブジェクトに割り当てられた要求のために、そのサービスハンドラー機能を呼び出します。
  2. 入ってくる個々の要求のために、Netscapeは、obj.confに付け加えた一連のNameTrans指示を実行し、assign-name機能が、要求されたURLとパラメータが一致するかチェックします。
  3. 一致した場合は、assign-name機能は、要求に対してServletオブジェクト名を割り当てます。 これによって、Netscapeは、設定したServletオブジェクトに対して要求を送るようになります。
  4. Netscape は、我々のjk_serviceエクステンションを実行します。 エクステンションは要求パラメータを集めて、それらをajp12プロトコルを使用して関連するワーカに送ります。 (jk_serviceでのworker="ajp12" パラメータは、ajp12という名前のワーカがこの要求を処理することを知らせます)
  5. エクステンションは、ワーカからのレスポンスを集めて、それをブラウザに返します。

高度なコンテキスト設定

Tomcatが配信するコンテキストの一部のファイルであっても、 Netscapeが静的ページ(html, gif, jpeg,など)を配信する方がよいことがあります。 たとえば、サンプルのコンテキストの中のHTMLファイルとGIFファイルについて検討すれば、わざわざTomcatプロセスからそれを配信しなくても、Netscapeがおこなえば充分です。

NetscapeにTomcatコンテキストの一部を静的ファイルとして送信させるには、以下のことが必要になります。

  1. Netscapeに対して、Tomcatコンテキストの設定をおこないます。
  2. WEB-INFディレクトリが、アクセスされないように保護されていることを確認します。
  3. NSAPIリダイレクタにJSP/Servletの取扱いを必要とする特定の要求だけを割り当てるようにNetscapeを設定します。

TomcatコンテキストをNetscapeに追加するためには、Tomcatコンテキストをカバーする新しいNetscape仮想ディレトクリを追加する必要があります。 たとえば、d:\tomkat\webapps\examples ディレクトリをカバーする/example Netscape仮想ディレクトリを追加します。 新たに仮想ディレクトリを追加するためには、obj.confに以下の行を追加してください。

NameTrans fn=pfx2dir from=/examples dir="c:/jakarta-tomcat/webapps/examples"

WEB-INFの保護については、説明が必要です。 それぞれのServletアプリケーション(コンテキスト)は、WEB-INFという名前の特別なディレクトリがあります。 このディレクトリには、注意が必要な設定データとJavaクラスが含まれているので、Webユーザからは隠しておかなければなりません。 WEB-INFは、デフォルト設定オブジェクト内のPathCheckセクションの次の行を追加することによって保護されます。

PathCheck fn="deny-existence" path="*/WEB-INF/*"

この行は、/WEB-INF/ パスが含まれるURLを持つすべての要求を拒否するようにNetscapeに指示します。

NSAPIリダイレクタに特定の要求だけを割り当てるようにNetscapeを設定することは、 Tomcatに処理して欲しいURLパスのパターン(通常JSPファイルとサーブレットだけ)を明示的に指定する必要があるので、少し難しくなります。 これは、obj.confのNameTransの部分を変更する必要があります。 たとえば、examplesコンテキストでは、以下の行を書き換える必要があります。

NameTrans fn="assign-name" from="/examples/*" name="servlet"

これを以下の2行のように変更してください。

NameTrans fn="assign-name" from="/examples/jsp/*.jsp" name="servlet"
NameTrans fn="assign-name" from="/examples/servlet/*" name="servlet"

見てわかるように、二番目の設定がより明示的であり、/examples/servlet/の下のリソースと、/examples/ の下にある名前の末尾が.jspのリソースに対してのみリダイレクタを割り当てています。 これは、自動的に書かれるobj.conf-autoファイルのそれぞれのコンテキストと 同じです。

さらに明示的にするためには、次のように行を指定してください。

NameTrans fn="assign-name" from="/examples/servletname" name="servlet"

これは、Netscapeに対して、 要求されたURLパスが/example/servletname に等しい場合に、ajp12という名前のワーカに転送するように指示します。

高度なワーカ設定

異なるTomcatプロセスに対して、異なるコンテキストを提供させたい(たとえば、異なるマシンで負荷分散をさせる)場合があります。 そのような目的を達成するためには、複数のワーカを定義して、それぞれのワーカにコンテキストを割り当てる必要があります。

ワーカの定義は、workers.propertiesで行います。 このファイルには、以下の2つのエントリが含まれています。

  1. 定義するすべてのワーカのリストのエントリ。
    例:
    worker.list=ajp12, ajp12second
  2. これらのワーカに関連するホストとポートの定義エントリ。
    例:
    worker.ajp12.host=localhost
    worker.ajp12.port=8007
    worker.ajp12second.host=otherhost
    worker.ajp12second.port=8007

上記の例では、2つのワーカが定義されており、2つの異なるコンテキストにたいして、それぞれ独自のワーカを使うことができます。 異なるワーカに対して要求を発行するためには、Servletの設定オブジェクト中で、 異なるパスのパターンのパラメタを持つService指示子を複数使用すれば可能です。 たとえば、/servletコンテキストにはajp12という名前のワーカを使用して、 /examplesコンテキストにはajp12secondという名前のワーカを使用したい場合には、以下のような設定をしなければなりません。

<Object name=servlet>
ObjectType fn=force-type type=text/plain
Service fn="jk_service" worker="ajp12" path="/servlet/*"
Service fn="jk_service" worker="ajp12second" path="/examples/*"
Service fn="jk_service" worker="ajp12"
</Object>

フィードバック

フィードバック、バグ報告、または追加したい情報などは、すべてtomcat-user@jakarta.apache.orgへ送ってください。

[訳注: これは熊坂祐二が翻訳しました。 日本語訳に対するコメントは、jajakarta-report@nekoyanagi.com宛に送って下さい。]