多个过滤器的执行顺序
一个目标资源可以指定多个过滤器,过滤器的执行顺序是在web.xml文件中的部署顺序。
我们演示一下:
我们建立两个filter:
AFilter:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("filter start...这里是AFilter");
chain.doFilter(request, response);
}
BFilter:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("filter start...这里是BFilter");
chain.doFilter(request, response);
}
web.xml中进行的配置,我们把AFilter放在上面,BFilter放在下面:
<filter>
<display-name>Afilter</display-name>
<filter-name>Afilter</filter-name>
<filter-class>com.veeja.web.filter.Afilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Afilter</filter-name>
<url-pattern>/index.jsp</url-pattern>
</filter-mapping>
<filter>
<display-name>BFilter</display-name>
<filter-name>BFilter</filter-name>
<filter-class>com.veeja.web.filter.BFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>BFilter</filter-name>
<url-pattern>/index.jsp</url-pattern>
</filter-mapping>
我们现在访问一下index.jsp,看一下过滤器执行的顺序是怎么样的:
我们可以看到,先访问的是AFilter,再访问的是BFilter。
接下来我们变更一下Filter的顺序,我们把BFilter的filter-mapping放在AFilter的上面:
我们现在访问一下index.jsp,看一下过滤器执行的顺序:
我们可以看到,这次先执行的是BFilter,后执行的是AFliter。
也就是说,过滤器的执行顺序,取决于过滤器在xml中的部署顺序,而且仅仅取决于xml中filter-mapping的顺序。
以上就是全部内容,谢谢你的阅读。
如有纰漏,请不吝指出,不胜感激。
如果你不沉下心来认真练习,所有的阅读都是白费的。