Tomcat メモ
コンテキストの設定
一昔前 (〜4.x?) までは server.xml に context の定義をしていたが、 今どき (5.x〜?) は アプリケーションごとにファイルを用意することで コンテキストの設定が可能である。
個別のファイルを用意するというだけで、話は簡単である。 tomcat/conf/Catalina/localhost/ 以下に、contextname.xml を用意する。 そのファイルには、昔 server.xml に書いていたような内容を書けばよい。
例) <Context path="/contextname" reloadable="false" docBase="/some/where/contextname/webapp" workDir="/some/where/contextname/work" > <Logger className="org.apache.catalina.logger.SystemOutLogger" verbosity="4" timestamp="true" /> </Context>
server.xml は tomcat 全体に影響するファイルなので、編集するのは実は恐い。 それだけでも、アプリケーションごとにファイルを分けることにはメリットがある。
Apache 2.2.x と連携
Apache 2.2.x では、Tomcat と連携するのは非常に簡単だ。 まず、Apache 側で、proxy-ajp を使用するように仕込んでおく必要がある。 たとえば、以下のような感じである。
% ./configure --prefix=/usr/local/apache --enable-mods-shared=most \ --enable-proxy --enable-proxy-ajp
あとは httpd.conf にコンテキストを書いて飛ばすだけだ。
<Location /contextname/> ProxyPass ajp://localhost:8009/contextname/ </Location>
Tomcat 側では、このコンテキスト (contextname) で アプリケーションが上がっていればよい。
バージョンと準拠仕様
古い情報がなくなりつつあるので、メモしておく。
3.2.x : Servlet API 2.2 / JSP 1.1 3.3.x : Servlet API 2.2 / JSP 1.1 4.0.x : Servlet API 2.3 / JSP 1.2 4.1.x : Servlet API 2.3 / JSP 1.2 5.5.x : Servlet API 2.4 / JSP 2.0 6.0.x : Servlet API 2.5 / JSP 2.1
よほどの事情がない限り、あまりに古いのは使わないことを推奨って感じ。
スレッド数
Apache 連携時の Tomcat 側の Thread 数の設定。 Connector port="8009" の属性を増やせばよい感じである (5.5.25 で実験) 。
<Connector port="8009" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
を
<Connector port="8009" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
のように調整する。
アイコンの設定
デフォルトでは、例の猫のアイコンが favicon として設定される。 こいつはマズいぜ、という場合には ROOT アプリケーションの設定で変更できる。
tomcat を展開したところに webapps/ROOT/ があるので、 この中の favicon.ico を変更すればよい。
Tomcat マネージャ
どのバージョンからかわからないが、少なくとも 5.5.xx では Web インタフェイスで管理を行うための manager アプリケーションが同梱されている。 「Tomcat Manager」というらしい。
Tomcat Manager では、 JavaVM の情報やメモリ使用状況などのサーバの状態確認や、 アプリケーションの状態確認、停止・起動、アンデプロイ、 果ては アプリケーション (war) のデプロイまでできる。 開発中やイントラ使用のサーバの管理としては、便利だろう。
これを使用するために、管理用ユーザの設定をしておく必要がある。 ユーザの設定は conf/tomcat-users.xml で行う。
<?xml version='1.0' encoding='utf-8'?> <tomcat-users> <role rolename="manager"/> <user username="johnQ" password="himitsu" roles="manager"/> </tomcat-users>
最小のサンプルは上記のような具合か。 要は、「manager」という名前のロールを設定し、 ユーザ名とパスワードに対してそのロールを割り当てるだけである。 パスワードを平文でダダ書きするので、ファイルの permission には注意が必要だ。
セッション永続化をしない設定
デフォルトの挙動では、Tomcat 自体やアプリケーションを停止する際に、 生きているセッションがあれば保存され、次回起動時に再生される。
この挙動が気に入らない場合は、以下の方法で機能を無効にすることができる。
- コンテキストの設定ファイルで、永続化用のファイル名として空文字列を与える。
これだけだ。具体例も書いておこう。
<Context path="/webapp" reloadable="false" docBase="/some/where"> <Manager pathname="" /> </Context>
Tomcat 6 でしか試していない。 マニュアルにも記載されているので、別に黒魔法というわけではない。
参考:マニュアル