deployment descriptorについては、Java EE規約、およびそのサブ規約を参照してください。ここでは、注意を要する事項について説明します。
Servlet 2.5ではXMLスキーマベースでの記述は変更となっていませんが、バージョンアップに伴い名前空間が変更されています。
Servlet 2.4のdeployment descriptor(web.xml)の記述形式
<?xml version="1.0" encoding="UTF-8" ?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> ...
Servlet 2.5のdeployment descriptor(web.xml)の記述形式
<?xml version="1.0" encoding="UTF-8" ?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> ...
また、Servlet 2.5で追加となった機能に関係するタグの追加、および既存タグの定義方法に対する改善が行われています。追加および改善の対象となったタグについて、以下に説明します。
<web-app>タグにmetadata-complete属性の追加
「true」を指定した場合、注釈の記述をしていてもWebコンテナは起動時に注釈を解析しません。
「false」を指定またはmetadata-complete属性自体を記述しなかった場合、Webコンテナは起動時に注釈を解析します。
注意
deployment descriptor(web.xml)が「Java(TM) Servlet Specification Version 2.5」以外のバージョンに準拠した形で記述している場合、Webコンテナは注釈を解析しません。
注釈を記述したWebアプリケーションで注釈の解析が行われなかった場合、注釈を記述したフィールドおよびメソッドはWebアプリケーション実行時にServlet 2.5 および JSP 2.1で提供するアノテーション機能を利用することができません。このため、Webアプリケーションは期待した結果を返さないことがあります。
例
注釈の解析を行わない場合
<?xml version="1.0" encoding=」UTF-8」 ?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5"
metadata-complete="true">
...
<url-mapping>タグの複数定義
Servlet 2.4ではdeployment descriptor(web.xml)で定義する<servlet-mapping>タグの下位要素<url-pattern>タグは1つ指定可能でした。これにより1つのサーブレット定義に対して複数のURLを指定するためには、複数のサーブレット・マッピングを記述する必要がありました。
Servlet 2.5ではdeployment descriptor(web.xml)で定義する<servlet-mapping>タグの下位要素<url-pattern>タグを複数指定できるようになりました。これにより1つのサーブレット定義に対して複数のURLを指定するための記述方法が簡潔になりました。
以下に、サーブレット「HelloWorldServlet」に対してURL「/test/one/HelloWorld」と「/test/two/HelloWorld」を設定する例を示します。
例
Servlet 2.4のdeployment descriptor(web.xml)の記述形式
<servlet> <servlet-name>HelloWorld</servlet-name> <class-name>HelloWorld</class-name> </servlet> <servlet-mapping> <servlet-name>HelloWorld</servlet-name> <url-pattern>/test/one/HelloWorld</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>HelloWorld</servlet-name> <url-pattern>/test/two/HelloWorld</url-pattern> </servlet-mapping>
例
Servlet 2.5のdeployment descriptor(web.xml)の記述形式
<servlet> <servlet-name>HelloWorld</servlet-name> <class-name>HelloWorld</class-name> </servlet> <servlet-mapping> <servlet-name>HelloWorld</servlet-name> <url-pattern>/test/one/HelloWorld</url-pattern> <url-pattern>/test/two/HelloWorld</url-pattern> </servlet-mapping>
<servlet-name>タグの複数定義
Servlet 2.4ではdeployment descriptor(web.xml)で定義する<filter-mapping>タグの下位要素<url-pattern>タグおよび<servlet-name>タグは1つ指定可能でした。これにより1つのフィルタ定義を複数のアプリケーションに指定するためには、複数のフィルタマッピングを記述する必要がありました。
Servlet 2.5ではdeployment descriptor(web.xml)で定義する<filter-mapping>タグの下位要素<url-pattern>タグおよび<servlet-name>タグを複数指定できるようになりました。これにより1つのフィルタ定義に対して複数のアプリケーションを指定するための記述方法が簡潔になりました。
以下に、URL「/foo/*」、「/bar/*」およびサーブレット名「SampleServlet」へのリクエストに対してフィルタ処理を行う例を示します。
例
Servlet 2.4のdeployment descriptor(web.xml)の記述形式
<filter> <filter-name>TestFilter</filter-name> <class-name>TestFilter</class-name> </filter> <filter-mapping> <filter-name>TestFilter</filter-name> <url-pattern>/foo/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>TestFilter</filter-name> <servlet-name>SampleServlet</servlet-name> </filter-mapping> <filter-mapping> <filter-name>TestFilter</filter-name> <url-pattern>/bar/*</url-pattern> </filter-mapping>
例
Servlet 2.5のdeployment descriptor(web.xml)の記述形式
<filter> <filter-name>TestFilter</filter-name> <class-name>HelloWorld</class-name> </filter> <filter-mapping> <filter-name>TestFilter</filter-name> <url-pattern>/foo/*</url-pattern> <servlet-name>SampleServlet</servlet-name> <url-pattern>/bar/*</url-pattern> </filter-mapping>
<http-method>タグの拡張
Servlet 2.4ではdeployment descriptor(web.xml)のセキュリティロール設定において、アクセス許可を行うHTTPメソッド名としては、以下が指定可能でした。
GET
POST
PUT
DELETE
HEAD
OPTIONS
TRACE
Servlet 2.5ではアクセス許可を行うHTTPメソッドの指定が「HTTP 1.1 Specification Section 2.2」に準拠して緩和されました。Servlet 2.4のようにメソッド名の制限はなく、「HTTP 1.1 Specification Section 2.2」で規定されている文字を使用して実装したHTTPメソッドに対してもセキュリティロールの設定を行うことができます。
注意
( ) < > @ , ; : " / [ ] ? = { } \ CR LF Spaceを含んだ文字列を指定した場合、配備エラーが発生します。
数字を含んだ文字列を指定しかつ、配備時に「検証」を有効にした場合、配備エラーが発生します。