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代码 ,里面学了一句输出语句
启动项目,执行了init方法,且每个过滤器的init都只执行一次
访问index.jsp,每次访问都执行,并且先执行的过滤器,最后回来,有点先进后出的感觉
正常关闭项目,每个过滤器的destrpy方法都只执行一次