Filter,ThreadLocal

Filter过滤器的作用

作用:拦截请求,过滤响应
拦截请求常见的应用场景:1、权限检查 ;2、日志操作;3、事务管理 ……

Filter过滤器的使用

1.编写一个类去实现Filter接口
2.实现过滤 方法doFilter()
3.到web.xml中配置Filter的拦截路径

1
2
3
4
5
6
7
8
9
10
11
12
13
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpSession session = req.getSession();
Object user = session.getAttribute("user");
if(user==null){
request.getRequestDispatcher("/login.jsp").forward(request,response);
return;
}else{
// 让程序继续向下访问用户的目标资源
chain.doFilter(request,response);
}
}
1
2
3
4
5
6
7
8
9
10
 <filter>
<filter-name>AdminFilter</filter-name>
<filter-class>filter.AdminFilter</filter-class>
</filter>
<!-- 配置拦截路径 -->
<filter-mapping>
<filter-name>AdminFilter</filter-name>
<url-pattern>/admin/*</url-pattern>
</filter-mapping>
</web-app>

Filter的生命周期

Filter生命周期包含的方法:
Web工程启动时就创建了:1、构造器方法;2、init 初始化方法
每次拦截到请求就开始执行:3、doFilter 过滤方法
Web工程停止时:4、destory 销毁方法

FilterConfig类

包含了Filter过滤器的配置信息
FilterConfig类的作用是获取filter过滤器的配置信息:
1、获取Filter的名称filter-name的内容
2、获取Filter中配置的init-param的初始化参数
3、获取ServletContext对象

FilterChain过滤器链

Filter的拦截路径

1、精确匹配,拦截的是指定路径的一个资源,请求地址必须是 : http://ip:port/工程路径/a.jsp

1
2
3
4
<filter-mapping>
<filter-name>AdminFilter</filter-name>
<url-pattern>/admin/a.jsp</url-pattern>
</filter-mapping>

2、目录匹配,拦截的是目录下的所有资源

1
2
3
4
<filter-mapping>
<filter-name>AdminFilter</filter-name>
<url-pattern>/admin/*</url-pattern>
</filter-mapping>

3、后缀名匹配,拦截的是指定后缀名的资源

1
2
3
4
<filter-mapping>
<filter-name>AdminFilter</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>

Filter只关心请求地址是否匹配,不关心资源是否存在。

ThreadLocal的使用

作用:解决线程安全问题。
ThreadLocal可以给当前线程关联一个数据(普通变量,对象,数组,集合)。
ThreadLocald 特点:
1、ThreadLocal可以为当前线程关联一个数据;(可以像Map一样存取数据,key为当前线程);
2、每一个ThreadLoacl对象,只能为当前线程关联一个数据;
3、每个ThreadLocal对象实例化时,一般都是static类型;
4、ThreadLocal中保存的数据,在线程销毁后,JVM自动释放。