ページの先頭行へ戻る
Interstage Application Server/Interstage Web Server Java EE運用ガイド

4.2.1 deployment descriptor(web.xml)に関する注意事項

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メソッド名としては、以下が指定可能でした。

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を含んだ文字列を指定した場合、配備エラーが発生します。

  • 数字を含んだ文字列を指定しかつ、配備時に「検証」を有効にした場合、配備エラーが発生します。