Tomcatについてのよくある質問と回答(FAQ) ---------------------------------------------- Q: 404 エラーを受け取りましたが、どういう意味ですか? A: 簡単に言うと、それは、サーバが貴方のリクエストしたリソースを見付け られなかった事を意味します。これは 5 つの理由により発生します。 * 1. 入力した URL が間違っているか、タイプミスをした場合。 * 2. 要求した URL が現在の "docBase" で解決できなかった場合。 もしあなた自身の "Webアプリケーション" を試しているなら、この FAQ にある "installing your own web-application" に関する質問を読んで 下さい。 * 3. Windows プラットフォーム上で JDK 1.1.x を使っている場合。 サーバがこの設定でファイルを配送できない良く知られたバグがありま す(Readme を参照)。JDK 1.2.x を変わりに使いましょう。 * 4. Windows プラットフォームで、パスの部分が 8 文字以上のディレク トリに Tomcat をインストールした場合。たとえば、 C:\Program Files\jakartaの場合に、短い書式を使ってそのディレクト リに移動してから "startup" スクリプトを実行した場合です。 例: > cd C:\Progra~1\jakarta > startup ロングネームを使ってディレクトリを移動すれば、うまくいくでしょう。 例: > cd "C:\Program Files\jakarta" > startup * 5. Unix プラットフォーム上で、シンボリックリンクであるファイルに アクセスしようとした場合。 最後の 3 つの場合は、org.apache.tomcat.core.DefaultServlet でファイ ルの絶対名とカノニカル名が等しいかどうかテストすることで引き起こさ れます。このテストは、Windows プラットフォーム上で、大文字小文字が 混在したり、追加の文字を使ったファイル名が Tomcat に JSP ファイルを 処理する代わりにソースファイルを供給させてしまう重大なセキュリティ 問題を解決しようとします。このテストは、上記のような副作用が無い解 決方法に置き換えられるべきです。 Q: 500 エラーを受け取りましたが、どういう意味ですか? A: 簡単に言うと、それはリクエストを処理している間にいくつかの "Internal Server Error" が起きたことを意味します。そのエラーに付い て詳しく知るためには、サーバウィンドウのトレースを注意深く見る必要 があります。 それらのエラーは jsp ソースを servlet に変換している間にも発生しま す。そのような変換時のエラーは、ほとんどが jsp ファイルもしくは、生 成された java ファイルの文法エラーが原因です。 サーバウィンドウのエラーメッセージを使って、デバッグして下さい。 エラーはリクエスト時にも発生します。再び、サーバ側のトレースを見れ ば、固有の問題点や例外についての情報を得ることができるでしょう。 Q: CLASSPATH には何が必要ですか? A: まず、正しいバージョンの JDK (1.1.x もしくは 1.2)が必要です。 JSP エンジンは 'javac' も使うので、それも CLASSPATH にある必要があ ります。JDK 1.1.x を使っている場合には、それは自動的に含まれていま す。しかし、JDK 1.2 を使っている場合には、JDK がインストールされて いるディレクトリを JAVA_HOME に設定する必要があります。代わりに "tools.jar" を CLASSPATH に追加してもよいでしょう。 他の全ての必要なクラスやjar ファイルは、startserver スクリプトが追 加するので、気にする必要はありません。 Q: JSP や Servlet のクラスはどこにありますか? A: lib/webserver.jar -- Servlet エンジンのクラスファイル。 lib/jasper.jar -- JSP エンジンのクラスファイル。 lib/servlet.jar -- Servlet のパブリック API。 lib/jaxp.jar -- XML パーサインタフェース用パブリック API。 lib/parser.jar -- パブリック XML パーサ参照実装。 Q: これらのクラスを他の Web サーバと混在できますか? A: JSP エンジンは、パブリックな Java Servlet 2.2 API の一部を使ってい ます。理論的には、Servlet 2.2 API をサポートする他の servlet エンジ ンでも動作するはずですが、私達はこのリリースを Tomcat 以外の他の servlet エンジンでテストしたことはありません。 Q: 私の jsp ソースや bean をどこに置けばいいのですか? A: 新たに Web アプリケーションを作らずに JSP のテストをしたいだけなら ば、デフォルトの "example" アプリケーションを利用できます。新しい Web アプリケーションを作りたいなら "how to install a new web-application?" を読んで下さい。 デフォルトを使うには、全ての JSP ソースを /examples/jsp の下に置く か、/examples/jsp の新しいサブディレクトリ(examples に含まれるよう に)に置きます。全ての bean(クラスファイル)を /examples/WEB-INF/jsp/beans の下に適切に(beans が含まれるように) 置きます。startserver スクリプトは、それらのクラスを実行時に自動的 に CLASSPATH に追加するでしょう。 サーバが既に動作している場合には、それを停止してから再起動する必要 があります。http://locahost:8080/examples/jsp/yours.jsp を指定すれ ば、jsp を呼び出すことができます。 Q: Web アプリケーションって何ですか? どうすれば新しい Web アプリケーショ ンをインストールできますか? A: Web アプリケーションは、jsp, servlet, html ファイル、イメージ、その 他のリソースの集まりです。それらは、特定の "URI" プレフィックスに結 びつけられています。 例えば、全ての野球に関するリソースは、"baseball" ディレクトリに集め られ、全ての "/baseball" で始まるリクエストは、このアプリケーション に結びつけられているとします。 新しいアプリケーションは server.xml ファイルを編集することによって Tomcat に追加されます。"baseball" アプリケーションを追加するには、 以下をファイル(の適切な場所)に追加すれば良いでしょう: を "baseball" ディレクトリの絶対パスもしくは、Tomcat の ホームディレクトリからの相対パスに置換えてください。 詳細は、"server.xml" を読んで下さい。 更に、AutoSetup インタセプタのおかげで、"baseball" ディレクトリを Tomcat ホームディレクトリの下の "webapps" ディレクトリへ作成または コピーする事もできます。そこに置かれるとデフォルトの設定で自動的に 提供されるでしょう。デフォルトの設定を上書きしたいのでなければ、 server.xml 内の エントリは必要ありません。 a) Web アプリケーション内に servlet をインストールするには、以下の 事を実行します。 * Servlet が既にコンパイルされていれば、以下の方法でTomcatに追加で きます。 どの "Web アプリケーション" コンテキストに Servlet を 追加するかを決めます。 Servlet クラスファイルを、その WEBAPP/WEB-INF/classes ディレクトリに追加します * 新しくインストールした Servlet に名前や初期パラメータを定義する必 要があれば、さらに以下のように設定する必要があります。 Servlet を、 要素を使って WEBAPP/WEB-INF/web.xml ファイルに登録します さらに、WEBAPP/WEB-INF/web.xml ファイルに 要素を追加すれば、Servlet をコンテキストに関連した URI リクエストにマップすることもできます。 * 最後にサーバを再起動します。 新しい servlet には、以下のような URI でアクセスできます。 http://localhost:8080/WEBAPP/servlet/SERVLET-NAME URI パスを servlet にマップした場合には、以下のような URI でア クセスできます。 http://localhost:8080/WEBAPP/foo.EXTENSION - もしくは - http://localhost:8080/WEBAPP/MAP-PATH 場所: WEBAPP = ウェブアプリケーション URI 名 SERVLET-NAME = servlet のベース名 EXTENSION = ファイル拡張子 MAP-PATH = 関連づけた URI マップのパス b) jsp や bean をWebアプリケーションにインストールするには、以下の ようにします。 * jsp ソースを、 /WEBAPP の下の任意のディレクトリに置きます。 * コンパイルされた bean が CLASSPATH に含まれることを確認します。こ れは CLASSPATH を手作業で設定するか、startup スクリプトを修正する かのどちらかの方法で行うことができます。 * 最後にサーバを再起動します。 新しい jsp は、以下の様な URIで呼び出すことができます。 http://localhost:8080/WEBAPP/yourfile.jsp Q: URI は、サーバでどのように処理されるのですか? A: まず、Web サーバは、リクエストされた URI の先頭と全てのコンテキスト (webアプリケーション)のプレフィックスを照合します。 どのコンテキストも該当しない場合には、代わりにデフォルトコンテキス トを使用します。 Q: JSP エンジンの初期パラメータの意味の違いは? A: * keepgenerated: 生成された java ファイルを残すかどうか。true/false の値を取り ます。値が true ならば、生成されたファイルを残し、さもなければ 削除します。デフォルトは true です。 * scratchdir: 生成されたコードを格納するために作業ディレクトリを作成しますが、 このパラメータを使って変更することができます。 このディレクトリは docbase の下に作られます。 * largefile: true/false の値を取ります。このパラメータが true に設定されて いると、ファイルが巨大になる場合には、全ての静的な HTMLファイ ルを分割して格納します。true に設定されていると、mappedfile パ ラメータの設定を上書きします。デフォルトは false です。 * mappedfile: true/false の値を取ります。もし静的な HTML のそれぞれの行が分 割して出力されてほしいなら、このパラメータを true にセットしま す。もし largefile パラメータが true にセットされていたなら、 このパラメータは無視されます。largefile 、mappedfile どちらと も true でないなら、静的な HTML は 32K までのブロックに出力さ れます。 * sendErrToClient: true/false の値を取ります。true に設定されている場合には、コン パイル/解析エラーはレスポンスの一部としてクライアントに送られ ます。デフォルトは false です。 * ieClassId: これはプラグインと一緒に使用します。これは、プラグインをアクティ ブにするための特別な id です。現在、デフォルト値は IE4 と IE5 のために設定されています。これは、将来リリースされるIEのクラス ID を格納するために使用します。 * classdebuginfo: クラスファイルにデバッグ情報を含めるかどうかを設定します。 true/false の値を取ります。true に設定されている場合には、サー ブレットクラスファイルがコンパイルされる時、クラスデバッグ情報 が含まれます。デフォルトは false です。 これらをデフォルトと違う値にセットするには、JSP エンジン servlet と .jsp(原文は jps)拡張子を WEBAPP/WEB-INF/web.xml において明示的に定 義する必要があります。 例: jsp org.apache.jasper.runtime.JsPServlet keepgenerated true sendErrToClient true jsp *.jsp [訳注: これは鰈崎義之が翻訳しました。日本語訳に対するコメントは、 jajakarta-report@nekoyanagi.com宛に送って下さい。]