|
基本的なweb.xmlの記述は以下のようになります。
|
例:ServletAPI2.3のweb.xml(赤字はコメントのため実際には記述されていません)
|
| |
|
|
| |
<?xml version="1.0" encoding="Shift_JIS"?>//XML自体の宣言
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application
2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">//このweb.xmlで利用するDTDの宣言
<web-app>
<display-name>シンプルなサンプル</display-name>
<description>
web.xmlの設定のシンプルなサンプル
</description>
<!-- サーブレットのクラス名による呼び出しフィルターの宣言 -->
<filter>//フィルタの宣言
<filter-name>Servlet Mapped Filter</filter-name>//内部での宣言名を記述
<filter-class>filters.ExampleFilter</filter-class>//上記フィルタ宣言名で利用するクラス名
<init-param>//フィルタ内で利用する初期値
<param-name>attribute</param-name>//初期値の名称
<param-value>filters.ExampleFilter.SERVLET_MAPPED</param-value>//初期値の値
</init-param>
</filter>
<filter>
<filter-name>Path Mapped Filter</filter-name>
<filter-class>filters.ExampleFilter</filter-class>
<init-param>
<param-name>attribute</param-name>
<param-value>filters.ExampleFilter.PATH_MAPPED</param-value>
</init-param>
</filter>
<!-- ServletRequestにキャラクタエンコーディングをセットするフィルタの宣言
-->
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>SJIS</param-value>
</init-param>
</filter>
<!-- サーブレットの呼び出しフィルタのURLへのマッピング -->
<filter-mapping>
<filter-name>Servlet Mapped Filter</filter-name>
<servlet-name>invoker</servlet-name>
</filter-mapping>
<filter-mapping>//フィルタのURLへのマッピングの宣言
<filter-name>Path Mapped Filter</filter-name>//マッピングするフィルタ名
<url-pattern>/servlet/*</url-pattern>//マッピングパターン
</filter-mapping>
<!-- キャラクタエンコーディングフィルタの全てのアドレス(/*)へのマッピング -->
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- WEBアプリケーションでのイベントリスナーの宣言 -->
<listener>//リスナーの宣言
<listener-class>listeners.ContextListener</listener-class>//リスナークラス
</listener>
<listener>
<listener-class>listeners.SessionListener</listener-class>
</listener>
<!-- サーブレットの宣言 -->
<servlet>//サーブレットの宣言
<servlet-name>snoop</servlet-name>//サーブレットの宣言名
<servlet-class>SnoopServlet</servlet-class>//上記サーブレットの宣言で利用するクラス名
<init-param>//サーブレット内で利用する初期値
<param-name>foo</param-name>//初期値の名称
<param-value>bar</param-value>//初期値の値
</init-param>
</servlet>
<servlet>
<servlet-name>servletToJsp</servlet-name>
<servlet-class>servletToJsp</servlet-class>
</servlet>
<!-- サーブレットのURLへのマッピング -->
<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
<servlet-mapping>//サーブレットのURLへのマッピングの宣言
<servlet-name>snoop</servlet-name>//マッピングするクラス名
<url-pattern>/snoop</url-pattern>//マッピングパターン
</servlet-mapping>
<servlet-mapping>
<servlet-name>servletToJsp</servlet-name>
<url-pattern>/servletToJsp</url-pattern>
</servlet-mapping>
<!-- タグライブラリの宣言 -->
<taglib>//タグライブラリの宣言
<taglib-uri>http://jakarta.apache.org/tomcat/debug-taglib</taglib-uri>//タグライブラリのURIの設定
<taglib-location>/WEB-INF/jsp/debug-taglib.tld</taglib-location>//TLDファイルの場所
</taglib>
<taglib>
<taglib-uri>http://jakarta.apache.org/tomcat/examples-taglib</taglib-uri>
<taglib-location>/WEB-INF/jsp/example-taglib.tld</taglib-location>
</taglib>
</web-app>
|
|
| |
|
|
|
なおServletAPI2.2ではfilterとlistenerの宣言は存在しません。重要なのは、まずサーブレット本体を宣言した後に、そのサーブレットのURLのマッピングを指定しているということです。このような実体とURI(もしくはURL)とのマッピングを別々に行う手法は良く見られます。この方法によりURLにより呼び出されるサーブレットを抽象化し、サーブレットクラス変更時のアプリケーションに対する変更を最小限にとどめることができます。またこれらの宣言の順番はDTDで厳密に決められており、宣言する順番を間違うとサーバーが起動しなかったり、コンテキストが初期化されなかったりしますので注意してください。
サンプルアプリケーション(コントローラーとサブコントローラー)sample.zip
|