gpt4 book ai didi

servlets - 如何在 WAR 中使用注释定义 servlet 过滤器的执行顺序

转载 作者:行者123 更新时间:2023-12-02 10:05:27 25 4
gpt4 key购买 nike

如果我们在 WAR 自己的 web.xml 中定义 webapp 特定的 servlet 过滤器,那么过滤器的执行顺序将与它们在 web 中定义的顺序相同。 .xml.

但是,如果我们使用@WebFilter注解来定义这些过滤器,过滤器的执行顺序是怎样的,以及我们如何确定执行顺序?

最佳答案

您确实不能使用 @WebFilter 定义过滤器执行顺序注解。但是,要最小化web.xml用法,只需使用 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 {}

但你仍然应该保留<url-pattern>web.xml ,因为它是 XSD 所必需的,尽管它可以为空:

<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern />
</filter-mapping>
<filter-mapping>
<filter-name>filter2</filter-name>
<url-pattern />
</filter-mapping>

无论采用哪种方法,在 Tomcat 7.0.28 版本之前,这一切都会失败,因为它会因 <filter-mapping> 的存在而阻塞。没有<filter> 。另请参阅Using Tomcat, @WebFilter doesn't work with <filter-mapping> inside web.xml

关于servlets - 如何在 WAR 中使用注释定义 servlet 过滤器的执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6560969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com