Sample of Deployment

Revised: 25th/Nov./2002

前節でウェブ・アプリケーションの標準的な配備方法を紹介しました。本節では Tomcat 4.1.12 を例にとり、配備の手順をサンプルで見てみます。配備方法には、前節の手順を含めて、次の四種類が考えられます。

  1. 【入門】$CATALINA_HOME/webapps配下にドキュメント・ルートを作る
  2. 【標準】任意のディレクトリをドキュメント・ルートにする
  3. 【簡単】invokerサーブレットを使う
  4. 【非推奨】$CATALINA_HOME/conf/web.xmlのコメントアウトを外す

以下にそれぞれの場合の配備方法を紹介します。ここでは、 Tomcat がインストールされているディレクトリを $CATALINA_HOME と表記します。Tomcat 4.1.12 のインストールディレクトリは、デフォルトでは C:\Program Files\Apache Group\Tomcat 4.1 になります。別のディレクトリにインストールした場合は、適宜読み替えてください。

1. $CATALINA_HOME/webapps配下にドキュメント・ルートを作る

Tomcat 4.1.12 で動作を試してみたいときに実施する最初の一歩はこの方法になります。

  1. $CATALINA_HOME/webappsにディレクトリdep1を作る
  2. dep1配下にWEB-INF/classesを作る
  3. /WEB-INF/classesに前節のHelloWorldをコンパイルしたHelloWorld.classを置く
    import java.util.*;
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    
    public class HelloWorld extends HttpServlet {
    	public void doGet(HttpServletRequest req, HttpServletResponse res)
    	        throws ServletException, IOException {
    		// 送信文字コードのセット
    		res.setContentType("text/html; charset=Shift_JIS");
    		// 出力ストリームの取得
    		PrintWriter out = res.getWriter();
    
    		String title = "Hello World!";
    		Date date = new Date();
    
    		// 出力ストリームへの書き込み
    		out.println("<html lang=\"ja\">");
    		out.println("<head><title>" + title + "</title></head>");
    		out.println("<body>");
    		out.println("<h1>" + title + "</h1>");
    		out.println("<p>現在時刻:" + date + "</p>");
    		out.println("</body></html>");
    
    		// 出力ストリームのクローズ
    		out.close();
    	}
    }
    

    コンパイルのコマンドは次のようになります。$CATALINA_HOMEがC:\Program Files\Apache Group\Tomcat 4.1である例です。別のディレクトリにインストールした場合は適宜読み替えてください。

    C:\>cd "C:\Program Files\Apache Group\Tomcat 4.1\webapps\dep1\WEB-INF\classes"
    
    C:\Program Files\Apache Group\Tomcat 4.1\webapps\dep1\WEB-INF\classes>javac -cla
    sspath "C:\Program Files\Apache Group\Tomcat 4.1\common\lib\servlet.jar" HelloWo
    rld.java
    
    C:\Program Files\Apache Group\Tomcat 4.1\webapps\dep1\WEB-INF\classes>
    
    コマンド中の改行は厳禁です。上では便宜上改行しています。
  4. /WEB-INFに次のweb.xmlを置く
    <?xml version="1.0" encoding="Shift_JIS"?> 
    
    <!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>SvltName</servlet-name>     <!-- 任意のサーブレット名 -->
    		<servlet-class>HelloWorld</servlet-class> <!-- サーブレットクラス -->
    	</servlet> 
    	<servlet-mapping> 
    		<servlet-name>SvltName</servlet-name> 
    		<url-pattern>/sample/Welcome</url-pattern> <!-- 任意のアクセス・パス -->
    	</servlet-mapping> 
    </web-app>
    
  5. Tomcatを(再)起動する
    スタート->プログラム(P)->Apache Tomcat 4.1->Start Tomcat
  6. ブラウザから http://localhost:8080/dep1/sample/Welcome を要求する

2. 任意のディレクトリをドキュメント・ルートにする

前節で紹介した方法です。配布を目的としたウェブ・アプリケーション・アーカイブ (WAR: Web Application Archive) にしないで、ディレクトリ階層にクラスファイルを個別に追加していく場合は、この配備方法が最も標準的なものになります。

  1. C:\javaにディレクトリdep2を作る
  2. dep2配下にWEB-INF/classesを作る
  3. /WEB-INF/classesに前節のHelloWorldをコンパイルしたHelloWorld.classを置く
  4. /WEB-INFに上で挙げたweb.xmlを置く
  5. $CATALINA_HOME/conf/server.xml の 264 行目に次のコードが存在する。
           <!-- Tomcat Root Context -->
           <!--
              <Context path="" docBase="ROOT" debug="0"/>
            -->
    
    この行の次の行に、次のコードを挿入する。
           <!-- My Context Root: C:\java\DocRoot as /webAppl -->
              <Context path="/dep2" docBase="C:/java/dep2" debug="0"
                     reloadable="true" crossContext="true" />
    
  6. Tomcatを(再)起動する
  7. ブラウザから http://localhost:8080/dep2/sample/Welcome を要求する

3. invoker の利用

上では、一つのクラス名 HelloWorld に名前をつけて、その名前を通して URL パターンにマッピングしました。ここでは、任意のクラス名を URL パターンにマッピングしてみましょう。そのためにはワイルドカード * を使うだけと簡単です。

  1. C:\javaにディレクトリdep3を作る
  2. dep3配下にWEB-INF/classesを作る
  3. /WEB-INF/classesに前節のHelloWorldをコンパイルしたHelloWorld.classを置く
  4. /WEB-INFに次のweb.xmlを置く
    <?xml version="1.0" encoding="Shift_JIS"?>
    
    <!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-mapping>
            <servlet-name>invoker</servlet-name>
            <url-pattern>/apps/*</url-pattern>
        </servlet-mapping>
    </web-app>
    
  5. $CATALINA_HOME/conf/server.xml の 264 行目に次のコードが存在する。
           <!-- Tomcat Root Context -->
           <!--
              <Context path="" docBase="ROOT" debug="0"/>
            -->
    
    この行の次の行に、次のコードを挿入する。
           <!-- My Context Root: C:\java\DocRoot as /webAppl -->
              <Context path="/dep3" docBase="C:/java/dep3" debug="0"
                     reloadable="true" crossContext="true" />
    
  6. Tomcatを(再)起動する
  7. ブラウザから http://localhost:8080/dep3/apps/HelloWorld を要求する

この例では、ビルトイン・サーブレットである invoker を使って、当該ドキュメント・ルート配下の/WEB-INF/classes 配下の任意のクラス * が、コンテキストパス配下の /apps/* でアクセスできるように設定しています。こうすればいちいちのサーブレットの名前を考えなくても良くなるわけです。

4. $CATALINA_HOME/conf/web.xmlのコメントアウトを外す

最後に、推奨できない方法を紹介します。なぜ推奨しない手順を紹介するかというと、 Tomcat 4.1.12 より古いバージョンでは、最初の一歩としてアナウンスされていたものが、セキュリティーを配慮したアップデートである Tomcat 4.1.12 からデフォルトでは利用できなくなったという経緯があるからです。

  1. C:\javaにディレクトリdep4を作る
  2. dep4配下にWEB-INF/classesを作る
  3. /WEB-INF/classesに前節のHelloWorldをコンパイルしたHelloWorld.classを置く
  4. $CATALINA_HOME/conf/server.xml の 264 行目に次のコードが存在する。
           <!-- Tomcat Root Context -->
           <!--
              <Context path="" docBase="ROOT" debug="0"/>
            -->
    
    この行の次の行に、次のコードを挿入する。
           <!-- My Context Root: C:\java\DocRoot as /webAppl -->
              <Context path="/dep4" docBase="C:/java/dep4" debug="0"
                     reloadable="true" crossContext="true" />
    
  5. $CATALINA_HOME/conf/web.xml の 273 行目に次のコードが存在する。
    <!--
        <servlet-mapping>
            <servlet-name>invoker</servlet-name>
            <url-pattern>/servlet/*</url-pattern>
        </servlet-mapping>
    -->
    
    コメントアウトされているのでコメントのコード(<!---->)を削除する
  6. Tomcatを(再)起動する
  7. ブラウザから http://localhost:8080/dep4/servlet/HelloWorld を要求する

$CATALINA_HOME/conf/web.xmlは個々のアプリケーションのデスクリプタのデフォルトの振る舞いを定義します。したがって、ドキュメント・ルート配下の /WEB-INF/web.xml に記述する invoker を、$CATALINA/conf/web.xml に記述しても動作するわけで、全てのウェブ・アプリケーションに適用されることになるわけです。

便利なようですが、セキュリティ問題でコメントアウトされるに至ったことを念頭においてください。Invoker に関するドキュメントは Jakarta で公開されています。



Copyright © 2002 SUGAI, Manabu. All Rights Reserved.