5.2.5 Servlet 2.4以降で追加,変更された仕様についての注意事項(web.xml)
Servlet 2.4以降で追加および変更された仕様を持つweb.xmlをアプリケーションサーバ上で使用する場合の注意事項を示します。Servlet 2.4以降の仕様については,該当するServletの仕様書を参照してください。
- 〈この項の構成〉
(1) Servlet 2.4以降の仕様でサポートされないweb.xmlの要素
アプリケーションサーバでは,次に示すServlet 2.4以降の仕様のweb.xmlの要素は定義できません。定義した場合,デプロイ時にエラーになります。
-
message-destination
-
message-destination-ref
-
service-ref
(2) <security-constraint>タグの設定
Servlet 2.4以降の仕様では,web.xmlの<security-constraint>タグに特別な指定をした場合の動作について追記されています。
アプリケーションサーバでは,Webアプリケーションのバージョンに関係なく,次の動作をします。
-
<auth-constraint>タグのサブ要素,<role-name>タグに「*(アスタリスク)」を指定した場合,すべてのロールを許可します。
-
<auth-constraint>タグを指定しない場合,Webコンテナは認証しないでリクエストを許可します。
-
<transport-guarantee>タグを指定しない場合,Webコンテナはどのような接続も受け付けます。
(3) <security-constraint>タグの複数定義
Servlet 2.4以降の仕様では,web.xmlの<security-constraint>タグを複数定義した場合の動作について追記されています。
アプリケーションサーバ上で<security-constraint>タグを複数定義した場合の動作を,Servlet 2.4以降およびServlet 2.3に分けて示します。
- Servlet 2.4以降
-
web.xmlに<security-constraint>タグを複数定義した場合,アクセス制御の対象となる<security-constraint>タグは,Servletの仕様書に記述された規則に従い選択されます。
- Servlet 2.3
-
web.xmlに定義された<security-constraint>タグを,ファイルの上部に記述されたものから順に確認し,リクエストのURI,およびHTTPメソッドとマッチする<security-constraint>タグを使用してアクセス制御します。<http-method>タグを定義していない場合,すべてのHTTPメソッドを対象とします。
(4) <url-pattern>の改行コード
Servlet 2.4以降の仕様では,web.xmlに記述するURLパターンに改行コードを含む場合の動作について追記されています。
アプリケーションサーバでは,Webアプリケーションのバージョンに関係なく,KDJE39304-Wの警告メッセージが出力されます。ただし,エラーにはならないでアプリケーションは開始されます。また,該当するマッピングは無視されます。
なお,web.xmlでこのような動作をするタグは,<servlet-mapping>タグ,<filter-mapping>タグ,<jsp-property-group>タグ,および<web-resource-collection>タグと各タグに含まれるサブクラスの<url-pattern>タグです。
(5) 指定したエラーページが表示されたレスポンスのステータスコード
Servlet 2.4以降の仕様に対応したWebアプリケーションでは,web.xmlによって表示するエラーページを指定した場合でも,エラーが発生した時点のレスポンスのステータスコードがクライアントに送信されます。
また,Servlet 2.2仕様およびServlet 2.3仕様に対応したアプリケーションでは,ステータスコード200がクライアントに送信されます。
(6) Webコンテナ単位でのエラーページのカスタマイズ
Servlet 2.4以降の仕様に対応したアプリケーションでは,web.xmlで指定したエラーページを表示させる場合,エラーページはカスタマイズされません。また,同じステータスコードに対してカスタマイズしたエラーページを指定した場合,Webアプリケーションで問題が発生し,web.xmlで指定したエラーページの出力に失敗したときだけ,カスタマイズが有効となります。
エラーページのカスタマイズについては,マニュアル「アプリケーションサーバ 機能解説 基本・開発編(Webコンテナ)」の「2.18 エラーページのカスタマイズ」を参照してください。
(7) リダイレクトによるエラーページの生成
Servlet 2.4以降の仕様に対応したアプリケーションでは,web.xmlで指定したエラーページが表示されたあとのステータスコードが,エラーページの生成を委任するエラーステータスコードと一致すると,Webサーバによって生成されるエラーページが有効となります。このとき,web.xmlで指定したエラーページの内容はWebサーバに転送されたあとに破棄されます。
web.xmlで指定したエラーページでレスポンスのステータスコードを200に変更することで,web.xmlで指定したエラーページを有効にできます。
(8) フィルタ機能を使用する場合の定義
Servlet 2.4以降の仕様に対応したWebアプリケーションでは,web.xmlの<filter-mapping>タグを定義するとき,サブ要素として<dispatcher>タグを記述することで,リクエストのフォワード時,インクルード時,およびweb.xmlに記述したエラーページへの転送時にフィルタを動作させることができます。
JSPでは,pageディレクティブのerrorPage属性を使用することで,JSPでの例外発生時にエラーページを出力できます。ただし,このときに実行されるリクエストの転送はフォワードです。フィルタを適用する場合に<dispatcher>タグへ必要となる定義は「ERROR」ではなく,「FORWARD」となります。