JavaWeb Filter 的执行顺序
2015-12-31 11:09
465 查看
JavaWeb Filter 的执行顺序
AFilter 类:package com.ztesoft.sequence; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; /** * Servlet Filter implementation class AFilter */ @WebFilter("/sequence/test.jsp") public class AFilter implements Filter { public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("1"); chain.doFilter(request, response); System.out.println("2"); } public void init(FilterConfig fConfig) throws ServletException { } }
BFilter 类:
import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; /** * Servlet Filter implementation class BFilter */ @WebFilter("/sequence/test.jsp") public class BFilter implements Filter { public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("3"); chain.doFilter(request, response); System.out.println("4"); } public void init(FilterConfig fConfig) throws ServletException { } }
初始界面:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <a href="../sequence/test.jsp">To Test Page</a> </body> </html>
拦截页面:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h3>This is Test Page</h3> <% System.out.println("5"); %> </body> </html>
运行之后得到的结果为: 1 、 3 、 5 、 4 、 2
原因:
首先,Filter的加载顺序,是由web.xml中配置的<filter-mapping>的顺序有关,越往前的越先执行,进行目标的拦截。若用FIlter类,改写url-pattern,则加载的顺序与Filter的名字有关,类似于字符串比较大小,越小的越先执行。
本例子中,首先执行AFilter,所以先输出 1 ,而后调用chain.doFilter方法,到下一个Filter,而该方法后面的内容类似于断点,需要进行回执行。所以就执行了 3 ,5 。结束后,开始进行回执行,首先回到较近的Filter ,执行 4 ,最后执行 2 。
相关文章推荐
- 一般报java.lang.NullPointerException的原因有以下几种
- java之模块学习-JAVA的IO流
- Eclipse运行的timeout问题
- spring mvc接收JSON格式的参数
- Java EE+axis2搭建webservice服务(一)
- spring 管理hibernate事务
- Java设计模式_创建型_建造模式_机器人的制造
- Java 位运算
- 解决spring的java.lang.IllegalArgumentException异常。
- 安装JDK1.8.0_66的坑
- spring mvc session注解用法
- spring MVC配置详解
- Spring SpEL对类属性的操作
- java深拷贝和浅拷贝
- java环境配置
- 如何在Eclipse下安装SVN插件——subclipse以及安装svn常出现的错误总结
- java forward 和 redirect 的区别
- eclipse不能启动Exception in AdtPlugin.start()
- Eclipse 改动凝视的 date time 日期时间格式,即${date}变量格式
- 扩展SpringMVC以支持绑定JSON格式的请求参数