178

WAR 独自の で webapp 固有のサーブレット フィルタを定義するweb.xmlと、フィルタの実行順序は、 で定義されている順序と同じになりweb.xmlます。

しかし、アノテーションを使用してこれらのフィルターを定義する場合、@WebFilterフィルターの実行順序はどのようなもので、実行順序はどのように決定できるのでしょうか?

4

3 に答える 3

197

実際、@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> で機能しないも参照してください。

于 2011-07-03T08:13:57.820 に答える
13

サーブレット 3.0 仕様は、コンテナーがアノテーションを介して宣言されたフィルターをどのように順序付けるべきかについてのヒントを提供していないようです。ただし、web.xml ファイルでの宣言を使用してフィルターを順序付けする方法については明らかです。

安心してください。相互依存関係を持つ web.xml ファイル順序フィルターを使用します。web.xml ファイルを使用する必要性を最小限に抑えるために、フィルタをすべての順序に依存しないようにしてください。

于 2011-07-03T04:27:27.480 に答える