Filter过滤器
Filter?
- 它是JavaWeb的三大组件之一。(Servlet程序、Listener监听器、Filter过滤器)
- JavaEE的规范,也就是接口
- 作用就是:拦截请求,过滤响应
- 常用拦截请求:权限检查,日志操作,事物管理…
使用步骤?
- 编写一个类去实现filter接口
- 实现过滤方法dofilter()
- 到web.xml中去配置filter拦截路径
生命周期,包含的几个方法?
- 构造器方法
- init初始化方法
第1,2步,在web工程启动的时候执行(filter已经创建) - doFilter过滤方法
第3步,每次拦截请求就会执行 - destory销毁
第4步,停止web工程的时候,就会执行(停止web工程,也会销毁filter过滤器)
FilterConfig类?
- 是filter过滤器的配置文件类。
- tomcat每次创建filter的时候,也会同时创建一个FilterConfig类,这里包含了Filter配置文件的配置信息。
- FilterConfig类的作用是获取filter过滤器的配置内容
a. 获取filter的名称filter-name的内容
b. 获取在web.xml中配置的init-parm初始化参数
c. 获取servlletContext对象
FilterChain 过滤器链,FilterChain 就是过滤器链(多个过滤器如何一起工作)
- FilterChain.doFilter()方法的作用
a、执行下一个Filter过滤器(如果有Filter)
b、执行目标资源(没有Filter)
在多个Filter过滤器执行的时候,它们执行的优先顺序是由他们在web.xml中从上到下配置的顺序决定 - 多个Filter过滤器执行的特点:
a、所有filter和目标资源默认都执行在同一个线程中
b、多个Filter共同执行的时候,它们都使用同一个Request对象。
Filter的拦截路径
- 精确匹配
- 目录匹配
- 后缀名匹配
filter过滤器只关心请求的地址是否匹配,不关心请求的资源是否存在!
ThreadLocal的使用
作用就是可以解决多线程的数据安全问题。
可以给当前线程关联一个数据(可以是变量、对象、数组、集合)
特点:
a. 可以为当前线程关联一个数据(它可以像map一样存储数据,key为当前线程)
b. 每一个ThreadLocal对象,只能为当前线程关联一个数据,如果要为当前线程关联多个数据,就需要使用多个ThreadLocal对象实例。
c. 每个ThreadLocal对象实例定义的时候,一般都是static类型。
d. ThreadLocal中保存数据,在线程销毁后,会由jvm虚拟自动释放