1. Filter简介
l 第一步: 编写一个类, 去实现 filter 接口:
l 第二步: 去注册, 映射 过滤器的拦截资源的 路径
由于 浏览器过来访问目标资源的时候都是 通过一个具体的 路径来访问的目标数据所以 那么过滤器 对哪些 目标资源的请求进行拦截, 实际上也是通过这个url 路径配置来实现的 .在web.xml文件中配置
l 第三步: 编写 一个 HelloServlet, 输出些数据
l 第四步:去访问
表示 访问 day21_filter 这个工程下的 helloservlet , 那么这时候 首先会执行 filter1的 doFilter方法, 如果这个方法中,
放行了就可以看到 helloServlet输出的数据, 如果没放行, 就看不到.
4. Filter的生命周期
Init方法 ---- filter 初始化方法
DoFilter方法----- filter 的 执行过滤的方法
Destory方法 ----- filter 销毁的方法
5. FilterConfig对象
Filter中封装了 Filter的初始化参数信息的 一个对象. 并且这个 对象 是对某个Filter 独占.的每个filter 都会有一个与之 对应的FilterConfig对象. 初始化参数信息可以通过 在web.xml文件中 . Filter 元素中配置.
那么这些 信息就只能在 filter1 对应的那个 FilterConfig中获得
在 filter 的init方法中, 接收 了一个参数 叫做 FilterConfig对象. 你就可以直接调用其 api 来获得参数信息.
6. Filter案例
案例一:解决全站的相应乱码问题
问题描述:
由于经常在访问servlet的时候, 要输出中文, 要解决乱码:Response.setContextType(“text/html;charset=utf-8”);
所以我们在Filter中对项目进行了相应乱码的设置。
解决方案:
新建一个EncodingFitler类,实现了doFilter方法。
EncodingFitler的web.xml配置如下:
案例二 解决全站的一些同类型的页面的禁止缓存问题.
问题描述:在开发过程中, jsp 页面中的数据一般也是实时性要求比较高的. 那么通常会 针对jsp 告诉浏览器不要缓存数据
要使得浏览器禁止缓存,需要三个头信息:
Cache-control: no-cache
Pragma: no-cache
Expires: 时间值 ------ setDateHeader();
解决方案:
新建NoCacheFilter类,实现doFilter方法
在web.xml的配置如下:
实现了对所有JSP页面的禁止缓存。
案例三 是某个类型数据可以缓存
问题描述:
对于实际开发过程中, 长时间不会改变的数据, 或者永远都不会变的数据, 那么就要告诉浏览器要缓存.
需要设置头信息:
Cache-control: "max-age" "=" delta-seconds -------------- max-age=3600 ------- 一个 小时
Expires: System.currentTimeMillis()+ 1000*60*60L
这两个头的 值,都是用于设置 缓存多长时间, 如上的内容表示 . 都是缓存 1 个小时
解决方案:
新建CacheFilter类,实现doFilter方法:
在web.xml的配置如下: