过滤器

来源:互联网 发布:完美解码mac版 编辑:程序博客网 时间:2024/04/30 05:01

Filter

Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter。通过Filter技术,开发人员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截,如下所示:

一个filter 包括: 

  1、 在servlet被调用之前截获; 

  2、 在servlet被调用之前检查servlet request;      如统一的编码转换

  3、 根据需要修改request头和request数据;         装饰、或者动态代理实现

  4、 根据需要修改response头和response数据; 

        5、 在servlet被调用之后截获。


过滤器的生命周期

过滤器的生命周期:(一定要实现javax.servlet包的Filter接口的三个方法init()、doFilter()、destroy(),空实现也行) 
(1)、启动服务器时加载过滤器的实例,并调用init()方法来初始化实例; 
(2)、每一次请求时都只调用方法doFilter()进行处理; 
(3)、停止服务器时调用destroy()方法,销毁实例。 

禁止缓存所有动态页面的过滤器

a) 有 3 个 HTTP 响应头字段都可以禁止浏览器缓存当前页面,它们在 Servlet 中的示例代码如下:

l response.setDateHeader("Expires",-1);

l response.setHeader("Cache-Control","no-cache"); 

l response.setHeader("Pragma","no-cache"); 

b) 并不是所有的浏览器都能完全支持上面的三个响应头,因此最好是同时使用上面的三个响应头。

c) Expires数据头:值为GMT时间值,为-1指浏览器不要缓存页面

d) Cache-Control响应头有两个常用值: 

l no-cache指浏览器不要缓存当前页面。

l max-age:xxx指浏览器缓存页面xxx秒