- 1.1. サーブレットの特徴
- 1.2. 簡単なサーブレットクラス
- 1.3. サーブレットの設定
- 1.4. コンテナの設定
1.3. サーブレットの設定
ここからはサンプルプログラムをTomcat4で実行させる方法について説明します。サーブレットは、コンテナに認識されなければ実行することができません。
まずウェブアプリケーションは以下のようなディレクトリ構造をしている必要があります。
{webapp} | 認識させたいウェブアプリケーションのトップディレクトリ |
{webapp}/WEB-INF/web.xml | ウェブアプリケーションの設定ファイル |
{webapp}/WEB-INF/classes | コンパイル済みのサーブレットクラスを置くディレクトリ |
{webapp}/WEB-INF/lib | ウェブアプリケーションが使用しているクラスライブラリ(JARファイル)を置くディレクトリ |
したがって/home/tomcat/sampleにウェブアプリケーションを置きたい場合は、
/home/tomcat/sample/WEB-INF/web.xml /home/tomcat/sample/WEB-INF/classes /home/tomcat/sample/WEB-INF/lib
というディレクトリ構成になります。次に設定ファイルを編集します。サーブレットの設定ファイルは全て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>Hello</servlet-name> <servlet-class>HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Hello</servlet-name> <url-pattern>/hi</url-pattern> </servlet-mapping> </web-app>
<web-app>タグで囲まれた部分に実行したいサーブレットを記述します。<servlet>タグはサーブレットとクラスの関係を表し、<servlet-mapping>タグはサーブレットとURLの関係を表します。この2つが組み合わさって、サーブレットが実行されるURLが決定されます。複数サーブレットの設定がある場合は、サーブレットの数だけ<servlet>タグを設定し、その後に必要な数だけ<servlet-mapping>を設定します。1つのサーブレットに対して、複数の<servlet-mapping>を設定しても構いません。
まず<servlet>タグについて説明します。<servlet-name>でサーブレットの名前を、<servlet-class>で実際のサーブレットクラスを指定します。サーブレットの名前は、<servlet-mapping>との紐付けのために利用されます。また<servlet-class>に指定するクラス名は完全修飾名でなければなりません。
続いて<servlet-mapping>について説明します。<servlet-name>でサーブレットの名前を、<url-pattern>で対応するURLを指定します。サーブレットの名前は、<servlet>タグで設定されているものでなければなりません。また<url-pattern>に記述できる書式は以下の通りです。
/??? | 正確にURLが合致した場合にサーブレットが起動します。 |
/???/* | /???/で始まる全てのURLでアクセスがあった場合に、サーブレットが起動します。 例:「/resource/*」と指定した場合は、「resource」で始まる全てのURLにマッチします。 |
*.??? | ???を拡張子にもつ全てのURLでアクセスがあった場合に、サーブレットが起動します。 例:「*.cgi」と指定した場合は、「cgi」を拡張子に持つURL全てにマッチします。 |
/ | 適応するものが無かった場合に実行される、デフォルトサーブレットを示します。 |
先の例の場合には、「.../hi」というURLでアクセスしてきた時、HelloServletが起動されます。以下の設定をした場合には、「.../hello/123」というURLや「.../hello.hi」というURLでアクセスしてきた場合にも、SampleServletが起動されます。
... <servlet-mapping> <servlet-name>Hello</servlet-name> <url-pattern>/hello/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Hello</servlet-name> <url-pattern>*.hi</url-pattern> </servlet-mapping> ...
(実習課題2)
実習課題1で作成したサーブレットプログラムの設定を行いなさい。
- /clockではじまるURL、またはclockという拡張子でアクセスされてきた場合に、サーブレットが起動するようにする事。