在Servlet3.0之前我们是在xml文件中配置过滤器的,执行顺序是哪个在前面,就先执行哪个。
在3.0之后新增@WebFilter注解,该方式过滤不用去xml文件中配置就可以使用,但是配置多个Filter时,执行的先后顺序是什么呢?
而且,如果使用xml配置Filter和@WebFilter注解过滤混用的执行顺序又是怎样的呢?
在用了注解方式过滤以后,对这个问题比较好奇,通过其他网站和CSDN查找了一下,很多人都说注解方式是以类名的先后顺序排序的;但是也有部分人说按类名先后顺序并不能成功,顺序捉摸不透。
在翻找了很多文章以后,发现了比较有用的网站,大致意思就是说在servlet3.0之后,我们可以使用注解@WebFilter的方式进行配置过滤器,但是如果对过滤器顺序有严格的要求,则需要在web.xml中定义。
也就是说,如果你对过滤顺序有要求,无论你是通过普通xml配置Filter还是注解过滤,都是需要到web.xml中配置,按照xml中的顺序来定义执行顺序。
代码示例
/*这里是第一个使用了注解配置的过滤器*/
@WebFilter(filterName="filterOne")
public class FilterOne implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("Inside filter one.");
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
}
/*这里是第二个使用了注解配置的过滤器*/
@WebFilter(filterName="filterTwo")
public class FilterTwo implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("Inside filter two.");
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
}
/*这里是web.xml文件*/
<web-app>
<filter-mapping>
<filter-name>filterOne</filter-name>
<url-pattern>/msg/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>filterTwo</filter-name>
<url-pattern>/msg/*</url-pattern>
</filter-mapping>
</web-app>
参考链接:https://www.concretepage.com/java-ee/jsp-servlet/how-to-use-filter-in-servlet-3-with-webfilter-annotation
第一次写文章,如果错误,请大佬们指正,谢谢!