目录
一、过滤器链
继续说说过滤器的执行顺序。
过滤器和拦截器一样都是可以配置多个的,以链式的形式一个一个的执行,所以就会有它的执行顺序。
页面请求----过滤器1、过滤器2......----拦截器1、拦截器2......----控制器(Controller)
二、执行顺序
过滤器的执行顺序和配置顺序有关,如下代码的执行顺序是BwFilter先执行,然后AwFilter。因为BwFilter配置在前面。
<filter-mapping> <filter-name>BwFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>AwFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
三、示例说明
1. 接上篇 如何使用Filter(过滤器一)-CSDN博客https://blog.csdn.net/u011529483/article/details/142059978?spm=1001.2014.3001.5502文章中的项目基础上增加一个过滤器BwFilter.java类:
java
package com.wqbr.showebsite.wfilter;
import javax.servlet.*;
import java.io.IOException;
/**
* @author lv
* @date 2024年9月9日
*
*/
public class BwFilter implements Filter {
@Override
public void init(FilterConfig config) throws ServletException {
System.out.println("BwFilter .... init执行。。。。。。");
}
@Override
public void destroy() {
System.out.println("BwFilter .... destroy销毁。。。。。。");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
System.out.println("BwFilter .... doFilter执行。。。。。。");
chain.doFilter(request, response);
}
}
2. 在web.xml中配置过滤器BwFilter:
XML
<!--配置自定义过滤器-->
<filter>
<filter-name>AwFilter</filter-name>
<filter-class>com.wqbr.showebsite.wfilter.AwFilter</filter-class>
</filter>
<filter>
<filter-name>BwFilter</filter-name>
<filter-class>com.wqbr.showebsite.wfilter.BwFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>BwFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>AwFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3. 启动项目
控制台运行结果如下:BwFilter的doFilter方法先执行,再执行AwFilter的doFilter方法。而<filter-mapping>配置时同样先配置的BwFilter,所以这个BwFilter先执行了doFilter方法。
补充: 由于本示例项目是springmvc项目,且自定义了一个HandlerInterceptorAdapter拦截器。
所以也测试下过滤器Filter和Spring MVC拦截器的执行顺序。我们通过页面请求Controller后,控制台打印如下:
可以看出执行顺序是:Filter先执行、再执行拦截器的preHandle方法、然后执行的Controller方法。关于Spring MVC拦截器的使用可以查看如何使用HandlerInterceptorAdapter拦截器-CSDN博客https://blog.csdn.net/u011529483/article/details/141925173?spm=1001.2014.3001.5502
完!