过滤器 Filter

过滤器是一个服务器端的组件,它可以截取用户端的请求与相应信息,并对这些信息过滤。

工作原理

过滤器 Filter_第1张图片
过滤器的工作原理

生命周期

过滤器 Filter_第2张图片
过滤器的生命周期
  • init() 过滤器的初始化方法,Web容器创建过滤器实例后将调用这个方法。这个方法中可以读取web.xml文件中过滤器的参数。
  • doFilter() 完成实际的过滤操作。过滤器的核心方法。当用户请求访问与过滤器关联的URL时,Web容器将先调用过滤器的doFilter方法。FilterChain参数可以调用chain.doFilter方法,将请求传给下一个过滤器(或目标资源),或利用转发、重定向将请求转发到其他资源。
  • destroy() web容器在销毁过滤器实例前调用该方法。在这个方法中可以释放过滤器占用的资源。(大多数情况用不到)

配置

注解 @WebFilter

过滤器注解(实用注解则不需要配置xml)

//过滤所有页面
@WebFilter(filterName = "Filter",urlPatterns = "/*")    
//过滤所有页面的error
@WebFilter(filterName = "ErrorFilter",urlPatterns = "/error.jsp",dispatcherTypes = DispatcherType.ERROR)
过滤器 Filter_第3张图片
@WebFilter常用属性

拓展:Servlet3.0过滤器

【实例】

@WebFilter(filterName = "AsynFilter",value = {"/error.jsp"},dispatcherTypes = {DispatcherType.REQUEST,DispatcherType.ASYNC})

Servlet异步支持实现实例

xml配置

过滤器 Filter_第4张图片
过滤器web.xml配置

【实例】

@WebFilter(filterName = "Filter",urlPatterns = "/*")
public class Filter implements javax.servlet.Filter {
    public void destroy() {
        System.out.println("destroy.......................................");
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        System.out.println("start-----------------------------------doFilter");
        chain.doFilter(req, resp);
        System.out.println("end-------------------------------------doFilter");
    }

    public void init(FilterConfig config) throws ServletException {
        System.out.println("init--------------------------------------------filter");
    }

}

过滤器链

服务器会按照web.xml中过滤器定义的先后顺序组装成一条链

过滤器 Filter_第5张图片
过滤器链执行过程

注解filter执行顺序:根据filter类名的字母顺序确定

xml配置filter执行顺序:通过每个filter-mapping在web.xml中出现的先后顺序来确定

过滤器分类

过滤器 Filter_第6张图片
过滤器分类

错误页面引导


    404
    /error.jsp

过滤器应用场景

  • 对用户请求进行统一认证
  • 编码转换
  • 对用户发送的数据进行过滤替换
  • 转换图像格式
  • 对响应的内容进行压缩
  • 对数据进行加密解密

【过滤器登录校验案例】登录案例,慕课网视频
【过滤器编码转换案例】编码转换案例,慕课网视频

你可能感兴趣的:(过滤器 Filter)