14. Servlet2.5 web.xmlの構文変更
web.xmlの構文に改良が施されています。複数のパターンや要素を指定する際の書き方が見直され、まとめて記述することができるようになりました。この結果、記述量を減らし、見た目にもすっきりさせることができるようになっています。
3.1. filter-mappingでのワイルドカード指定
<filter-mapping>の<servlet-name>要素に、ワイルドカード"*"が使えるようになりました。
<filter-mapping> <filter-name>SampleFilter</filter-name> <servlet-name>*</servlet-name> </filter-mapping>
これまではひとつの<filter-mapping>内で指定できる<servlet-name>はひとつだけでしたが、上の例のように記述すると、全てのサーブレットに対してフィルタが適用されることになります。
ただしTomcat6.0.13に関しては不具合があるようで、上のように記述するとコンテナの起動時にIllegalArgumentExceptionが出てしまいます。このことはバグとして既に報告されているようですので、詳細についてはこちらをご覧ください。回避策として、以下のように<servlet-name>を"*"以外にもうひとつ(以上)指定してあげると例外は出なくなり、かつ本来の動作、すなわち全てのサーブレットに対してフィルタが適用されるようになります。
<filter-mapping> <filter-name>SampleFilter</filter-name> <servlet-name>*</servlet-name> <servlet-name>SampleServlet</servlet-name> </filter-mapping>
3.2. url-patternの複数指定
<servlet-mapping>や<filter-mapping>において、複数のパターンのマッピングができるようになりました。これまで、ひとつのサーブレットやフィルタに複数のパターンをマッピングするには、以下のようにパターンの数だけmapping要素を繰り返さなければなりませんでしたが、
<servlet-mapping> <servlet-name>SampleServlet</servlet-name> <url-pattern>/aaa</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>SampleServlet</servlet-name> <url-pattern>/bbb</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>SampleServlet</servlet-name> <url-pattern>/ccc</url-pattern> </servlet-mapping>
今回の改良により、ひとつのmapping要素内で複数のパターンが指定できるようになりました。
<servlet-mapping> <servlet-name>SampleServlet</servlet-name> <url-pattern>/aaa</url-pattern> <url-pattern>/bbb</url-pattern> <url-pattern>/ccc</url-pattern> </servlet-mapping>
また<filter-mapping>においては、<url-pattern>と<servlet-name>をそれぞれ複数指定するなども可能です。
3.3. security-constraintの適用HTTPメソッド
<security-constraint>要素において指定する、アクセスを許すHTTPメソッド(<http-method>要素)は、これまで「GET」「POST」「PUT」「DELETE」「HEAD」「OPTIONS」「TRACE」の7つの標準HTTPメソッドに限られていましたが、今回から標準・拡張を問わず全てのHTTPメソッドに対して適用可能となりました。