ここでは、以下の構成で動作環境を作成しています。
項目 バージョン コメント Tomcat 3.2 β6 http://jakarta.apache.org/downloads/binindex.html Jetspeed 1.1 http://java.apache.org/jetspeed/dist/Jetspeed-1.1.tar.gz OS Solaris 8 for x86 JDK 1.2
OSに付属のもの XML Parser JAXP 1.0.1 Tomcat のバイナリーパッケージに含まれている
(http://java.sun.com/xml/download.html)Apache 1.3.12 http://www.apache.org/httpd.html GNU gcc と gmake(GNU make) が必要 Tomcatは、Pure Java なのでどのプラットフォームでも動くと思いますが、起動などのために用意されているスクリプトが UNIX(shell script) と Windows(BAT) の2つの形式だけです。パッケージは、数種類の圧縮形式(.Z, .gz, .zip) でおかれていますので自分の環境にあったものをダウンロードしてください。
必要なモジュール バイナリーパッケージを使用する場合: Tomcat (bin/jakarta-tomcat.tar.gz)
ApacheVersion 1.3 以降ソースパッケージを利用する場合: JAXP (XML Parser)
Tomcat (src/jakarta-ant.tar.gz)
Tomcat (src/jakarta-servletapi.tar.gz)
Tomcat (src/jakarta-tomcat.tar.gz)
Apache Version 1.3 以降
インストールには、ソースから作成する方法とコンパイルされたバイナリー(バイトコード)を利用する方法があります。ソースから作成するには、いくつかのパッケージをダウンロードして順番(jaxp, ant, servletapi, tomcat)に作成していく必要があります。ここでは、すべて揃っているバイナリーパッケージを利用します。(JREや JDK 1.1.X の場合 jakarta-tools がさらに必要)
まず、バイナリーパッケージを展開します。
# cd /usr/local
# gzip -dc jakarta-tomcat.tar.gz | tar xf -
展開すると jakarta-tomcat というディレクトリーの下に以下のようなサブディレクトリーが作られます。
ディレクトリー 内容 bin Tomcat を起動したり、終了したりするためのスクリプトなど conf Tomcat やアダプタなどの環境を設定するファイルなど doc ドキュメント lib Tomcat 本体など(Jar でまとめられたモジュール) logs Tomcat の動作におけるログファイルなど(実行時に作成される) src Tomcat のソースコードなど webapps サンプル Webアプリケーション work Tomcat が動作する際に使用する作業ディレクトリー(実行時に作成される)
Tomcat には、HTTP サーバーの機能があるので単体で動作させることが出来ます。 Tomcat の設定は、 conf ディレクトリーの中の設定ファイルを修正することで変更できます。今まで多くのツールは、専用のフォーマットで設定ファイルが記述されていましたが、Tomcat の場合 XML で記述されています。(Mac OS X などの設定ファイルも XML。これからは、設定ファイルも XML が主流ですね。)
.xml, .dtd Tomcat を設定するファイル .conf Tomcat と Apache を繋ぐためのアダプタを設定するファイル .properties Web サーバと Tomcat との関係を設定するファイル
conf/server.xml:
● HTTPサーバーとして働く際の設定などコネクタの設定を記述する
...中略... <!-- ==================== Connectors ==================== --> <!-- Normal HTTP --> <Connector className="org.apache.tomcat.service.PoolTcpConnector"> <Parameter name="handler" value="org.apache.tomcat.service.http.HttpConnectionHandler"/> <Parameter name="port" value="8080"/> </Connector> ...中略... <!-- <Connector className="org.apache.tomcat.service.PoolTcpConnector"> <Parameter name="handler" value="org.apache.tomcat.service.http.HttpConnectionHandler"/> <Parameter name="port" value="8443"/> <Parameter name="socketFactory" value="org.apache.tomcat.net.SSLSocketFactory" /> </Connector> --> <!-- Apache AJP12 support. This is also used to shut down tomcat.--> <connector classname="org.apache.tomcat.service.PoolTcpConnector"> <parameter name="handler" value="org.apache.tomcat.service.connector.Ajp12ConnectionHandler"/> <parameter name="port" value="8007"/> </connector>青の部分:HTTP サーバーとして動作させる部分の設定
緑の部分:SSL 対応 HTTP サーバーとして動作させる部分の設定(デフォルトはコメントアウト)
赤の部分:Apache などの Web サーバーと連携するためのアダプタ部分の設定● ブラウザにわたす Web アプリケーションの設定(デフォルトでサンプルアプリケーションの設定)
<!-- ==================== Special webapps ==================== --> ...中略... <Context path="/examples" docBase="webapps/examples" debug="0" reloadable="true" > </Context> ...
特に変更する必要の無いのでそのまま Tomcat を起動します。バイナリーパッケージをインストールした場合、起動用のシェルスクリプトが用意されているので、それを実行すれば Tomcat が動きます。
# /usr/local/jakarta-tomcat/bin/startup.sh
Guessing TOMCAT_HOME from tomcat.sh to /usr/local/jakarta-tomcat/bin/..
Setting TOMCAT_HOME to /usr/local/jakarta-tomcat/bin/..
Using classpath: .:/usr/local/jakarta-tomcat/bin/../lib/ant.jar:/usr/local/jakar
ta-tomcat/bin/../lib/jasper.jar:/usr/local/jakarta-tomcat/bin/../lib/jaxp.jar:/u
sr/local/jakarta-tomcat/bin/../lib/parser.jar:/usr/local/jakarta-tomcat/bin/../l
ib/servlet.jar:/usr/local/jakarta-tomcat/bin/../lib/test:/usr/local/jakarta-tomc
at/bin/../lib/webserver.jar
# 2000-10-04 07:16:27 - ContextManager: Adding context Ctx( /examples )
Starting tomcat. Check logs/tomcat.log for error messages
2000-10-04 07:16:27 - ContextManager: Adding context Ctx( /admin )
2000-10-04 07:16:27 - ContextManager: Adding context Ctx( )
2000-10-04 07:16:27 - ContextManager: Adding context Ctx( /test )
2000-10-04 07:16:31 - PoolTcpConnector: Starting HttpConnectionHandler on 8080
2000-10-04 07:16:31 - PoolTcpConnector: Starting Ajp12ConnectionHandler on 8007
ここで、ブラウザーでアクセス(http://<servername>:8080/)してみると以下のような場面が表示されます。ここで JSP や Servlet のサンプルが動作します。

終了させるには以下のスクリプトを実行します。
# /usr/local/jakarta-tomcat/bin/shutdown.sh
Guessing TOMCAT_HOME from tomcat.sh to /usr/local/jakarta-tomcat/bin/..
Setting TOMCAT_HOME to /usr/local/jakarta-tomcat/bin/..
Using classpath: .:/usr/local/jakarta-tomcat/bin/../lib/ant.jar:/usr/local/jakar
ta-tomcat/bin/../lib/jasper.jar:/usr/local/jakarta-tomcat/bin/../lib/jaxp.jar:/u
sr/local/jakarta-tomcat/bin/../lib/parser.jar:/usr/local/jakarta-tomcat/bin/../l
ib/servlet.jar:/usr/local/jakarta-tomcat/bin/../lib/test:/usr/local/jakarta-tomc
at/bin/../lib/webserver.jar
Stop tomcat
2000-10-04 07:34:55 - ContextManager: Removing context Ctx( /examples )
2000-10-04 07:34:55 - ContextManager: Removing context Ctx( )
Apache と Tomcat を連携します。Tomcat には、HTTP サーバーの機能もありますが「静的なページは Apache ほど速くない」「Apache ほど詳細な設定ができない」「Apache ほど頑強ではない」などの理由から Apache の Servlet/JSP アド・オンとして利用します。Apache と Tomcat を連携するには、いくつか方法があります。その中の mod_jk または JServ と呼ばれるアダプタを利用する方法を記述します。これら、アダプタを利用する場合 Tomcat のソースが必要なのでダウンロードします。また、バイナリーとソースのパッケージ名が jakarta-tomcat.tar.gz と同じなのでダウンロードには注意してください。 圧縮方法が別のものをダウンロードするなら問題ないが、解凍すると同じディレクトリー名で展開します。同じディレクトリーに展開しても干渉しないようになっており、双方を同じディレクトリーに展開するとバーナリーとソース双方を含むパッケージのようになります。
今までは多くの人が JServ を利用してきました。しかし、JServ は「複雑すぎる」「SSL をうまくサポートしきれていない」「Apache でしか利用できない」など多くの不満がありました。そこで、これらの問題を解決するために mod_jk という新しいアダプタが誕生しました。これからは、mod_jk アダプタです!でもなぜか JServ の説明もあったりして...
ここで注意が必要なのは、JServ アダプタは Apache の module として提供されるので、module が利用できるように mod_so をアクティブにします。Apache は、デフォルトで /usr/local/apache にインストールされます。
# gzip -dc apache_1.3.12.tar.gz | tar xf -
# cd apache_1.3.12
# ./configure --enable-module=so
Configuring for Apache, Version 1.3.12
+ using installation path layout: Apache (config.layout)
...
Creating Makefile in src/lib/expat-lite
Creating Makefile in src/modules/standard
# make
# make install
次に、JServ アダプタを作成するために Tomcat のソースパッケージを展開します。バイナリーパッケージに上書きしても大丈夫なような構成になっていますが、Tomcat を純粋に利用したいのでソースパッケージは一時的に使用するディレクトリーに展開します。
# cd /usr/tmp
# gzip -dc jakarta-tomcat.tar.gz | tar xf -
# cd jakarta-tomcat/src/native/apache/jserv
# /usr/local/apache/bin/apxs -c mod_jserv.c jserv*.c
# cp mod_jserv.so /usr/local/apache/libexec/
Apache で、アダプタを有効にするために httpd.conf 設定ファイルを変更します。
# cd /usr/local/apche/conf
# echo "Include /usr/local/jakarta-tomcat/conf/tomcat-apache.conf" >> httpd.conf
# ../bin/apachectl configtest
Syntax OK
#
tomcat.conf: 設定例
# # JServ 設定 # # jserv コネクタのロード LoadModule jserv_module libexec/mod_jserv.so <IfModule mod_jserv.c> # 内部的な設定(サポートされていないものを無効にしたり、ログレベルの情報) ApJServManual on ApJServSecretKey DISABLED ApJServMountCopy on ApJServLogLevel notice # 通信パラメータ(ワーカーや利用するポート) ApJServDefaultProtocol ajpv12 ApJServDefaultPort 8007 # 接続ホスト情報の追加 ApJServDefaultHost localhost # JSP タイプを Apache に登録 # すべての JSP リクエストを jserv-servlet ハンドラが # 処理するように設定しています。 AddType text/jsp .jsp AddHandler jserv-servlet .jsp # # アプリケーションの設定(コンテキストの登録) # # すべての /servlet へのリクエストが Tomcat の "/rootExample" コンテキストへ送られるように設定 ApJServMount /servlet /rootExample # サーバのドキュメントルートの設定 DocumentRoot /usr/local/jakarta-tomcat/webapps/rootExample # アクセス権等の設定 # 詳しくは Apache のドキュメントを参照して下さい。 <Directory "/usr/local/jakarta-tomcat/webapps/rootExample"> Options Indexes FollowSymLinks </Directory> # web.xmlなどが含まれる WEB-INF の設定 # この下は何も見えるべきではありません!! # アプリケーション階層に関する詳細な情報はユーザーズガイドかServlet仕様を見てください。 <Location "/usr/local/jakarta-tomcat/webapps/rootExample/WEB-INF/"> AllowOverride None deny from all </Location> # 他にもあれば設定する # Alias /examples /usr/local/jakarta-tomcat/webapps/examples ApJServMount /examples/servlet /examples <Directory "/usr/local/jakarta-tomcat/webapps/examples"> Options Indexes FollowSymLinks </Directory> <Location "/usr/local/jakarta-tomcat/webapps/examples/WEB-INF/"> AllowOverride None deny from all </Location> </IfModule>
Apache を使用するので、Tomcat に HTTPサーバーの役割を持たす必要がないので設定を無効にします。そのあと、Tomcat を起動し Apache を立ち上げることで Servlet 環境が利用できるようになります。
# cd /usr/local/jakarta-tomcat/conf
# edit server.xml
HTTP サーバーに関するコネクタ部分をコメントアウトします。
#
● HTTPサーバーの設定をコメントアウトする
...中略... <!-- ==================== Connectors ==================== --> <!-- Normal HTTP --> <!-- <Connector className="org.apache.tomcat.service.PoolTcpConnector"> <Parameter name="handler" value="org.apache.tomcat.service.http.HttpConnectionHandler"/> <Parameter name="port" value="8080"/> </Connector> --> <!-- Uncomment this for SSL support. You _need_ to set up a server certificate if you want this to work, ...中略...
Tomcat と Apache を起動するだけ。Tomcat を起動した際に Tomcat 単体での動作と違うのは HTTP サーバーとして利用しないので 8080 ポートについての初期化が行われません。
# /usr/local/jakarta-tomcat/bin/startup.sh
Guessing TOMCAT_HOME from tomcat.sh to /usr/local/jakarta-tomcat/bin/..
Setting TOMCAT_HOME to /usr/local/jakarta-tomcat/bin/..
Using classpath: .:/usr/local/jakarta-tomcat/bin/../lib/ant.jar:/usr/local/jakar
ta-tomcat/bin/../lib/jasper.jar:/usr/local/jakarta-tomcat/bin/../lib/jaxp.jar:/u
sr/local/jakarta-tomcat/bin/../lib/parser.jar:/usr/local/jakarta-tomcat/bin/../l
ib/servlet.jar:/usr/local/jakarta-tomcat/bin/../lib/test:/usr/local/jakarta-tomc
at/bin/../lib/webserver.jar
# 2000-10-12 02:09:19 - ContextManager: Adding context Ctx( /example
s )
2000-10-12 02:09:19 - ContextManager: Adding context Ctx( /admin )
Starting tomcat. Check logs/tomcat.log for error messages
2000-10-12 02:09:19 - ContextManager: Adding context Ctx( )
2000-10-12 02:09:19 - ContextManager: Adding context Ctx( /test )
2000-10-12 02:09:21 - PoolTcpConnector: Starting Ajp12ConnectionHandler on 8007
#
# /usr/local/apache/bin/apachectl start
ここで、ブラウザーでアクセス(http://<servername>:8080/examples/servlets/)してみると以下のような場面が表示されます。ここで、8080 ポートを指定しているのは、Apache の設定(httpd.conf)で 8080 ポートが指定されているからです。
Request Headers の Execute をクリックすると以下のようにサンプルが動作していくことが確認できます。

注意) 以降の記述は 「Tomcat 単体で使用してみる」までを行い、JServ の設定を行っていないものとして記述してあります。JServ とは同時に使用できないので JServ の設定が済んでいる場合、Apache の httpd.conf に追加した JServ の部分をコメントアウトするか削除してください。
JServ 同様、mod_jk アダプタも Apache の module として提供されるので、module が利用できるように mod_so をアクティブにします。Apache は、デフォルトで /usr/local/apache にインストールされます。
# gzip -dc apache_1.3.12.tar.gz | tar xf -
# cd apache_1.3.12
# ./configure --enable-module=so
Configuring for Apache, Version 1.3.12
+ using installation path layout: Apache (config.layout)
Creating Makefile
Creating Configuration.apaci in src
Creating Makefile in src
+ configured for Solaris 280 platform
...
Creating Makefile in src/main
Creating Makefile in src/lib/expat-lite
Creating Makefile in src/modules/standard
# make
# make install
次に、mod_jk アダプタを作成するために Tomcat のソースパッケージを展開します。バイナリーパッケージに上書きしても大丈夫なような構成になっていますが、Tomcat を純粋に利用したいのでソースパッケージは一時的に使用するディレクトリーに展開します。
# cd /usr/tmp
# gzip -dc jakarta-tomcat.tar.gz | tar xf -
# cd jakarta-tomcat/src/native/apache1.3
# cp Makefile.freebsd Makefile
# edit Makefile
Makefile を Solaris 用に作り変えたので下記を参照してください。
また、Solaris x86 標準の make(/usr/ccs/bin/make) コマンドでは、この Makefile を
うまく理解してくれないので GNU make を使用してください。
# gmake CC=gcc
ここで、apxs によるリンクがうまく行かない場合、gcc -fPIC -shared -o mod_jk.so *.o と実行してみて下さい。
# cp mod_jk.so /usr/local/apache/libexec/
## You need to edit this file - configure later :-)
APACHE_HOME=/usr/local/apache
OS=solaris
APXS=${APACHE_HOME}/bin/apxs
A13_FLAGS=-I${APACHE_HOME}/include
## I assume this one is set up already
JAVA_HOME=/usr/java
JAVA_INCL=-I${JAVA_HOME}/include -I${JAVA_HOME}/include/${OS}
JAVA_LIB=-L${JAVA_HOME}/jre/lib/${ARCH} -L${JAVA_HOME}/lib/${ARCH}/native_threads
#CFLAGS=-DHAVE_CONFIG_H -g -fpic -DSHARED_MODULE -O2 -D_REENTRANT -pthread -DLINUX -Wall
CFLAGS=-DHAVE_CONFIG_H -g -fpic -DSHARED_MODULE -O2 -D_REENTRANT -DSOLARIS -Wall
JK=../jk/
SRCS=jk_ajp12_worker.c jk_connect.c jk_msg_buff.c jk_util.c jk_ajp13.c \
jk_jni_worker.c jk_pool.c jk_worker.c jk_ajp13_worker.c jk_lb_worker.c \
jk_sockbuf.c jk_map.c jk_uri_worker_map.c
OBJS=${patsubst %.c,%.o,${SRCS}}
%.o: ../jk/%.c
${CC} -c ${CFLAGS} ${JAVA_INCL} ${A13_FLAGS} $< -o $@
.c.o:
${APXS} -c ${JAVA_INCL} -DSOLARIS ${A13_FLAGS} -I../jk $<
all: mod_jk.so
mod_jk.so: ${OBJS} mod_jk.o
$(APXS) -c -o mod_jk.so ${OBJS} mod_jk.o -lrt
# $(CC) -shared -o mod_jk.so ${OBJS} mod_jk.o
clean:
rm *.o *.so
Makefile を使用しない場合:
# cd /usr/tmp
# gzip -dc jakarta-tomcat.tar.gz | tar xf -
# cd jakarta-tomcat/src/native/apache1.3
# apxs -o mod_jk.so -DSOLARIS -I../jk -I/usr/java/include -I/usr/java/include/solaris \
> -c *.c ../jk/*.c
# cp mod_jk.so /usr/local/apache/libexec/
2.2.1. 簡易設定?
Apache で、アダプタを有効にするために httpd.conf 設定ファイルを変更します。以下で mod_jk.conf-auto ファイルを読み込むように httpd.conf ファイルに記述します。しかし、Tomcat を一度も実行していない場合、-auto のついたファイルが存在しないので設定のテストを行うとエラーになります。一番初めに、Tomcat 単体で動かしたときに作られているので、以下で Apache の設定をテストしてもエラーになりません。
# cd /usr/local/apache/conf
# echo "Include /usr/local/jakarta-tomcat/conf/mod_jk.conf-auto" >> httpd.conf
# ../bin/apachectl configtest
Syntax OK
#
ただし、この設定はTomcat を起動するたびに自動生成されるので、あくまでも簡易的に動かす場合のみ利用してください。この -auto をそのまま利用すると、目的に応じた環境にカスタマイズしても Tomcat を起動するたびに上書きされてしまいます。
2.2.2. 目的に対応した設定
上記の設定では、簡易動作しか行えないので、目的に応じた設定ファイルを作成します。カスタマイズした設定ファイルを mod_jk.conf-auto というファイル名で Tomcat の設定ディレクトリーにおかないで下さい。設定上最低限必要なことは、
やはり、Apache の httpd.conf 設定ファイルを変更します。ファイルにそのまま記述しても構いませんし、簡易設定のように、別ファイルを作成しそのファイルを読み込むように設定しても構いません。
# cd /usr/local/jakarta-tomcat/conf
# edit my_mod_jk.conf
サンプルは下記参照
# cd /usr/local/apache/conf
# echo "Include /usr/local/jakarta-tomcat/conf/my_mod_jk.conf" >> httpd.conf
# ../bin/apachectl configtest
Syntax OK
#
my_mod_jk.conf:
LoadModule jk_module libexec/mod_jk.so AddModule mod_jk.c JkWorkersFile /usr/local/jakarta-tomcat/conf/workers.properties JkLogFile /usr/local/apache/logs/mod_jk.log JkLogLevel warn JkMount /*.jsp ajp12 JkMount /servlet/* ajp12 JkMount /otherworker/*.jsp remoteworkerこの設定では、すべての.jspで終了する JSPリクエストや /servlet/で始まるすべてのリクエストを "ajp12" worker に送信し、/otherworker/ 内に配置されているファイルに対する JSP リクエストは "remoteworker" worker に送信します。
2.2.3. その他の設定
Apache を使用するので、Tomcat に HTTPサーバーの役割を持たす必要がないので設定を無効にします。そのあと、Tomcat を起動し Apache を立ち上げることで Servlet 環境が利用できるようになります。
# cd /usr/local/jakarta-tomcat/conf
# edit server.xml
HTTP サーバーに関するコネクタ部分をコメントアウトします。
#
server.xml:
● HTTPサーバーの設定をコメントアウトする
...中略... <!-- ==================== Connectors ==================== --> <!-- Normal HTTP --> <!-- <Connector className="org.apache.tomcat.service.PoolTcpConnector"> <Parameter name="handler" value="org.apache.tomcat.service.http.HttpConnectionHandler"/> <Parameter name="port" value="8080"/> </Connector> --> <!-- Uncomment this for SSL support. You _need_ to set up a server certificate if you want this to work, ...中略...もし、新しい Ajpv13 プロトコル(Web サーバーとの接続プロトコル)を使用したいなら server.xml に
<Connector className="org.apache.tomcat.service.PoolTcpConnector"> <Parameter name="handler" value="org.apache.tomcat.service.connector.Ajp13ConnectionHandler"/> <Parameter name="port" value="8009"/> </Connector>を追加し、上記の JkMount で利用するプロトコルを ajp13 にしてください。Ajpv13 プロトコルは、Ajpv12 プロトコルよりもしっかりと SSL に対応しており高速です。
Tomcat と Apache を起動するだけ。Tomcat を起動した際に Tomcat 単体での動作と違うのは HTTP サーバーとして利用しないので 8080 ポートについての初期化が行われません。
# /usr/local/jakarta-tomcat/bin/startup.sh
Guessing TOMCAT_HOME from tomcat.sh to /usr/local/jakarta-tomcat/bin/..
Setting TOMCAT_HOME to /usr/local/jakarta-tomcat/bin/..
Using classpath: .:/usr/local/jakarta-tomcat/bin/../lib/ant.jar:/usr/local/jakar
ta-tomcat/bin/../lib/jasper.jar:/usr/local/jakarta-tomcat/bin/../lib/jaxp.jar:/u
sr/local/jakarta-tomcat/bin/../lib/parser.jar:/usr/local/jakarta-tomcat/bin/../l
ib/servlet.jar:/usr/local/jakarta-tomcat/bin/../lib/test:/usr/local/jakarta-tomc
at/bin/../lib/webserver.jar
# 2000-10-12 02:09:19 - ContextManager: Adding context Ctx( /example
s )
2000-10-12 02:09:19 - ContextManager: Adding context Ctx( /admin )
Starting tomcat. Check logs/tomcat.log for error messages
2000-10-12 02:09:19 - ContextManager: Adding context Ctx( )
2000-10-12 02:09:19 - ContextManager: Adding context Ctx( /test )
2000-10-12 02:09:21 - PoolTcpConnector: Starting Ajp12ConnectionHandler on 8007
#
# /usr/local/apache/bin/apachectl start
ここで、ブラウザーでアクセス(http://<servername>:8080/examples/servlets/)してみると JServ でテストしたものと同じ内容のものが表示されます。ここで、8080 ポートを指定しているのは、Apache の設定(httpd.conf)で 8080 ポートが指定されているからです。
これまでは、Tomcat に付属のサンプルを動かしました。ここでは、自分の作った Web アプリケーションを Tomcat に追加する方法を記述します。Web アプリケーションは、通常の Web ページのように展開した状態で追加する方法と、それら Web ARchive format (.war) というアーカイブ形式でまとめたものを追加する方法があります。(.war ファイルは、拡張子が違うだけの JAR ファイル)
Web アプリケーションを追加するには server.xml に以下のフォーマットで追加します。
<Context path="/hello"
docBase="/home/shin/tomcat/hello"
debug="0"
reloadable="true" >
</Context>
/usr/local/jakarta-tomcat/conf/server.xml:
● ブラウザにわたす Web アプリケーションの設定
<!-- ==================== Special webapps ==================== --> ...中略... <Context path="/examples" docBase="webapps/examples" debug="0" reloadable="true" > </Context> ... <!-- My Web Application --> <Context path="/hello" docBase="/home/shin/tomcat/hello" debug="0" reloadable="true" > </Context> <!-- Virtual host example - ...
上記の例のように Context エレメントを使用して定義します。Context エレメントの中で最もよく利用するものをまとめておきます。
pathURL のパス docBaseWeb アプリケーションの Servlet や HTML ファイルの置き場所
TOMCAT_HOMEからの相対パスまたは、/(ルート)からの絶対パス(フルパス)で指定することが出来ます。debug デバッグメッセージを記録するレベルを指定( 0 から 9) reloadable Web アプリケーションに変更があった場合、自動的にクラスを更新する(Web アプリケーション開発中は便利なので true とし、完成したら false にしておきましょう)
Web アプリケーション側は、あるルールに従って JSP、Servlet、HTMLファイル、イメージなどを配置します。基本的には、上記の設定の docBase で指定したディレクトリーに以下の構造でファイルを配置します。基本的には、WEB-INF ディレクトリー以下が決められており、それ以外は自由に配置できます。
index.html トップ HTML ファイル WEB-INF/web.xmlServlet の登録やマッピング、MIMEマッピングなどを定義する。 WEB-INF/classes/*このWeb アプリケーションで使う Servlet (クラス)を置く。 WEB-INF/lib/*.jarこのWeb アプリケーションで使う、 beans などの JAR 形式のアーカイブを置く。
web.xml にサーブレットを登録することで、WEB-INF/classesの下に置いたServletを「ドキュメントルート/servlet/サーブレット名」でアクセス出来るようになります。
(例)
<?xml version="1.0" encodeing="ISO-8859-1"?>
<web-app>
<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>HelloServlet</servlet-class>
</servlet>
</web-app>
先程 server.xml に登録した hello Web アプリケーションの構成は以下のようになります。
/home/shin/tomcat/hello/index.html /home/shin/tomcat/hello/WEB-INF/web.xml /home/shin/tomcat/hello/WEB-INF/classes/HelloServlet.class
ここで、http://<servername>:8080/hello/ と指定すると /home/shin/tomcat/hello/index.html が参照されます。もし、Servlet を指定(http://<servername>:8080/hello/servlet/HelloWorld)すると Servlet (HelloServlet.class) が実行されます。
テスト用のサンプル
HelloWorld.java:
import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloServlet extends HttpServlet { public void init(ServletConfig conf) throws ServletException { super.init(conf); } public void destroy() { super.destroy(); } public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException { PrintWriter out = res.getWriter(); res.setContentType("text/html"); out.println("<html>"); out.println("<head>"); out.println("<title>Hello World</title>"); out.println("</head>"); out.println("<body bgcolor=\"white\">"); out.println("<h1>Hello World</h1>"); out.println("</body>"); out.println("</html>"); out.flush(); out.close(); } }
# javac -classpath /usr/local/jakarta-tomcat/lib/servlet.jar HelloServlet.java
実際の Servlet や JSP、クラスの作成方法等については専門の書籍やドキュメントを参照してください。
workerとは、Web サーバーの代りに servlet を実行するために待機している Tomcat のインスタンスです。 worker
を利用して、一つの Web サーバーで複数のTomcat インスタンス(JVM) を対応させることができます。このことで、各インスタンスで異なるコンフィギュレーションを与えたり、複数の
Tomcat で ロードバランシングを行うことが出来ます。特に、複数の Virtual Host を構築した場合、Tomcat プロセスがそれぞれ実行されることで明確に切り分けが出来るようになります。
設定方法は、conf/worker.properties ファイルで行います。worker の設定として、ajpv12,
ajpv13(Apache との接続プロトコル)、 jni(Web サーバのプロセス内に JVM を展開)、 lb(ロードバランシング)
があります。 worker.properties の記述する際に、 worker.ajpv12.port で指定したポート番号と server.xml
で指定したポート番号が一致していなければならないことに注意してください。 worker.properties ファイルを記述することで
worker が有効になります。
【worker.properties】
# Setup for Solaris system
#
# Tomcat をインストールしたディレクトリー
workers.tomcat_home=/usr/local/jakarta-tomcat
# JDK をインストールしたディレクトリー
workers.java_home=/usr/java
# 使用している OS のファイルシステムのセパレーター
ps=/
# workerの指定
worker.list=ajp12, ajp13
# worker のプロパティー
# worker.<worker name>.<property>=<property value>
#
# AJP13 workerのプロパティーを設定
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
# JNI worker の定義
#
# inprocess という名前で定義
worker.inprocess.type=jni
# クラスパスの指定
worker.inprocess.class_path=$(workers.tomcat_home)$(ps)classes
worker.inprocess.class_path=$(workers.java_home)$(ps)lib$(ps)tools.jar
# Tomcat の起動に渡す引き数の指定
worker.inprocess.cmd_line=-config
worker.inprocess.cmd_line=$(workers.tomcat_home)/conf/jni_server.xml
....
【server.xml】
<Connector className="org.apache.tomcat.service.PoolTcpConnector">
<Parameter name="handler" value="org.apache.tomcat.service.connector.Ajp12ConnectionHandler"/>
<Parameter name="port" value="8007"/>
</Connector>
<Connector className="org.apache.tomcat.service.PoolTcpConnector">
<Parameter name="handler" value="org.apache.tomcat.service.connector.Ajp13ConnectionHandler"/>
<Parameter name="port" value="8009"/>
</Connector>
<Host name="host1.foobar.co.jp">
<Context path="" docBase="/web/host1" debug="0"/>
</Host>
<Host name="host2.foobar.co.jp">
<Context path="" docBase="/web/host2" debug="0"/>
</Host>
【httpd.conf】
# First Virtual Host.
#
<VirtualHost 192.168.0.1:80>
DocumentRoot /web/host1
ServerName host1.apache.org
JkMount /*.jsp ajp13
JkMount /servlet/* ajp13
</VirtualHost>
# Second Virtual Host. Also accessible via HTTPS
#
<VirtualHost 192.168.0.2:80>
DocumentRoot /web/host2
ServerName host2.apache.org
JkMount /*.jsp ajp13
JkMount /servlet/* ajp13
</VirtualHost>
<VirtualHost 192.168.0.2:443>
DocumentRoot /web/host2
ServerName host2.apache.org
SSLEngine On
JkMount /*.jsp ajp13
JkMount /servlet/* ajp13
</VirtualHost>
せっかくなので Web グループウェアの Jetspeed もインストールしてみましょう。しかし、ここに関しては非常にいいかげんに設定しているので参考程度にしてください。
パッケージを展開します。相変わらず /usr/local に展開 (^_^;)。さらに、クラスパスに登録が面倒なので、すべての jar ファイルを /usr/local/jakarta-tomcat/lib にコピーしてしまいます。
# cd /usr/local
# gzip -dc Jetspeed-1.1.tar.gz | tar xf -
# cd Jetspeed-1.1
# cp Jetspeed.jar /usr/local/jakarta-tomcat/lib/
# cp lib/*.jar /usr/local/jakarta-tomcat/lib/
Web アプリケーションとして登録するので server.xml に以下のフォーマットで追加します。
/usr/local/jakarta-tomcat/conf/server.xml:
● Jetspeedの設定
<!-- ==================== Special webapps ==================== --> ...中略... <Context path="/examples" docBase="webapps/examples" debug="0" reloadable="true" > </Context> ... <!-- Jetspeed --> <context path="" docbase="/usr/local/apache/htdocs" debug="0" reloadable="true" > </context> <context path="/content" docbase="/usr/local/Jetspeed-1.1/src/content" debug="0" reloadable="true" > </context> <context path="/jetspeed" docbase="webapps/jetspeed" debug="0" reloadable="true" > </context> <!-- Virtual host example - ...
Web アプリケーションを追加しましょう。
# cd /usr/local/jakarta-tomcat/webapps
# mkdir jetspeed
# cd jetspeed
# mkdir WEB-INF META-INF
# cd WEB-INF
# edit web.xml
マッピングの設定。
#
web.xml:
<web-app> <servlet> <servlet-name> jetspeed </servlet-name> <servlet-class> Turbine </servlet-class> <init-param> <param-name> properties </param-name> <param-value> /usr/local/Jetspeed-1.1/src/config/TurbineResources.properties </param-value> </init-param> </servlet> </web-app>
プロパティーの設定(以下のファイルを修正する)
/usr/local/Jetspeed-1.1/src/config/TurbineResources.properties:
jetspeed.properties=/usr/local/Jetspeed-1.1/src/config/JetspeedResources.properties/usr/local/Jetspeed-1.1/src/config/JetspeedResources.properties:
cache.directory=/tmp/JetspeedDocumentCache public.cache.directory=/usr/local/apache/htdocs/jetspeed-cache public.cache.url=/jetspeed-cache xmlportletcontroller.stylesheet=/usr/local/Jetspeed-1.1/src/content/xml/defaultstyle.xsl cocoon.properties.file=/usr/local/Jetspeed-1.1/src/config/cocoon.properties/usr/local/jakarta-tomcat/conf/tomcat.conf:
ApJServMount /examples /root /jetspeed
あとは、tomcat と apache を(再)起動して http://<servername>:8080/jetspeed/servlet/jetspeed をアクセスすればポータルの画面が表示される。
ポータルのデフォルトの内容は、/usr/local/Jetspeed-1.1/src/content/xml/defaultPortlets.xml で定義されている。ううむ、けっこう遅いなあ〜。K6-2 266MHz + Solaris 8 ではきついのかな?