Revised: 25th/Nov./2002
サーバ・サイドで動作するJavaアプリケーションをウェブ・アプリケーションと呼びます。その基本はサーブレットです。TomcatのようなJavaアプリケーション・サーバがサーブレットを認識して実行できるようにすることを配備(deploy)と呼びます。ここでは、Tomcat 4.1.12にサーブレットを配備する手順を紹介します。
尚、本節では標準的な手法を詳しく見ていきますが、次節では本節で照会する手順を含め、4種類の配備手順をチュートリアル式に紹介しています。
Tomcat にウェブ・アプリケーションを配備する標準的な手順は次の4ステップになる。
次項から各々について見ていき、最後に動作確認することにする。
Tomcat は Sun Microsystems の Servlet 仕様、JSP 仕様の reference implementation です。すなわち、Tomcat に準拠する製品が Servlet/JSP サポートを謳えるのです。逆に言うと、Tomcat 上で動作するアプリケーションは Servlet/JSP 仕様に準拠している必要があります。Servlet 仕様には、コーディングの規格だけでなく、それをアプリケーション・サーバで稼動させるためのディレクトリ構成も決められています。ウェブ・アプリケーションは特定のディレクトリ階層を持っていなければならないのです。Tomcat から公開されている Tomcat 4.1 の文書を元に次のようなディレクトリ構成になります。
*.html
, *.jsp
, etc. - (X)HTML、 CSS、画像、JavaScript、JSPなどの、クライアントから見えるコンテンツは、ドキュメント・ルート直下に置く。HTTP サーバの場合と同様、任意のサブ・ディレクトリを作っても良い。/WEB-INF/web.xml
- デプロイメント・デスクリプタ (DD: Deployment Descriptor)。サーブレットなどのコンポーネントの構成ファイル。利用可能なサーブレットのリスト、初期化パラメタ、セキュリティ設定、クライアントからのアクセス・パス(URLパターン)など、当該ウェブ・アプリケーションの設定を行う。/WEB-INF/classes/
- このディレクトリ配下に、当該ウェブ・アプリケーションに属する Java のクラス・ファイル、利用するリソースを格納する。パッケージ化している場合は、このディレクトリ配下に対応するサブ・ディレクトリ階層を作ることになる。com.mycompany.mypackage.MyServlet
ならば、ドキュメント・ルート配下の /WEB-INF/classes/com/mycompany/mypackage/MyServlet.class
となる。/WEB-INF/lib/
- JAR (Java ARchive) ファイルを格納する。JDBC ドライバやサードパーティ提供のパッケージは、専らここに格納することになるだろう。ドキュメント・ルートはどこに作ってもかまいません。例えば、 C:\java\DocRoot などのように作り、その配下に上記のディレクトリ構造を作ります。特に、/WEB-INF と /WEB-INF/classes は最初に作っておいたほうが良いでしょう。
![]() |
図:C:\java\DocRoot\WEB-INF\classes |
クライアントがサーブレットにアクセスできるように、デプロイメント・デスクリプタ web.xml を作成/編集します。次は、サーブレット HelloWorld.class
が /WEB-INF/classes/HellWorld.class
に存在する場合の例です。次のソースコードをテキスト・エディタで作成してください。場所はドキュメントルート配下の /WEB-INF/web.xml
です。
![]() |
図:C:\java\DocRoot\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>/servlet/Wellcome</url-pattern> <!-- 任意のアクセス・パス --> </servlet-mapping> </web-app>
「任意のアクセス・パス」としたのは、クライアントがブラウザから URL を要求するときのパスになります。このドキュメント・ルートが /webAppl に設定されるとすれば、サーブレット HelloWorld を要求する URL は次のようになるのです。
http://localhost:8080/webAppl/servlet/Wellcome
Tomcat が上で作ったドキュメント・ルートを認識できるように、構成ファイル server.xml を編集します。
Tomcat のインストール・ディレクトリを $CATASLINA_HOME と表記することにします。Windows + Tomcat 4.1.12 の場合、デフォルトのインストール・ディレクトリは C:\Program Files\Apache Group\Tomcat 4.1 になります。他のディレクトリにインストールした場合は $CATALINA_HOME を適宜読み替えてください。
server.xml は $CATASLINA_HOME/conf/server.xml
にあります。このファイルをテキスト・エディタで編集します。
![]() |
図:C:\Program Files\Apache Group\Tomcat 4.1\conf\server.xml |
Tomcat 4.2.12 の場合、264 行目に次のコードが存在します。
<!-- Tomcat Root Context --> <!-- <Context path="" docBase="ROOT" debug="0"/> -->
この行の次の行に、新規に追加したいドキュメント・ルートを認識させるコードを挿入します。Tomcat 4.1.12 では 268 行目になります。改行、半角スペースは任意ですが、大文字と小文字は区別されるので、厳密に記述してください。次の例は、C:\java\DocRoot
に作成したドキュメント・ルートに対して、ブラウザから http://localhost:8080/webAppl でアクセスできるようにする場合の例です。ここで、 /webAppl をコンテキスト・ルートと呼びます。
<!-- My Context Root: C:\java\DocRoot as /webAppl --> <Context path="/webAppl" docBase="C:/java/DocRoot" debug="0" reloadable="true" crossContext="true" />
動作を確認するために、上で作ってきたドキュメント・ルートに、次のコードを持つ index.html を置いて表示させて見ましょう。
<?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" > <head> <meta http-equiv="content-type" content="text/html; charset=shift_jis" /> <title>Hello, World!</title> </head> <body> <h1>Hello, World!</h1> <p>ウェブ・アプリケーションの世界へようこそ!これはサンプル・ドキュメントです。</p> </body> </html>
保存時に文字コードが選べれば Shift_JIS を選択してください。
Tomcat を起動し、ブラウザで表示させてみます。Tomcat 起動済みの場合でも、server.xml, web.xml の変更を反映させるためには、再開始が必要です。
"Start Tomcat" アイコンから起動すると、次のようなコマンド・プロンプトが開きます。
![]() |
図:Start Tomcat の実行結果 |
ブラウザから次の URL を要求してください。実際には、アドレス欄に以下の URL を入力して enter キーを押してください。
http://localhost:8080/webAppl/index.html
無事に HTML 文書が表示されれば成功です。ドキュメントルート配下にサブディレクトリを自由に作って動作を確認してください。例えば、ドキュメントルート配下の /subDir/myDoc.html へのアクセスは "http://localhost:8080/webAppl/subDir/myDoc.html" になります。ここに webAppl は server.xml で設定したコンテキスト・ルートです。
次に WEB-INF/classes に次のコードを持つ HelloWorld.java を作成し、コンパイル/実行してみましょう。
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(); } }
次のコードは、 Windows のコマンド・プロンプトでの、上記の HelloWorld.java のコンパイルです。
C:\>cd java\DocRoot\WEB-INF\classes C:\java\DocRoot\WEB-INF\classes>javac -classpath "C:\Program Files\Apache Group\ Tomcat 4.1\common\lib\servlet.jar" HelloWorld.java C:\java\DocRoot\WEB-INF\classes>
-classpath フラグの引数 "C:\Program Files\Apache Group\Tomcat 4.1\common\lib\servlet.jar" は、Tomcat と共に導入された server.jar への絶対パスです。インストール・ディレクトリを $CATALINA_HOME と書けば、"$CATALINA_HOME\common\lib\servlet.jar" になります。これはOSの環境変数 CLASSPATH にセットしておけば不要な部分となります。
設定の変更を反映するために、Tomcat を再起動します。
これで設定が反映されました。次の画像は、ブラウザから http://localhost:8080/webAppl/servlet/Wellcome
を要求したときの実行結果です。
![]() |
図:HelloWorld の実行結果 |