WAR 独自の で webapp 固有のサーブレット フィルタを定義するweb.xml
と、フィルタの実行順序は、 で定義されている順序と同じになりweb.xml
ます。
しかし、アノテーションを使用してこれらのフィルターを定義する場合、@WebFilter
フィルターの実行順序はどのようなもので、実行順序はどのように決定できるのでしょうか?
WAR 独自の で webapp 固有のサーブレット フィルタを定義するweb.xml
と、フィルタの実行順序は、 で定義されている順序と同じになりweb.xml
ます。
しかし、アノテーションを使用してこれらのフィルターを定義する場合、@WebFilter
フィルターの実行順序はどのようなもので、実行順序はどのように決定できるのでしょうか?
実際、@WebFilter
アノテーションを使用してフィルターの実行順序を定義することはできません。ただし、web.xml
使用量を最小限に抑えるには、すべてのフィルターに a だけで注釈を付けて、定義がfilterName
不要になるようにするだけで十分ですが、必要な順序で定義を行うだけです。<filter>
<filter-mapping>
例えば、
@WebFilter(filterName="filter1")
public class Filter1 implements Filter {}
@WebFilter(filterName="filter2")
public class Filter2 implements Filter {}
これだけでweb.xml
:
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern>/url1/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>filter2</filter-name>
<url-pattern>/url2/*</url-pattern>
</filter-mapping>
URL パターンを に保持したい場合は、次の@WebFilter
ようにできます。
@WebFilter(filterName="filter1", urlPatterns="/url1/*")
public class Filter1 implements Filter {}
@WebFilter(filterName="filter2", urlPatterns="/url2/*")
public class Filter2 implements Filter {}
ただし、空にすることもできますが、XSD に従って必要であるため、 <url-pattern>
inを保持する必要があります。web.xml
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern />
</filter-mapping>
<filter-mapping>
<filter-name>filter2</filter-name>
<url-pattern />
</filter-mapping>
<filter-mapping>
アプローチに関係なく、Tomcat ではバージョン 7.0.28 までこれはすべて失敗します<filter>
。Tomcat を使用すると、@WebFilter が web.xml 内の <filter-mapping> で機能しないも参照してください。
サーブレット 3.0 仕様は、コンテナーがアノテーションを介して宣言されたフィルターをどのように順序付けるべきかについてのヒントを提供していないようです。ただし、web.xml ファイルでの宣言を使用してフィルターを順序付けする方法については明らかです。
安心してください。相互依存関係を持つ web.xml ファイル順序フィルターを使用します。web.xml ファイルを使用する必要性を最小限に抑えるために、フィルタをすべての順序に依存しないようにしてください。