入手先

http://tomcat.apache.org/

http://archive.apache.org/dist/tomcat/

バージョンごとの特徴

一覧表

バージョンServlet APIJSPJDK
4.x2.31.21.3
5.x2.42.01.4
5.5.x2.42.05.0
6.x2.52.15.0
7.x3.02.26.0

V4.0系

このころになってからローカルテスト環境だけではなく商用Webに使われるケースが多くなったんじゃないだろうか?今でもエラー画面とかでバージョン情報が丸見えになっているサイトがあるし(爆)

V5.0系

これは初めて自分が商用サイトで使ったTomcat。長時間連続運用でなぞの固まり減少があって困った。おそらくメモリリーク

V5.5系

J2SE5.0向けで1.4.x以下はパッチを当てる必要があった。

V6.0系

完全にJ2SE5.0以上

V7.0系

インストール

Tomcatインストールに当たって

起動時のエラー

Neither the JAVA_HOME nor the JRE_HOME environment variable is defined At least one of these environment variable is needed to run this program

JAVA_HOMEもJRE_HOMEも環境変数が設定されてません。このプログラムの起動には最低でもどちらかの環境変数の設定が必要です。

環境変数JAVA_HOMEの設定

Windows

SET JAVA_HOME=C:\j2sdk1.4.2_15

Linux

export JAVA_HOME=/usr/java/jdk

起動と終了

windowsならstartup.batをたたく、終了するには立ち上がっているコマンドプロンプトを閉じればよい。Linuxであればcatalina.sh start or stopでよい

最小TOMCAT作成

  1. server.xmlを削除してserver-minimal.xmlをserver.xmlにリネーム
  2. $CATALINA_HOME/conf/Catalina/localhost/にあるxmlファイルを削除
  3. $CATALINA_HOME/webapps以下にあるフォルダをROOTだけ残して(動作確認用)削除

運用TIPS

ログローテーション

本来log4jに出力を任せておきcatalina.outにはまったく出力させないのが前提。だがクソなアプリケーション設計でcatalina.outに大量にログがでるようなアプリの面倒を見ることになってしまったら以下の方法で対処せよ。具体的にはコンソールへの出力をパイプしてrotatelogsに渡している。

http://www.13hz.jp/2004/05/tomcatcatalinao.html

catalina.shのcatalina.outの部分を編集する
touch している部分は削除
>> "$CATALINA_BASE"/logs/catalina.out 2>&1 &
を以下のように置き換える
| /usr/sbin/rotatelogs "$CATALINA_BASE"/logs/catalina.out-%Y%m%d 86400 &

ディレクトリリストの禁止

<init-param>
    <param-name>listings</param-name>
    <param-value>false</param-value>
</init-param>

コンテキスト設定xml置き場

V4以前 conf/webapps
V5以降 conf/catalina/localhost
WARにContext情報を含める META-INF/context.xml

SSL対応

    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
              maxThreads="150" scheme="https" secure="true"
              clientAuth="false" sslProtocol="TLS" />
keytool -genkey -alias tomcat
ユーザーのホームディレクトリに.keystoreができるのでそれをtomcatが読みに行く
   <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
              maxThreads="150" scheme="https" secure="true"
              clientAuth="false" sslProtocol="TLS" 
					keystoreFile="d:/.keystore" keystorePass="changeit" />

管理ツールの利用

TOMCATにはブラウザから操作できる管理ツールがある。昔は一緒に入っていたのだが、最近は別々のアーカイブにされている。以下に利用手順をしめす。

admintoolの配置

admintoolの利用

conf/tomcat-users.xmlに以下の行を追加
<user username="hoge" password="hoge" roles="admin"/>

V6.0のTomcatManagerの利用

conf/tomcat-users.xmlを以下のようにする。
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="manager"/>
  <user username="rutake" password="xxxxx" roles="manager"/>
</tomcat-users>

Apacheとの連携

Apache2.2での連携方法

技術メモ参照

JKコンパイル

cd jk/native
./configure --with-apxs=/usr/local/apache2/bin/apxs
make
cd apache-2.0

Vine3.x系でApache2でコンパイル

「/home/arege/rpm/BUILD/httpd-2.0.44/srclib/apr/libtool: /home/arege/rpm/BUILD/httpd-2.0.44/srclib/apr/libtool: そのようなファイルやディレクトリはありません」が出るので以下のようにしてLIBTOOLの場所を指定する。

export LIBTOOL=/etc/apache2/build/libtool
./configure --with-apxs=/usr/bin/apxs
make LIBTOOL=/etc/apache2/build/libtool

Apahceの設定

httpd.confの編集

LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkLogFile     logs/mod_jk.log
JkLogLevel    error
#TOMCATのコンテキストをここに書く
JkMount /jsp-examples/* ajp13

workers.propertiesの編集

apacheのhttpd.confと同じディレクトリへ配置する
worker.list=ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13

workers.propertiesの内容をhttpd.confにかく

wokerers.propertiesのファイルを別に用意する手間がなくなるので便利。jkのバージョンが1.2.7以降の場合に使える。httpd.confに以下のように記述する。

# Minimal jk configuration
JkWorkerProperty worker.list=ajp13
JkWorkerProperty worker.ajp13.type=ajp13
JkWorkerProperty worker.ajp13.host=localhost
JkWorkerProperty worker.ajp13.port=8009   

JK2(deprecated)

tomcat4
# ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-tomcat4=/usr/java/tomcat/
# make
出来上がったバイナリをapacheのmoduleディレクトリにコピー
LoadModule jk2_module   modules/mod_jk2.so

有効なworkers2.properties
[status:]
[uri:/jkstatus/*]
group=status:
[shm:]
disabled=1
[channel.socket:localhost:8009]
info=Ajp13 fowarding over socket
debug=0
tomcatId=localhost:8009
[ajp13:]
[uri:/examples/*]
[uri:/tool/*]
tomcat5
TOMCATのworkディレクトリを666にしておく、さもないと500エラー
それでも50%の確立ででる!!どーしてくれようか!

複数のApache+Tomcat

参考URL

worker.list=tomcat_live
worker.tomcat_live.port=8009
worker.tomcat_live.host=127.0.0.1
worker.tomcat_live.type=ajp13
JkMount /*.jsp tomcat_live
JkMount /web/* tomcat_live
JkMount /live/* tomcat_live
JkMount /preview/* tomcat_live

JNDIの利用設定

5.0から依存ライブラリがバンドルされなくなった。DBCP,POOLを別途入れる必要あり。

トラブルシューティング

JSPが文字化けする

pageディレクティブを入れる。windowsなら以下のようにする。

<%@ page language="java" contentType="text/html; charset=Windows-31J"
   pageEncoding="Windows-31J" %>

ログの日本語が文字化けする

LANGの設定が適切でないのが原因。最近のLinuxディストリビューションならUTF-8だろうか?

export LANG=ja_JP.UTF-8

HTTP Status 404

The requested resource (xxxxx) is not available.の英文の訳どおり、Tomcat管理下にある指定されたリソース(JSPファイルに限らずディレクトリ等も含む)が見つからないということ。注意すべきはなんらかのエラーでコンテキストが利用不可能になった場合はそのコンテキスト以下が404になること。ファイルは存在しているように見えても該当コンテキストのエラーの原因を除いてTomcatを再起動するまでは駄目。

Tomcat6でInvokerServletを有効にする

web.xmlに設定しなくてもservletを呼び出せるInvokerServletは5.0から設定がコメントアウトされている。まずweb.xmlで該当箇所を有効にする

 <!-- enable invoker -->
     <servlet>
       <servlet-name>invoker</servlet-name>
       <servlet-class>
         org.apache.catalina.servlets.InvokerServlet
       </servlet-class>
       <init-param>
           <param-name>debug</param-name>
           <param-value>0</param-value>
       </init-param>
       <load-on-startup>2</load-on-startup>
   </servlet>
 <servlet-mapping>
   <servlet-name>invoker</servlet-name>
   <url-pattern>/servlet/*</url-pattern>
 </servlet-mapping>

Caused by: java.lang.SecurityException: クラス org.apache.catalina.servlets.InvokerServlet のサーブレットは特権を与えられているので、このWebアプリケーションによってロードできません

<Context privileged="true">
Counter: 83834, today: 1, yesterday: 2

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS