Filter的介绍

生命周期


 

Filter的介绍
生命周期

过滤器要重写3个方法

  • init(FilterConfig filterConfig):启动项目的时候执行
  • doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain):资源拦截的时候执行
  • destroy():正常关闭项目的时候执行

来看下面例子,准备2个过滤器,都拦截所有的路径

过滤器demo2代码 

package com.lingaolu.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

/**
 * @author 林高禄
 * @create 2020-08-04-9:42
 */
@WebFilter("/*")    
public class Demo2 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("demo2过滤器初始化了......");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("demo2过滤器进来了......");
        filterChain.doFilter(servletRequest,servletResponse);
        System.out.println("demo2过滤回来了......");
    }

    @Override
    public void destroy() {
        System.out.println("demo2过滤器摧毁了......");
    }
}

过滤器demo3代码 

 

package com.lingaolu.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

/**
 * @author 林高禄
 * @create 2020-08-04-9:42
 */
@WebFilter("/*")
public class Demo3 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("demo3过滤器初始化了......");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("demo3过滤器进来了......");
        filterChain.doFilter(servletRequest,servletResponse);
        System.out.println("demo3过滤回来了......");
    }

    @Override
    public void destroy() {
        System.out.println("demo3过滤器摧毁了......");
    }
}

 

index.jsp代码 ,里面学了一句输出语句

Filter的生命周期详解
Filter的介绍_生命周期

 启动项目,执行了init方法,且每个过滤器的init都只执行一次

Filter的生命周期详解
Filter的介绍_生命周期_02

 访问index.jsp,每次访问都执行,并且先执行的过滤器,最后回来,有点先进后出的感觉

Filter的生命周期详解
Filter的介绍_生命周期_03

正常关闭项目,每个过滤器的destrpy方法都只执行一次

Filter的生命周期详解
Filter的介绍_生命周期_04

Filter的生命周期详解
Filter的介绍_生命周期_05