しいしせねっとわーく
[Javaのお部屋] [J2EE] [java.dev.jp] [developer.jp]
[Servlet/JSP] [mod_jk2] [mod_webapp] [TomcatでSSL]

Tomcat 4とか5とかでServlet/JSP するメモ

Jakarta Tomcat は、Apache のサブプロジェクトでつくられている Servlet / JSP のリファレンス環境である。
こいつを使って、Servlet / JSP のいろいろを試す。
Tomcat 4とApache の連携は、あちこち探しても日本語資料が微量というか・・・まとまってないですねぃ・・・。
というわけで、解読というか、いろいろ試してApache との連携の解読に成功しました。そしてついにmod_jk2にも対応。バーチャルホストも完全網羅。

Jakarta Tomcat 4.1.27にはXSS(クロスサイトスクリプテング)の脆弱性が報告されています。盗聴の危険性、高?、ウイルス/ワームの危険性なし? Tomcat以外のServletエンジンでも注意しましょう。

このページ以下のもくじ / インストールページ分離に失敗

Tomcat的ディレクトリ構造は[Tomcat]とか[Webアプリケーション]へ移動中。

まぁとりあえず、動作確認もできたところで、設定ファイルいってみよう

conf/server.xml です。(日本語コメント付き UTF-8)
conf/tomcat-users.xml

Tomcat初期利用ポート一覧(server.xmlの場合)
サービス Port 初期状態 備考
Server 8005 Open シャットダウン用
WARP 8008 Close mod_webapp用 Tomcat 4のみ
AJP13 8009 Open Coyote mod_jk mod_jk2用
HTTP/1.1 8080 Open Coyote
Proxied HTTP/1.1 8082 Close  
旧HTTP/1.1 Test 8083 Close catalina
HTTP/1.0 8084 Close catalina
SSL HTTP/1.1 8443 Close Coyote

tomcat-users.xml は、adminとmanager管理ツールのアクセス制限等につかうもののようです。
role というのがアプリケーション、user がユーザのようです。
Tomcat 4.1.xには admin と manager というツールがついているようですので、これのユーザを追加してみましょう。
Windows版のTomcat は、インストールする時にこのユーザも入力しているかもしれません。
まず、<role rollname="admin"/> と <role rolename="manager.xml"/> を role のところへ追加します。
<user username="username" password="password" roles="admin,manager"/> なんてふうに、追加します。

Tomcat が起動されていたら、再起動しましょう。
http://localhost:8080/ の admin とか manager というところへ追加したアカウントでアクセスできるようになっているはずです。

web.xml の設定

WEB-INF/web.xml は、Servlet を配置するときに記述するファイルです。
Tomcat 3 までは、これがなくても /servlet/ ディレクトリ配下にServelt を配置していましたが、Tomcat 4からは、しないのが安全ということで、web.xml で指定しましょうということになったようです。
conf/web.xml は、これのデフォルトになります。こちらを変更することで、/servlet/ ディレクトリが使えるようになりますが、やめておきましょう。

Tomcat ちょっと翻訳

なんとなく全文翻訳できないので、ちょこちょこ翻訳したものの公開
パス ver 文字コード 状態
conf/server.xml 5.0.25 UTF-8  
conf/server.xml 4.1.18 UTF-8 半分?
webapps/ROOT/index.jsp
4.1.12 EUC-JP 半分?
webapps/tomcat-docs/jk2/index.html
4.1.12 Shift_JIS 未完
webapps/tomcat-docs/jk2/jk2/configtc.html
4.1.12 Shift_JIS ちょっと

文字コードの違いは、いろいろ適当に訳しているからです。

Apache とごにょごにょする?

Last update 2002.11.10

ApacheとTomcat をごにょごにょするには、mod_jk というものを使います。この近辺の日本語資料が少ないので悲しいです。
なんか、mod_webapp とか、coyote とか mod_jk2 とかいろいろあるので混乱しがちですが、次のような感じです。

Tomcat コネクタ一覧
名称 開発 Tomcat ver Protocol 対応サーバとか
mod_jserv 終了 3.x AJP11,Ajp12 Apache 1.3.x
mod_jk 終了 All AJP12,AJP13 Apache 1.3.x
mod_jk2 3.x 4.x 5.x AJP12,AJP13 Apache 1.3/2.0
mod_webapp   4.x WARP Apache 1.3.x ?
(Windows非サポート)
coyote 3.3以降 HTTP/1.1,AJP13,JNI Tomcat側の新実装
ajp     AJP12,AJP13 Tomcat側の旧実装?

Tomcat 4.1.x には最初から coyote が入ってたので、Apache 側の設定をしてみましょう。
手軽に設定するには mod_webappもよかったのですが、Tomcat 5に変えたときに mod_jk2に変えました。

バーチャルホストの秘密

Tomcatは、バーチャルホストができます。しかし、Apacheと連携しようとすると、意外とはまってしまう場合が多いようです。

ホスト名の一致はどこで区別されているかというと、アクセスしたときのURLではありません。URLによって表示されるApacheのServerNameとTomcat側のサーバ名とが比較されます。

Apache の設定 <VirtualHost>のServerName

mod_jk / mod_jk2 / mod_webappの設定

Tomcatの設定 server.xml の<Host>

この3つを同じにします。

ApacheのServerAlias は、mod_xx の設定には影響しません。その名前でアクセスしても、mod_webappではServerNameでアクセスしたことになります。mod_jk2では、ServerNameで指定されたのと同じ[uri:~]に関連づけられたTomcatにつながりますが、Tomcat側ではすべての名前に対応するAliasも必要らしいという感触です。

mod_jk / mod_jk2の場合は server.xml には、Alias指定も必要かもしれません。Aliasが必要なのはTomcat 5だけなのかそうではないのかは不明かもしれません。

わからなければ設定してあげましょうか。

JNDI JDBCなどの登録

JDBCの接続は、Servletの中に書き込んでしまうとあとから変更することが面倒です。J2EEではJNDIを使ってこれをある程度柔軟に管理できるようにしています。

ここでは、Tomcatに各種JNDIリソースを登録する方法について。

JDBC

JDBCは、DataSourceというConnectionを作るためのクラスがJDBC2の頃から用意されています。これは、各JDBCドライバで効率よく接続数を管理するためにも重要だったりします。

J2EEでJNDIにJDBCを登録するには、このDataSourceを登録します。Tomcatでは、どんなJDBCドライバでも登録できるようにDataSourceが用意されているので、これを使います。しかし、その反面、JDBCドライバに含まれるDataSourceなどの登録方法は、しっかり解説されていないようです。

参考

参考?


©2002-2006 おこめ@しいしせねっと