JavaWeb(六)[Filter技术]

1、概述
Filter是对客户端访问资源的过滤,符合条件的放行,不符合条件的不放行,并且可以对request和response进行逻辑处理
Filter可以对web服务器上的web资源(如JSP页面、HTML页面等)进行拦截,当客户端要访问这些资源时,可以通过建立若干个Filter来实现复杂的过滤功能,以实现如访问权限控制,访问日志等功能

2、快速入门
步骤:
1)编写一个过滤器的类实现Filter接口
2)实现接口中尚未实现的方法(着重实现doFilter方法)
3)在web.xml中进行配置

3、Filter对象的生命周期及其相关方法:
Filter对象的生命周期:
    Filter对象何时创建:服务器启动时就创建该filter对象
    Filter对象何时销毁:服务器关闭时filter销毁
Filter对象的相关方法:
    
public void init(FilterConfig filterConfig):Filter对象创建后执行,只执行一次
    public void doFilter(servletRequest,servletResponse,filterChain):Filter执行过滤的核心方法,如果某资源被配置到这个Filter进行过滤的话,那么每次访问这个资源都会执行这个方法。
第一个参数是客户端传来的但还未到达要调用的Servlet的Servlet请求,在该方法中可以被修改;第二个参数是web服务器要返回给客户但还未到达客户端的Servlet响应,在该方法中可以被修改;第三个参数是过滤链,由容器实现并将其实例作为参数传进来,这个参数可以调用doFilter(Servlet请求,Servlet响应)成员方法,为已经经过本doFilter方法体处理后的Servlet请求和Servlet响应放行,即去转而执行过滤链中下一个Filter的doFilter方法(如果接下来过滤链中没有Filter,则去访问要访问的资源)。显然,只要为这个FilterChain对象参数的doFilter方法的调用设置障碍,就能实现“过滤”的功能,因为在任一Filter处被拦截,Servlet请求/响应都不会到达web服务器/客户端。
     public void destroy():Filter的销毁方法,当Filter对象销毁前执行该方法
过滤情形图:

JavaWeb(六)[Filter技术] 

  JavaWeb(六)[Filter技术]

web.xml中的配置:
JavaWeb(六)[Filter技术]
过滤链中某个Filter代码:
JavaWeb(六)[Filter技术]

 

注:Filter过滤链中各个Filter的创建顺序与配置无关
       Filter过滤链中各个Filter的之间的执行顺序与web.xml配置中的<filter-mapping>....</filter-mapping>相关

利用过滤器解决全站中文乱码问题:https://blog.****.net/weixin_43102313/article/details/87974561