Filter

一:什么是Filter(过滤器)?

  客户端访问Servlet时,过滤器可以将请求拦截下来,完成一些特殊的操作,然后再将请求放行给Servlet

  Filter一般完成一些通用的操作,如登录验证、统一编码处理、敏感字符过滤等等

 

二:具体操作

  Filter其实就是实现了Filter接口的class。其中会实现三个方法,init()、doFilter()和destory()。一般过滤代码都写在doFilter()里

  拦截器完成工作需要手动放行,否则请求不会进入Servlet里

  Filter使用前要给它设置拦截路径,设置拦截方式有2种。(1)注解  (2)在web.xml里配置

  以注解方式为例:

    

 

三:拦截路径的几种分类

  1. 具体资源路径: /index.jsp 只有访问index.jsp资源时,过滤器才会被执行

  2. 拦截目录: /user/* 访问/user下的所有资源时,过滤器都会被执行

  3. 后缀名拦截: *.jsp或 *.do *.xxx等 访问所有后缀名为jsp资源时,过滤器都会被执行
  4. 拦截所有资源:/* 访问所有资源时,过滤器都会被执行

 

四:Filter的执行流程

  1. 当客户端请求资源后,遇到匹配的Filter,则会被拦截(执行doFilter()方法)

  2. 当过滤器执行FilterChain的doFilter()方法后则会放行

  3. 当客户端请求资源请功能后,服务器会响应客户端,还是会经过刚才的过滤器,但是回来经过过滤器的时候则只会执行放行之后的代码

  4. 一般情况下,在请求时被过滤器拦截的代码都是设置请求消息(request)在服务器响应客户端是被过滤器拦截的代码是设置响应消息(response)

 

五:Filter的生命周期

  1. init:在服务器启动后,会创建Filter对象,然后调用init方法。只执行一次。用于加载资源

  2. doFilter:每一次请求被拦截资源时,会执行。执行多次

  3. destroy:在服务器关闭后,Filter对象被销毁。如果服务器是正常关闭,则会执行destroy方法。只执行一次。用于释放资源

  Filter的生命周期跟Servlet比较类似

 

六:Filter拦截配置(可以设置在什么情况下进行拦截)

  1. REQUEST:默认值。浏览器直接请求资源
  2. FORWARD:转发访问资源
  3. INCLUDE:包含访问资源
  4. ERROR:错误跳转资源
  5. ASYNC:异步访问资源

  在注解中配置:

  

  如果要设置多种情况需要以数组的形式配置

 

七:过滤器链

  是可以使用多个拦截器拦截相同路径的,那么,多个拦截器的执行顺序呢?

  注解形式:以类名的首字母比较,值小的先执行。如果一样的话比较第二个字母,以此类推,如果类目完全一样就比较包名

  web.xml里谁在上边谁先执行

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

posted @ 2020-02-10 16:30  拔丝小红薯  阅读(310)  评论(0编辑  收藏  举报