JavaEE Filter生命周期

描述

研究 JavaEE Filter 的生命周期。

题目

使用代码说明 JavaEE Filter 的生命周期。

题目解决思路

  1. 分别在 Filter 的每个时期打印日志。
  2. 在被拦截的 Servlet 打印日志。
  3. 访问 Servlet ,查看所有日志先后顺序,以得出生命周期。

代码具体实现

Servlet 代码:

@WebServlet("/demo01") public class ServletDemo extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("Servlet程序执行..."); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } }

FilterDemo 代码:

@WebFilter("/demo01") public class FilterDemo implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("过滤器初始化..."); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("拦截请求..."); // 向下执行 filterChain.doFilter(servletRequest,servletResponse); } @Override public void destroy() { System.out.println("过滤器销毁..."); } }

服务器启动时,Filter init() 方法运行,如下图:

05_Java Filter生命周期.png

浏览器访问 Servlet,如下图:

06 Java Filter生命周期.png

当浏览器发送请求后,会先触发 Filter 的 doFilter() 方法,再执行 Servlet ,如下图:

07_Java Filter生命周期.png

关闭服务器后,Filter 会执行 destroy() 方法销毁过滤器,如下图:

08_Java Filter生命周期.png

以上案例可以得出当服务器启动后,Filter 会执行初始化方法,然后当浏览器发送请求到服务器后,请求会被 Filter 拦截,然后继续向下运行,当服务器关闭后,Filter 会进行销毁,这就是 Filter 的生命周期。