当有多个过滤器的时候,执行顺序很重要,在注解开发中,其执行顺序跟其类名的字符串有关,小的先执行,这里演示,一个是AFilter另一个是BFilter,如果是web.xml配置,那就是配置在上面的先执行
搞清楚了谁先执行,下面看看多个过滤器是怎么执行的,过滤器的执行是先去,把所有路过的过滤器都执行一遍,然后再回来再执行一遍所有的过滤器
package com.zhiying.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter("/*")
public class AFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("过滤器A被执行了");
chain.doFilter(request,response);
System.out.println("过滤器A回来了");
}
}
package com.zhiying.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter("/*")
public class BFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("过滤器B被执行了");
chain.doFilter(request,response);
System.out.println("过滤器B回来了");
}
}
可以看出,是先执行了过滤器A,再执行的过滤器B