首页 > 其他 > 详细

Servlet中Filter的学习

时间:2015-10-24 15:37:04      阅读:287      评论:0      收藏:0      [点我收藏+]

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的配置如下:

技术分享

 

Servlet中Filter的学习

原文:http://www.cnblogs.com/xumaodun/p/4906793.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!