【转载】JavaWeb开发Servlet过滤器链执行顺序详解
2017-04-25 11:18
976 查看
过滤器链的执行顺序是服务器按照web.xml文件的配置先后顺序执行的,
而过滤器的加载是从后往前的顺序加载的。
先创建一个过滤器类FilterTest:
在创建第二个过滤器类FilterDemo:
在这两个类中定义的静态方法块,构造方法和生命周期的方法。
在web.xml文件中配置过滤器(对同一个URL进行过滤)
最后在index.jsp文件中加入一段输出信息,用于判断请求执行的过程:
当tomcat服务器启动的时候:
是先加载了FilterDemo的静态块然后是构造方法,接着是Filter的初始化方法,最后才加载FilterTest的静态块跟构造方法,初始化方法。
当jsp页面发送请求时:
执行的顺序就是FilterTest的doFilter()的start接着是FilterDemo的doFilter()的start,然后在请求,请求加载完整个页面之后才是FilterDemo的End,最后才是FilterStart的End。
这里的jsp页面只输出了一句index.jsp***,而不是两句的原因是因为jsp是同一个URL已经加载完成了,所以只输出了一句。
当tomcat服务器停止的时候:
首先被销毁的是FilterDemo过滤器,然后在是FilterTest过滤器。
最后我们可以得出结论就是:过滤器的转载顺序是服务器按照we.xml文件中定义的顺序从后往先的顺序转载的,而过滤的顺序就是按照先后顺序过滤的,而销毁也是从后往先销毁的。
而过滤器的加载是从后往前的顺序加载的。
先创建一个过滤器类FilterTest:
public class FilterTest implements Filter{ static{ System.out.println("------------static------------"); } public FilterTest() { System.out.println("***********FilterTest()******"); } @Override public void destroy() { System.out.println("FilterTestDestroy()"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("FilterTestStart---doFilter***"); chain.doFilter(request,response); System.out.println("FilterTestEnd---doFilter***"); } @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("FilterTestInit()"); } }
在创建第二个过滤器类FilterDemo:
public class FilterDemo implements Filter{ static{ System.out.println("------------FilterDemoStatic------------"); } public FilterDemo() { System.out.println("***********FilterDemo()******"); } @Override public void destroy() { System.out.println("FilterDestroy()-------"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("FilterStart------doFilter()------"); chain.doFilter(request, response); System.out.println("FilterEnd--------doFilter()-------"); } @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("FilterInit()"); } }
在这两个类中定义的静态方法块,构造方法和生命周期的方法。
在web.xml文件中配置过滤器(对同一个URL进行过滤)
<filter> <filter-name>FilterTest</filter-name> <filter-class>com.web.filter.FilterTest</filter-class> </filter> <filter-mapping> <filter-name>FilterTest</filter-name> <url-pattern>/index.jsp</url-pattern> </filter-mapping> <filter> <filter-name>FilterDemo</filter-name> <filter-class>com.web.filter.FilterDemo</filter-class> </filter> <filter-mapping> <filter-name>FilterDemo</filter-name> <url-pattern>/index.jsp</url-pattern> </filter-mapping>
最后在index.jsp文件中加入一段输出信息,用于判断请求执行的过程:
System.out.println("index.jsp***");
当tomcat服务器启动的时候:
------------FilterDemoStatic------------ ***********FilterDemo()****** FilterInit() ------------static------------ ***********FilterTest()****** FilterTestInit()
是先加载了FilterDemo的静态块然后是构造方法,接着是Filter的初始化方法,最后才加载FilterTest的静态块跟构造方法,初始化方法。
当jsp页面发送请求时:
FilterTestStart---doFilter*** FilterStart------doFilter()------ index.jsp*** FilterEnd--------doFilter()------- FilterTestEnd---doFilter***
执行的顺序就是FilterTest的doFilter()的start接着是FilterDemo的doFilter()的start,然后在请求,请求加载完整个页面之后才是FilterDemo的End,最后才是FilterStart的End。
这里的jsp页面只输出了一句index.jsp***,而不是两句的原因是因为jsp是同一个URL已经加载完成了,所以只输出了一句。
当tomcat服务器停止的时候:
FilterDestroy()------- FilterTestDestroy()
首先被销毁的是FilterDemo过滤器,然后在是FilterTest过滤器。
最后我们可以得出结论就是:过滤器的转载顺序是服务器按照we.xml文件中定义的顺序从后往先的顺序转载的,而过滤的顺序就是按照先后顺序过滤的,而销毁也是从后往先销毁的。
相关文章推荐
- Javaweb之 servlet 开发详解1
- web项目中的监听器,过滤器以及自定义servlet的执行顺序
- JavaWeb开发之详解Servlet及Servlet容器
- web项目中的监听器,过滤器以及自定义servlet的执行顺序
- Javaweb之 servlet 开发详解1
- web.xml 中的listener、 filter、servlet 加载顺序及其详解(转载)
- web.xml 中的listener、 filter、servlet 加载顺序及其详解(转载)
- javaWeb-servlet的执行流程详解
- 详解Java Web项目启动执行顺序
- Tomcat 与java web 开发技术详解笔记(二)----Servlet
- JAVAWEB开发之HttpServletResponse和HttpServletRequest详解(下)(各种乱码、验证码、重定向和转发)
- JAVAWEB开发之HttpServletResponse和HttpServletRequest详解(上)(各种乱码、验证码、重定向和转发)
- JAVAWEB开发之Servlet和ServletContext详解(5)
- java web 的开发模式和 servlet 的作用域详解
- JAVAWEB开发之HttpServletResponse和HttpServletRequest详解(上)(各种乱码、验证码、重定向和转发)
- JAVA基础(三) web.xml 中的listener、 filter、servlet 加载顺序及其详解
- Java Web开发中,自定义过滤器被执行两次的原因分析及解决办法
- web.xml 中的listener、 filter、servlet 加载顺序及其详解(转载)
- (转载)web.xml 中的listener、 filter、servlet 加载顺序及其详解
- Java EE WEB工程师培训-JDBC+Servlet+JSP整合开发之17.Session