Tomcat 4 の設定 (webapp編)

下記は、Redhat Linux のシステムを使用し、必要なすべてのモジュールが /usr/local/src にダウンロードされているものとして説明をします。また、ほとんどのモジュールを /usr/local にインストールします。# はプロンプトで、スーパーユーザー(root) での作業であることを意味します。


JDK 1.4

JDK を入手しインストールします。
Java(TM) 2 Platform, Standard Edition より JDK 1.4をダウンロードする(ここでは、Tar シェルスクリプト版を使用)。

    # cd /usr/local
    # sh src/j2sdk-1_4_0_01-linux-i586.bin
    Sun Microsystems, Inc.  Binary Code License Agreement
 
    READ THE TERMS OF THIS AGREEMENT AND ANY PROVIDED
    SUPPLEMENTAL LICENSE TERMS (COLLECTIVELY "AGREEMENT")
    ...
    Do you agree to the above license terms? [yes or no]
    yes
    ...
    Done.
    # 

利用するシェルに応じた形式で、 JAVA_HOME, PATH, CLASSPATH 環境変数を設定します。

  sh, bash 系の場合:
    JAVA_HOME=/usr/local/j2sdk1.4.0_01
    CLASSPATH=.:$JAVA_HOME/lib/tools.jar
    PATH=$PATH:$JAVA_HOME/bin
    export JAVA_HOME CLASSPATH PATH
 
  csh 系の場合:
    setenv JAVA_HOME /usr/local/j2sdk1.4.0_01
    setenv CLASSPATH .:$JAVA_HOME/lib/tools.jar
    set path=($path $JAVA_HOME/bin)
 
  動作チェック:
    # java -version
    java version "1.4.0_01"
    Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0_01-b03)
    Java HotSpot(TM) Client VM (build 1.4.0_01-b03, mixed mode)
    # 

Apache + Tomcat 4

バイナリーおよびソースを入手します。

Apache (HTTP Server) http://www.apache.org/dist/httpd/
Tomcat 4 (Servlet 2.3/JSP 1.2) http://jakarta.apache.org/builds/jakarta-tomcat-4.0/
jakarta-tomcat-4.0.4.tar.gz
jakarta-tomcat-connectors-4.0.4-src.tar.gz
APR (Apache Portable Runtime) http://apr.apache.org/ から最新のものをダウンロード
ANT (Java-based build tool) http://www.apache.org/dist/ant/から最新のものをダウンロード

HTTP サーバーである Apacheのインストール

DSO(Dynamic Shared Object) をサポートするように設定します。

    # gzip -dc apache_1.3.26.tar.gz | tar xf -
    # cd apache_1.3.26
    # ./configure --enable-module=so
    Configuring for Apache, Version 1.3.26
     + using installation path layout: Apache (config.layout)
    ...
    # make
    # make install

Apache の設定ファイルである httpd.conf をチェックします。Redhat で既に HTTP サーバーが起動している場合、それを停止するか、新しくインストールした Apache の Port を変更(たとえば 8080、ただし Tomcat でデフォルトで設定されているポートがあるので注意が必要)する。

    # /usr/local/apache/bin/apachectl configtest
    Syntax OK
    # 

Servlet/JSP である Tomcat のインストール

必要なものが揃っているバイナリ版(jakarta-tomcat-4.0.4.tar.gz)をインストールします。Pure Java なコードなのでバイナリーがどのマシンでも動作します...ここでは説明しませんが、もしソースから作る場合、多くのアーカイブが必要になります。ソースパッケージに含まれる BUILDING.txt を参照してください(ANTを利用してコンパイル。ついでにインストールしておきます)。

    # cd /usr/local
    # gzip -dc src/jakarta-tomcat-4.0.4.tar.gz | tar xf -
    # gzip -dc src/jakarta-ant-1.4.1-bin.tar.gz | tar xf -

ApacheとTomcatを連携させるためのコネクタのインストール

コネクタには、AJP13 と WARP という二つのメジャーなコネクタがあります。AJP13(mod_jk)は、安定したバージョンで、複数の Tomcat サーバーを利用して load-balancing を行うことができます。WARP(mod_webapp)は、まだ発展している段階ですが、わかりやすいセットアップとStreamlined protocol を採用しています。

mod_jkを利用する場合:コネクタのバイナリーが見つからなかったので、ソース(jakarta-tomcat-connectors-4.0.4-src.tar.gz)から作ります。mod_jk のコンパイルには GNU autoconf, libtool が必要です。存在しなかったり古いバージョンの時は、新しいパッケージをインストールします(./configure;make;make check;make install と簡単なので詳細は省略します)。

    # cd /usr/local/src
    # gzip -dc jakarta-tomcat-connectors-4.0.4-src.tar.gz | tar xf -
    # cd jakarta-tomcat-connectors-4.0.4-src/jk/native
    # ./buildconf.sh
    libtoolize --force --automake --copy
    ...
    autoconf
    # ./configure --with-apxs=/usr/local/apache/bin/apxs \
    > --with-java-home=/usr/local/j2sdk1.4.0_01
    checking for a BSD-compatible install... /usr/bin/install -c
    checking whether build environment is sane... yes
    ...
    config.status: creating common/list.mk
    config.status: creating jni/Makefile
    # make
    # cp apache-1.3/mod_jk.so /usr/local/apache/libexec/

Apache の設定ファイル httpd.conf に mod_jk モジュールをロードする設定を追加します。最後の行に追加します。

    # edit /usr/local/apache/conf/httpd.conf
      include /usr/local/jakarta-tomcat-4.0.4/conf/mod_jk.conf

コネクタの設定を行います。/usr/local/jakarta-tomcat-4.0.4/conf/mod_jk.conf の作成。

    LoadModule jk_module libexec/mod_jk.so
 
    JkWorkersFile /usr/local/jakarta-tomcat-4.0.4/conf/workers.properties
    JkLogFile /usr/local/apache/logs/mod_jk.log
    JkLogLevel info
 
    JkMount /examples/*.jsp ajp13
    JkMount /examples/servlet/* ajp13
 
    Alias /examples "/usr/local/jakarta-tomcat-4.0.4/webapps/examples"
 
    <Directory "/usr/local/jakarta-tomcat-4.0.4/webapps/examples">
        Options Indexes FollowSymLinks MultiViews
    </Directory>
    <Directory "/usr/local/jakarta-tomcat-4.0.4/webapps/examples/WEB-INF">
        AllowOverride None
        deny from all
    </Directory>

コネクタの設定を行います。/usr/local/jakarta-tomcat-4.0.4/conf/workers.properties の作成。

    workers.tomcat_home=/usr/local/jakarta-tomcat-4.0.4
    workers.java_home=/usr/local/j2sdk1.4.0_01
    ps=/
    worker.list=ajp13
 
    worker.ajp13.port=8009
 
    worker.ajp13.host=localhost
    worker.ajp13.type=ajp13

変更したの設定ファイル httpd.conf をチェックします。

    # /usr/local/apache/bin/apachectl configtest
    Syntax OK
    # 

Tomcat自身は、HTTPサーバとして使用しないので設定ファイルを変更します。

    # edit /usr/local/jakarta-tomcat-4.0.4/conf/server.xml
    <!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
    <!--
    <Connector className="org.apache.catalina.connector.http.HttpConnector"
               port="8080" minProcessors="5" maxProcessors="75"
               enableLookups="true" redirectPort="8443"
               acceptCount="10" debug="0" connectionTimeout="60000"/>
    -->

動作させるには、まず、Tomcat を起動してから Apache を起動します。JAVA_HOME 環境変数が設定されてなければなりません(上記 JDK 1.4 のインストールを参考にしてください)。

  Tomcat の起動:
    # /usr/local/jakarta-tomcat-4.0.4/bin/catalina.sh start
    Using CATALINA_BASE:   /usr/local/jakarta-tomcat-4.0.4
    Using CATALINA_HOME:   /usr/local/jakarta-tomcat-4.0.4
    Using CATALINA_TMPDIR: /usr/local/jakarta-tomcat-4.0.4/temp
    Using JAVA_HOME:       /usr/local/j2sdk1.4.0_01
  
  Tomcat の停止:
    # /usr/local/jakarta-tomcat-4.0.4/bin/catalina.sh stop
    Using CATALINA_BASE:   /usr/local/jakarta-tomcat-4.0.4
    Using CATALINA_HOME:   /usr/local/jakarta-tomcat-4.0.4
    Using CATALINA_TMPDIR: /usr/local/jakarta-tomcat-4.0.4/temp
    Using JAVA_HOME:       /usr/local/j2sdk1.4.0_01

最後に Apache を起動して、ブラウザーを使って動作確認をします。

    # /usr/local/apache/bin/apachectl start

ブラウザーで http://<servername>/examples/jsp/dates/date.jsp にアクセスすることできちんと動作しているか確認できます。

jk

Webアプリケーションは、mod_jk の設定ファイル(mod_jk.conf)に JkMount を記述し、Tomcatの設定ファイル(server.xml)にContextを記述することで追加することができます。

mod_webappを利用する場合:コネクタのバイナリーが見つからなかったので、ソース(jakarta-tomcat-connectors-4.0.4-src.tar.gz)から作ります。mod_webapp のコンパイルには GNU autoconf, libtool が必要です。存在しなかったり古いバージョンの時は、新しいパッケージをインストールします(./configure;make;make check;make install と簡単なので詳細は省略します)。

    # cd /usr/local/src
    # gzip -dc apr_20020#########.tar.gz | tar xf -
    # cd apr
    # ./buildconf
    buildconf: checking installation...
    ...
    Creating configure ...
    # cd ..
    # gzip -dc jakarta-tomcat-connectors-4.0.4-src.tar.gz | tar xf -
    # cd jakarta-tomcat-connectors-4.0.4-src/webapp
    # ./support/buildconf.sh
    --- Checking "autoconf" version
    ...
    --- All done
    # ./configure --with-apr=/usr/local/src/apr \
    > --with-apxs=/usr/local/apache/bin/apxs
    Configuring WebApp Module
    + checking build system type... i686-pc-linux-gnu
    ...
    config.status: creating apache-1.3/Makefile
    config.status: creating build.properties
    # make
    # cp build/mod_webapp.so /usr/local/apache/libexec/

warp.jar も作り直したい場合は、--enable-java--with-ant を指定して configure を実行しコンパイルする。build ディレクトリーの下に tomcat-warp.jar が作られる。JAVA_HOME 環境変数が設定されてなければなりません(上記 JDK 1.4 のインストールを参考にしてください)。

    # ./configure --with-apr=/usr/local/src/apr \
    > --with-apxs=/usr/local/apache/bin/apxs \
    > --enable-java=/usr/local/jakarta-tomcat-4.0.4 \
    > --with-ant=/usr/local/jakarta-ant-1.4.1/bin/ant
    # make
    # cp build/mod_webapp.so /usr/local/apache/libexec/
    # cp build/tomcat-warp.jar /usr/local/jakarta-tomcat-4.0.4/server/lib/warp.jar

Apache の設定ファイル httpd.conf に mod_webapp モジュールをロードする設定を追加します。

    # edit /usr/local/apache/conf/httpd.conf
       LoadModule webapp_module libexec/mod_webapp.so
 
       <IfModule mod_webapp.c>
       WebAppConnection warpConnection warp localhost:8008
       WebAppDeploy examples warpConnection /examples/
       WebAppInfo info
       </IfModule>

変更したの設定ファイル httpd.conf をチェックします。

    # /usr/local/apache/bin/apachectl configtest
    Syntax OK
    # 

Tomcat自身は、HTTPサーバとして使用しないので設定ファイルを変更します。機能を使用しないようにコメントアウトします。SSL対応 HTTPサーバーとしても使用しないなら、その記述もコメントアウトします。

    # edit /usr/local/jakarta-tomcat-4.0.4/conf/server.xml
    <!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
    <!--
    <Connector className="org.apache.catalina.connector.http.HttpConnector"
               port="8080" minProcessors="5" maxProcessors="75"
               enableLookups="true" redirectPort="8443"
               acceptCount="10" debug="0" connectionTimeout="60000"/>
    -->

動作させるには、まず、Tomcat を起動してから Apache を起動します。JAVA_HOME 環境変数も設定されてなければなりません(上記 JDK 1.4 のインストールを参考にしてください)。

  Tomcat の起動:
    # /usr/local/jakarta-tomcat-4.0.4/bin/catalina.sh start
    Using CATALINA_BASE:   /usr/local/jakarta-tomcat-4.0.4
    Using CATALINA_HOME:   /usr/local/jakarta-tomcat-4.0.4
    Using CATALINA_TMPDIR: /usr/local/jakarta-tomcat-4.0.4/temp
    Using JAVA_HOME:       /usr/local/j2sdk1.4.0_01
 
  Tomcat の停止:
    # /usr/local/jakarta-tomcat-4.0.4/bin/catalina.sh stop
    Using CATALINA_BASE:   /usr/local/jakarta-tomcat-4.0.4
    Using CATALINA_HOME:   /usr/local/jakarta-tomcat-4.0.4
    Using CATALINA_TMPDIR: /usr/local/jakarta-tomcat-4.0.4/temp
    Using JAVA_HOME:       /usr/local/j2sdk1.4.0_01

最後に Apache を起動して、ブラウザーを使って動作確認をします。

    # /usr/local/apache/bin/apachectl start

ブラウザーでアクセス(http://<servername>/info/)してみると以下のような場面が表示されます。ここで、URL を指定する際に最後に必ずスラッシュ(/)を指定して下さい。JSPのサンプルは http://<servername>/examples/jsp/ にアクセスすることで確認できます。

Servlet

Webアプリケーションは、Apacheの設定ファイル(httpd.conf)に WebAppDeploy を記述し、Tomcatの設定ファイル(server.xml)にContextを記述することで追加することができます。


各プログラムの起動とシステムへの登録

各ユーザーが設定しておくと便利な環境変数

sh, bash 系の場合
JAVA_HOME=/usr/local/j2sdk1.4.0_01
CLASSPATH=.:$JAVA_HOME/lib/tools.jar
CATALINA_HOME=/usr/local/jakarta-tomcat-4.0.4
ANT_HOME=/usr/local/jakarta-ant-1.4.1
PATH=$PATH:$JAVA_HOME/bin:$ANT_HOME/bin
export JAVA_HOME CLASSPATH CATALINA_HOME ANT_HOME PATH
csh 系の場合
setenv JAVA_HOME /usr/local/j2sdk1.4.0_01
setenv CLASSPATH .:$JAVA_HOME/lib/tools.jar
setenv CATALINA_HOME /usr/local/jakarta-tomcat-4.0.4
setenv ANT_HOME /usr/local/jakarta-ant-1.4.1
set path=($path $JAVA_HOME/bin $ANT_HOME/bin)

システム起動時に自動的に Tomcat や Apache を起動させたい場合、/etc/rc.d/init.d 以下にスクリプトを用意しておく(Linux の場合、chkconfig コマンドを利用できるように設定しておくと便利)

Tomcat
/usr/local/jakarta-tomcat-4.0.4/bin/catalina.sh start
 
/usr/local/jakarta-tomcat-4.0.4/bin/catalina.sh stop
          
Apache
/usr/local/apache/bin/apachectl start
 
/usr/local/apache/bin/apachectl stop


Webアプリケーションの登録

コンパイルした Java のコード(Servlet)を、Web アプリケーションとして利用できるようにするには、決められたディレクトリー構成と幾つかの設定ファイルが必要になります。まず、web.xml にサーブレットを登録することで、WEB-INF/classesの下に置いたServletを指定したサーブレット名でアクセス出来るようになります。ここでは、mytest という Webアプリケーションの登録を例に説明します。

【JSPのサンプル】

<%@ page contentType="text/html; charset=EUC-JP" %>
<html><body>
<%
  out.println("<h2>Hello World !!</h2>");
  out.println("<p>JSPのサンプル</p>");
%>
</body></html>

【サーブレットのサンプル】

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
 
public class HelloServlet extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse res)
                     throws ServletException, IOException
    {
        PrintWriter out = res.getWriter();
        res.setContentType("text/html; charset=EUC-JP");
        out.println("<html><body>");
        out.println("<h2>Hello World !!</h2>");
        out.println("<p>Servletのサンプル</p>");
        out.println("</body></html>");
        out.close();
    }
}

【web.xml のサンプル】

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app> <servlet> <servlet-name>HelloWorld</servlet-name> <servlet-class>HelloServlet</servlet-class> </servlet> </web-app>

次に、web.xml, HelloServlet.class といったファイルを以下のようなディレクトリー構成にします。Tomcat では、webapps という Servlet を置くところがデフォルト(docBase:デフォルトのルート)で存在するので、その下に mytest という Web アプリケーションを構築します。

  /usr/local/jakarta-tomcat-4.0.4/webapps/mytest/hello.jsp
  /usr/local/jakarta-tomcat-4.0.4/webapps/mytest/WEB-INF/web.xml
  /usr/local/jakarta-tomcat-4.0.4/webapps/mytest/WEB-INF/classes/HelloServlet.class

Web アプリケーションとして利用できるように、Tomcat へ Context の追加と Apache へ JkMount または WebAppDeploy の追加を行ないます。

Tomcat への Context の追加は、Tomcat の設定ファイルである server.xml を編集します。Host タグ内に登録してください。

/usr/local/jakarta-tomcat-4.0.4/conf/server.xml:

  ...
  <!-- Tomcat Examples Context -->
  ...
  </ResourceParams>
  </Context>
 
  <!-- MyTest WebApp Context -->
  <Context path="/mytest" docBase="mytest" debug="0" reloadable="true" >
    <Logger className="org.apache.catalina.logger.FileLogger"
            prefix="localhost_mytest_log." suffix=".txt"
            timestamp="true"/>
  </Context>
 
</Host>
...

mod_jk の場合、設定ファイル(mod_jk.conf)に JkMount を追加。

/usr/local/jakarta-tomcat-4.0.4/conf/mod_jk.conf:

...
JkMount /examples/*.jsp ajp13
JkMount /examples/servlet/ ajp13
JkMount /mytest/*.jsp ajp13
JkMount /mytest/servlet/ ajp13
 
Alias /examples "/usr/local/jakarta-tomcat-4.0.4/webapps/examples"
Alias /mytest "/usr/local/jakarta-tomcat-4.0.4/webapps/mytest"
            

mod_webapp の場合、Apache の設定ファイル(httpd.conf)に WebAppDeploy を追加。

/usr/local/apache/conf/httpd.conf:

...
<IfModule mod_webapp.c>
WebAppConnection warpConnection warp localhost:8008
WebAppDeploy examples warpConnection /examples/
WebAppDeploy mytest warpConnection /mytest/
WebAppInfo info
</IfModule>

それぞれの設定ファイルの編集が終わったら、tomcatと apache を再起動します。

    # /usr/local/jakarta-tomcat-4.0.4/bin/catalina.sh stop
    # /usr/local/jakarta-tomcat-4.0.4/bin/catalina.sh start
    # /usr/local/apache/bin/apachectl restart

ここで、Servlet を指定(http://<servername>/mytest/servlet/HelloWorld)すると Servlet (HelloServlet.class) が実行されます。JSPを指定(http://<servername>/mytest/hello.jsp)すると JSP(hello.jsp) が実行されます。