Servlet中Filter的学习

1. Filter简介

Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。
2. Filter的执行流程
a. 过滤器是在目标资源执行之前 执行过滤的. 
b. 目前资源执行前 会走过滤器, 回来的 时候也会走 过滤器
如图:
3. Filter开发步骤

第一步: 编写一个类, 去实现 filter 接口:

第二步: 去注册, 映射 过滤器的拦截资源的 路径

由于 浏览器过来访问目标资源的时候都是 通过一个具体的 路径来访问的目标数据所以 那么过滤器 对哪些 目标资源的请求进行拦截, 实际上也是通过这个url 路径配置来实现的 .在web.xml文件中配置

第三步: 编写 一个 HelloServlet, 输出些数据

第四步:去访问

表示 访问 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的配置如下:

 

posted @ 2015-10-24 14:24  自相矛盾  阅读(627)  评论(0编辑  收藏  举报