Tomcat5.5 インストールと設定

Tomcatとは、JavaのサーブレットやJSPを動作させるために必要なアプリケーションサーバーです。 サーブレットエンジンとも呼びます。TomcatはWEBサーバーとしても動作しますが、 WEBサーバーはApacheに任せて、Apacheと連動して稼動させることが多いです。 ここでは、Tomcat5.5 のインストールから、Apache2.2 との連携までを説明します。

1.J2SEのインストール

まずは、Java 2 Platform Standard Edition をインストールします。 今回は、J2SE(TM) Development Kit 5.0 Update 6をインストールしました。
> chmod +x jdk-1_5_0_06-linux-i586-rpm.bin
> ./jdk-1_5_0_06-linux-i586-rpm.bin
	
  jdk-1_5_0_06-linux-i586-rpm.bin に実行権限を付与して、そのまま実行します。
	
〜

For inquiries please contact: Sun Microsystems, Inc., 4150 Network
Circle, Santa  Clara, California 95054, U.S.A.  (LFI#141623/Form
ID#011801)

Do you agree to the above license terms? [yes or no] yes
Unpacking...
Checksumming...
0
0
Extracting...
UnZipSFX 5.42 of 14 January 2001, by Info-ZIP (Zip-Bugs@lists.wku.edu).
  inflating: jdk-1_5_0_06-linux-i586.rpm
Preparing...                ########################################### [100%]
   1:jdk                    ########################################### [100%]

Done.
終了すると、/usr/java/jdk1.5.0_06 が作成されています。

2.ANTのコンパイル

Tomcatをコンパイルするには、ANT というものが必要になります。 apache-ant-1.6.5-src.tar.gzを展開してコンパイルを行います。
> tar zxvf apache-ant-1.6.5-src.tar.gz
> export JAVA_HOME=/usr/java/jdk1.5.0_06
	
  JAVA_HOME という環境変数に、J2SE のディレクトリを設定します。
	
> cd apache-ant-1.6.5
> ./build.sh
... Bootstrapping Ant Distribution
... Compiling Ant Classes

〜

BUILD SUCCESSFUL
Total time: 1 minute 14 seconds

> cd /usr/local
> ln -s /usr/local/src/apache-ant-1.6.5/dist ant
> export ANT_HOME=/usr/local/ant
> export PATH=$PATH:$ANT_HOME/bin
	
  コンパイル結果が distディレクトリにありますので、
  antコマンドにパスが通るように、環境変数PATHを設定しましょう。
  ここでは、/usr/local 配下にdistのシンボリックリンクを作成し、
  /usr/local/ant/bin としてパスを通しています。
	
環境変数の「JAVA_HOME」と「PATH」は、次回ログイン時にも反映されるように .bashrc 等に設定を記述しておきましょう。
> vi .bashrc
	
ANT_HOME=/usr/local/ant
JAVA_HOME=/usr/java/jdk1.5.0_06
PATH=$PATH:$ANT_HOME/bin:$JAVA_HOME/bin
	
  /usr/local/ant/bin と /usr/java/jdk1.5.0_06/bin を PATH に追加
	
export JAVA_HOME
	

3.Tomcat5.5のコンパイルと実行

事前準備ができましたので、いよいよTomcatのコンパイルを行います。 apache-tomcat-5.5.17-src.tar.gzを展開して antコマンドを実行してください。
> tar zxvf apache-tomcat-5.5.17-src.tar.gz
> cd apache-tomcat-5.5.17-src
> ant
	
  build.xmlをもとに、antコマンドでコンパイルを行います。
	
Buildfile: build.xml

〜

BUILD SUCCESSFUL
Total time: 13 minutes 9 seconds

> ln -s /usr/local/src/apache-tomcat-5.5.17-src/build/build /usr/local/tomcat
	
  コンパイル結果が build/build ディレクトリにありますので、
  /usr/local/tomcat にコピーしたり、シンボリックリンクを作成したりすると
  ディレクトリが簡単に辿れて便利です。
	
tomcat
コンパイルを終えたら、binディレクトリの startup.sh を実行して、Tomcatを起動してみます。
> cd /usr/local/tomcat/bin
> ./startup.sh

Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:       /usr/java/jdk1.5.0_06
この時、ブラウザから http:// 〜 :8080/ というアドレスを入力すると、 左のような画面が出ることを確認してください。(ポート番号が8080番) また、左メニューの「Example」から、 サンプルのJSPやサーブレットが実行できることも確認してください。

なお、startup.sh は以下のような感じで root以外のユーザーで実行するようにしましょう。
またこの時、TOMCAT_HOME(/usr/local/tomcat) 配下のlogs、work ディレクトリは 実行ユーザーが書込み可能な状態でないといけません。
> su - user -c "/usr/local/tomcat/bin/startup.sh"
Tomcatを停止するには、同じく binディレクトリの shutdown.sh を実行します。
> /usr/local/tomcat/bin/shutdown.sh

4.Apache との連携設定

次に、Apache と Tomcat を連携させます。 連携させるモジュールとして mod_jk2 というものが存在しますが、 Apache2.2 では mod_proxy_ajp を使うのが主流のようです。
mod_proxy_ajp はApacheのモジュールですので、 Apacheの configure で mod_proxy_ajp をコンパイルするように 指定する必要があります。
mod_proxy_ajp の設定

> cd /usr/local/src/httpd-2.2.0
> ./configure --enable-modules=all --enable-proxy --enable-proxy-ajp --enable-ssl
	
  mod_proxy_ajp には mod_proxy も必要になります。
	
> make
> make install
	
  Apache のコンパイル・インストールを行います。
	
mod_jk2 は jakarta-tomcat-connectors-jk2-src-current.tar.gzを展開してコンパイルし、
Apache のモジュールとして登録しておきます。
mod_jk2 の設定

> tar zxvf jakarta-tomcat-connectors-jk2-src-current.tar.gz
> cd jakarta-tomcat-connectors-jk2-2.0.4-src
> cd jk/native2
> ./configure --with-apxs2=/usr/local/apache2/bin/apxs
> make
	
  configureで、Apache2の apxsコマンドを指定します。
	
> cd ..
> cp build/jk2/apache2/mod_jk2.so /usr/local/apache2/modules
> cp conf/workers2.properties /usr/local/apache2/conf
	
  mod_jk2.so と workers2.properties を
  Apache2 の環境にコピーします。
	
> cd /usr/local/apache2/conf
> vi httpd.conf

LoadModule jk2_module modules/mod_jk2.so
	
  Apache のhttpd.confで
  mod_jk2モジュールを読み込むように設定します。
	
Apacheと連携することで、Tomcatの8080番ポートが不要になります。 /usr/local/tomcat/conf/server.xml の以下の箇所をコメントで囲んでください。
    <!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
<!--
    <Connector port="8080" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true" />
-->
    <!-- Note : To disable connection timeouts, set connectionTimeout value
     to 0 -->

5.アプリケーションの設定

それでは、WEBアプリケーションを作成してみましょう。 以下のようなソースを作成してください。
test.jsp

<html>
<body>
<%= JSP TEST %><br />
<a href="Test">Servet Test</a>
</body>
</html>


TestServlet.java

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class TestServlet extends HttpServlet
{
    public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
                    throws IOException, ServletException
    {
        response.setContentType("text/html");

        PrintWriter out = response.getWriter();

        out.println("<html>");
        out.println("<body>");
        out.println("SERVLET TEST<br />");
        out.println("<a href=\"test.jsp\">Jsp Test</a>");
        out.println("</body>");
        out.println("</html>");
    }
}


web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app>
    <servlet>
        <servlet-name>TEST</servlet-name>
        <servlet-class>TestServlet</servlet-class>
    </servlet>
	
  TEST というサーブレットは TestServlet.class です。
	
    <servlet-mapping>
        <servlet-name>TEST</servlet-name>
        <url-pattern>/Test</url-pattern>
    </servlet-mapping>
	
  TEST というサーブレットは /Test というアドレスです。
	
</web-app>
アプリケーションのディレクトリを /home/www/java 配下に置くことにします。
以下のような階層で「WEB-INF」「classes」「lib」ディレクトリを作成し、 test.jsp, TestServlet.class, web.xml を配置してください。 なお、javaのソースは不要ですので、src ディレクトリは必要ではありません。
 /home/www/java
  |
  |--test.jsp
  |
  |--WEB-INF
    |
    |--web.xml
    |
    |--classes
    |  |
    |  |--TestServlet.class  TestServlet.java をコンパイルしたファイル
    |
    |--lib  jarファイル等を格納するディレクトリ
    |
    |--src
       |
       |--TestServlet.java
TestServlet.java のコンパイル

> javac -classpath /usr/local/tomcat/common/lib/servlet-api.jar TestServlet.java
	
  servlet-api.jar を JAVA_HOME(/usr/java/jdk1.5.0_06)/jre/lib/ext にコピーしておくと
  「-classpath」は必要ありません。
	
それでは、アプリケーションの名前を決めましょう。 ここでは簡単に「test」という名前にすることにして、 Tomcat側に「test アプリケーション」の設定を行います。 /usr/local/tomcat/conf/Catalina/localhost 配下に 「test.xml」というファイルを作成してください。
> cd /usr/local/tomcat/conf/Catalina/localhost
> vi test.xml
	
  「アプリケーション名 .xml」というファイル名
	
<Context path="/test" docBase="/home/www/java" debug="0" reloadable="true" />
	
  path   :アプリケーションのURLを指定します。
  docBase  :アプリケーションのディレクトリを指定します。
  debug   :デバッグレベル
  reloadable:trueを指定すると、classファイルが更新された時にTomcatの再起動なく更新が反映されます。
	
今度は連携するApache側の設定です。
モジュールの mod_proxy_ajp と mod_jk2 などで設定方法が変わってきます。
mod_proxy_ajp の場合

> vi /usr/local/apache2/conf/httpd.conf

Include conf/extra/httpd-proxy.conf
	
  httpd.confに httpd-proxy.conf という設定ファイルを取り込むようにしておきます。
	
> vi /usr/local/apache2/conf/extra/httpd-proxy.conf
	
<Location "/test/">
  ProxyPass ajp://localhost:8009/test/
</Location>
	
  /test 配下は AJP13プロトコルで Tomcat と通信します。
mod_jk2 の場合

> vi /usr/local/apache2/conf/workers2.properties

[uri:/test/*]
	
  /test 配下は Tomcatに処理を任せます。
	

6.TomcatとApacheの起動

ここまでで、ひと通りの設定は終わりです。 Tomcat と Apache の起動を行ってください。
> su - user -c "/usr/local/tomcat/bin/startup.sh"
	
  Tomcat の起動
  Tomcat のほうから先に起動します。
	
> /usr/local/apache2/bin/apachectl start
	
  Apache の起動
	
JSP
/home/www/java/test.jsp
http:// 〜 /test/test.jsp というURLアドレスになります。

SERVLET
/home/www/java/WEB-INF/classes/TestServelet.class
http:// 〜 /test/Test というURLアドレスになります。


2006.05.11 Kazuhito Usui