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里谁在上边谁先执行