サーブレットプログラムを実行する

サーブレットの場合には、あらかじめJavaのソースファイルをコンパイルしておく必要があり、コンパイル済みのファイルを「WEB-INF/」サブディレクトリの下の「classes/」ディレクトリ下に置くという手順が必要だ。

 まずはJavaのソースファイルを用意しよう。ここでは、リスト2に示す「hello.java」ファイルを利用する。このファイルは、どのディレクトリ下に置いても構わない。

リスト2■hello.javaファイル

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
public class hello extends HttpServlet
{
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
// サーブレットのクライアントからの要求に応答する部分
// ContentTypeを設定する
response.setContentType("text/html");
// 出力用のPrintWriterオブジェクトを得る
PrintWriter out = response.getWriter();
// 出力する
out.println("<HTML>");
out.println("<BODY>");
int i;
for (i = 1; i <= 6; i++)
{
out.print("<H");
out.print(i);
out.print(">Hello Servlet</H");
out.print(i);
out.println(">");
}
out.println("</BODY>");
out.println("</HTML>");
}
}


次に、リスト2のプログラムをコンパイルする手順だ。コンパイルするためには、J2SE SDKに含まれるJavaコンパイラ「javac」コマンドを使えばよい。

しかしリスト2では、サーブレットのためのクラスをインポート利用しているため、サーブレットのクラスの場所を「CLASSPATH」環境変数に設定しておかなければコンパイルに失敗してしまう。

Tomcatでは、サーブレット用のクラスが「/var/tomcat4/common/lib/servlet.jar」ファイルとして 提供されている。そこで、コンパイルする前に次のように「CLASSPATH」環境変数を設定すればよい。

$ export CLASSPATH=$CLASSPATH:/var/tomcat4/common/lib/servlet.jar

TIPS
上記は、シェルがbashの場合である。cshの場合には、setenvコマンドを用いて、「setenv CLASSPATH $CLASSPATH:/var/tomcat4/common/lib/servlet.jar」のように指定する

次に、リスト2のソースファイルを置いたディレクトリをカレントディレクトリにして、「javac」コマンドを使いコンパイルをしてみよう。

$ /usr/java/j2sdk1.4.0_01/bin/javac hello.java

無事コンパイルが完了すると、 カレントディレクトリに「hello.class」と付けられたclassファイルが作成されているはずだ。 このファイルがサーブレットとして動作するコンパイルされたclassファイルとなる。このファイルを、 先に用意しておいた「sample/」ディレクトリの「WEB-INF/classes/」ディレクトリ下に置く。手順は次の通りだ。

# mkdir /var/tomcat4/webapps/sample/WEB-INF
# mkdir /var/tomcat4/webapps/sample/WEB-INF/classes
# cp hello.class /var/tomcat4/webapps/sample/WEB-INF/classes

次に、配置したclassファイルをTomcatに読み込ませるため、Tomcatデーモンを再起動させる。

# /etc/rc.d/init.d/tomcat4 restart

以上で設定は完了だ。配置したサーブレットへは、次のURLでアクセスができる。

http://[サーバ名またはIPアドレス]/sample/servlet/hello

TIPS URLには、クラス名のみを記述するが、.classの拡張子は指定しない。リスト2の例であれば、 classファイルのファイル名は、hello.classであるが、URLには上記のようにhelloとだけ指定すればよい。

実行結果は、先に示したJSPの例とほぼ同じく、画像4のようになる。

画像4■リスト2の実行結果

このように、Tomcatでは配置したサーブレットは、「http://[サーバ名またはIPアドレス]:8080/パス名/servlet/クラス名」というURLでアクセスができる。

TIPSパス名は、server.xmlファイルのContextエレメントのpathアトリビュートに指定した名称だ。

TIPS標準では、サーブレットのパス先は「/パス名/servlet/クラス名」というURLになるが、ここでの「servlet」という部分は、web.xmlファイルを編集することで任意に変更することができる。

リスト1とリスト2を比較すると分かるように、サーブレットであるリスト2でクライアントに出力する場合、逐一PrintWriterオブジェクトのprintメソッドやprintlnメソッドを使わなければならない。このため、HTMLタグ出力には手間が必要となりプログラムも見づらくなる。第1回目の冒頭にて、サーブレットではユーザーインタフェースを提供せず、JSPに任せたほうがよい、とコメントしたのはこのような理由からだ。

「Administration Tool」を使い「server.xml」ファイルを編集する

ここまでの説明のように、Tomcatでは「server.xml」ファイルを編集することでコンテキストを作成し、Webアプリケーションを設定するという手順になる。server.xmlファイルはXML形式のファイルであり、Tomcatのドキュメントにはその設定書式が記載されている。

TIPS
「server.xml」ファイルはTomcatに依存するが、「web.xml」ファイルはJ2EEで仕様化されている。「web.xml」ファイルの詳細については、http://java.sun.com/products/servlet/download.htmlからダウンロード可能な「Java Servlet Specification」を参照するとよい。

しかし、開発されたアプリケーションを配置するたびに「server.xml」ファイルを編集するのは面倒だろう。そこでTomcat 4.1では、WebブラウザからTomcatの設定編集が可能なツール「Administration Tool」が用意されている。