JSPをコンパイルできない!
これが確認されましたか?
org.apache.jasper.JasperException: Unable to compile
class for JSP
An error occurred at line: -1 in the jsp file: null
Generated servlet error:
[javac] Since fork is true, ignoring compiler
setting.
[javac] Compiling 1 source file
[javac] Since fork is true, ignoring compiler
setting.
もしそうなら、解決方法がいくつかあります。
環境周りの問題となっているケースでは、Windows環境において、起動スクリプトは正しく動作するがサービスだと動作しない例が典型的ですね。
サービスでは、Javaおよび他の"要素"を参照するのにレジストリの変数を利用します。
何かのトラブルを出さないために、
NT Service Config Utility
が役に立つかどうか確認してみてください。
/servlet/*で、サーブレットが動かない!
サーブレットにマッピングされた
/servlet/ を使用することはよくないです。
絶対によくないです。
これに比べると、もっとよくないです。
例えば、それについて回答したと思われるスレッドを、ここにいくつか紹介します。
Invokerは、なぜよくないの?
これは、著者の見解です。(場合によって、違うのかもしれませんが)
Invokerについて手短に言うと、
Invokerは、クラス名に基づいた他のサーブレットを実行時に読込することを可能とするダイナミックなサーブレットです。
例えば、
com.foo.MyClassがサーブレットとして読込可能なクラスであるが、明示的に宣言されていないケースにおいて、
このサーブレットは
http://localhost/servlet/com.foo.MyClass?more=cowbell という風に呼び出すことを可能にさせます。
よくない理由はこうです。
-
セキュリティの危険性 ... 直前のリンクを参照してください。
-
設定内容が見えない。
使用可能なサーブレットおよび使用不可能なサーブレットを決定することができません。
web.xmlでは、あらゆるサーブレットが宣言され、マッピング定義されています。
その1ファイルにおいて、アプリケーションの動作方法に対するロードマップを即座に決定するのです。
-
バックドア。
マッピングされるサーブレットは、Invoker経由で、クラス名で交互に呼び出すことができます。
URLが異なり、URLパターンがまさに異なるため、すべてのセキュリティ制約が無視されてしまうこともあります。
-
バックドア。
悪いプログラマは、よくないことを発生させるのをより容易にしてしまいます。
-
バックドア。
共有領域にある共通のサードパーティ製のJARファイルの使用は普通でしょう。
共有されたJARファイルにサーブレットが含まれていれば、そのサーブレットが落とし穴となり、よくないことが発生します。
-
設定内容が見えない。
繰り返しになりますが、すごく大事なことなんです。
面倒ですが、明示的に宣言することは、アプリケーションのメンテナンススキームに非常に有用です。
Tomcatのバージョン番号はどうやって取得するの?
javax.servlet.ServletContext.getServerInfo();
Tomcatで、CPU使用率が100%に達する!
可能性として、ガベージコレクタの負荷が極端に大きいのかもしれません。
JVM 1.4.1では、ガベージコレクタに回収されないメモリリークが存在します。
詳しい情報はここです。
そうでなければ、メモリプロファイラを入手するか、メモリの設定を調整してください。
起動時にシステムプロパティを設定するには、どうしたらいいの?
startup.batまたはcatalina.batを呼び出す前に、
JAVA_OPTSに設定してください。
( もしくは、それらのファイルを編集することもできますが、その方法については説明しません )
例 (windows):
SET JAVA_OPTS='-DpropName=propValue'
例 (unix):
export JAVA_OPTS='-DpropName=propValue'
Windowsのサービスを利用しているユーザ -
これを使ってみてください。
カスタマイズしたエラーページを返すには、どうしたらいいの?
web.xmlに...
<error-page>
<error-code>404</error-code>
<location>/error/404.html</location>
</error-page>
を設定してください。
また、エラー500はもちろん、他の例外を指定したり、
Throwableを継承した例外をキャッチしても構いません。
詳しい情報については、設定方法がぞっとするような分量で記述されているサーブレット仕様を参照してください。
LE版を利用したほうがいいの?
いいえ。
実験的な試みだったのですが、結果的に失敗でした。
(場合によって違うかもしれませんが) LE版の当初の目的は、JDK 1.3に含まれていないTomcat向けの多くの標準機能をJDK 1.4が提供しているためです。
ディストリビューションの容量を少しでも節約することで、ネットワークの帯域幅を節約することにもつながります。
そのとき以来、混乱の連続となりました。
( 説明に食い違いがありましたら、私を罵倒してください )
詳しい情報はここ。
停止中にセッションを保存させないようにするには、Tomcatにどうやって設定したらいいの?
タグプーリングを無効にするには、どうしたらいいの?
タグプーリングを無効にするには、
$TOMCAT_HOME/conf/web.xmlを開き
-->
JSPサーブレットの定義を enablePooling=false に変更してください。
server.xmlのDTDはあるの?
ウェルカムファイルを変更するには、どうしたらいいの?
( index.htmlの代わりにindex.jspを出力したい )
すべての有効なアドレスの代わりに特定のIPアドレスでTomcatを起動するには、どうしたらいいの?
ちゃんとマニュアルを読んでね!
[プロパティ
address='127.0.0.1' をコネクタの設定に追加してね。]
もっと詳しく知りたいときは、
JK、
Http (開発終了)、
Http (Coyoteコネクタ) を参照してください。
JARファイルにシンボリックリンクを使用するには、どうしたらいいの?
UTF-8で取得するにはどうしたらいいの?
サーブレット(またはJSP)から、ダウンロードの保存ダイアログでファイル名を変更したいときはどうしたらいいの?
タグプーリングが動作しません? releaseメソッドが呼ばれていないんです!
おそらく、あなたの作ったタグについて、それが動作していないわけではありません。
これに関して、多くのバグレポートを受け取っています。
ここにぞっとするほどの量のバグレポートがあります。
どうして、java.lang.IllegalStateExceptionが返されるの?
Tomcatで定期的に実行されるイベントを設定するにはどうしたらいいの?
Tomcatでは、これを直接サポートしていません。
ServletもしくはJSP仕様の部分に含まれていないからです。
この機能が必要であれば、
このスレッド
または
このリンク
を参照してください。
Element "web-app" does not allow "servlet" hereって、いったい何なの?
あなたの書いたweb.xmlが、Well-Formedでないか、サーブレット仕様で定義されたDTDに従っていないのでしょう。
web.xmlが正しいと確保するために、XML Validatorを使ってください。
System.outの出力先はどこなの?
catalina.outを生成するには、どうしたらいいの?
System.outおよび
System.errは、ともにcatalina.outへ書き出されます。
しかしながら、swallowOutput属性経由でこれを抑制し、異なるログファイルに送出することもできます。
そうすることで、catalina.outは生成されなくなります。
しかし、そのことが問題にならないわけではありません。
というのも、ロギングパッケージを使用するようになってから、標準出力へ書き出されなくなりましたよね?
詳しいことは
log4jの設定例
および
catalina.outの生成に関するスレッド
を参照してください。
Webアプリケーション内にあるファイルを読み込みたいのですが、どうやって開けばいいの?
ServletContext.getResourceAsStream()を使ってください。
JREのみでTomcatを実行できるの? それとも、完全なJDKを必要とするの?
Tomcatは、完全なJDKを公式に必要とします。
というのも、JSPのコンパイルにjavacが必要だからです。
全てのJSPがプリコンパイルされていれば、JREのみでTomcatを実行して行けますが、それについては自己の責任のもとで行ってください。