过滤器Filter

一、概念

1. 过滤器: 用户在访问某个资源之前或之后,对访问的请求或响应进行拦截,从而做一些处理

处理分为:

a. 控制是否允许访问  --eg:用户登录之后才能访问自己的订单

b. 在访问资源之前或之后做一些处理 , ---eg:全站乱码解决 

2. 一个过滤器可以拦截多个资源 ; 一个资源也可以配置多个过滤器进行拦截 ;

二、开发过滤器

1. 开发过滤器的步骤

(1)写一个类实现Filter接口,并实现其中的方法doFilter()

(2)在web应用的web.xml中配置过滤器所要拦截的资源路径

FilterDemo1

com.tedu.filter.FilterDemo1

FilterDemo1

ServletDemo1

ServletDemo2

三、过滤器的方法

1.init()   

public void init(FilterConfig arg0)

-- 当Filter实例创建之后,服务器立即调用init方法  进行初始化的操作

2. doFilter()

1)-- 当过滤器拦截到    对资源的访问时服务器会调用doFilter方法进行处理

public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)

      throws IOException,ServletException .

2) 参数 FilterChain chain

参数FilterChain代表多个过滤器组成的过滤器链对象

(1)一个资源可以配置多个过滤器进行拦截多个过滤器执行的顺序是按照Filter在web.xml中对应的filter-mapping标签的先后配置顺序执行的.多个过滤器就组成了一条过滤器链.

(2)当过滤器拦截到对资源的访问时,如果处理之后放行过滤器,即调用FilterChain中的doFilter方法来放行过滤器. 接着才可以执行后面的资源

(3)如果后面仍然是过滤器,则也需要在过滤器的doFilter方法中调用FilterChain.doFilter方法才可以放行过滤器,执行后面的资源.

(4)如果后面没有过滤器,则访问对应的资源. 也就是说当所有的过滤器都调用了FilterChain的doFilter方法时,才可以放行所有的过滤器,才可以访问到对应的资源.

3) destory()

-- 在Filter实例销毁之前,执行destroy方法进行善后的处理

public void destroy()

四、过滤器的生命周期(了解)

  1. 当服务器启动时,web应用加载后立即创建出当前web应用中的所有的Filter对象  
  2. 创建出来后,立即调用init方法进行初始化出操作.
  3.  从此以后这个Filter对象一直驻留在内存为后续所拦截的请求服务,
  4. 每次过滤到对资源的访问时,都会执行doFilter这个方法进行拦截处理
  5. 直到服务器关闭或者web应用移出容器为止,随着web应用的销毁,过滤器也跟着销毁,在销毁之前会调用destroy方法执行善后的处理.

你可能感兴趣的:(后端)