20070721 下午——servlet 过滤器 Filter
Filter 技术是 servlet 2.3 新增加的功能.servlet2.3 是 sun 公司与 2000 年 10 月发布的,它的开发
者包括许多个人和公司团体,充分体现了 sun 公司所倡导的代码开放性原则.由于众多的参与
者的共同努力,servlet2.3 比以往功能都强大了许多,而且性能也有了大幅提高.
它新增加的功能包括:
1. 应用程序生命周期事件控制;
2. 新的国际化;
3. 澄清了类的装载规则;
4. 新的错误及安全属性;
5. 不赞成使用 HttpUtils 类;
6. 各种有用的方法;
7. 阐明并扩展了几个 servlet DTD;
8. filter 功能.
其中最重要的就是 filter 功能.它使用户可以改变一个 request 和修改一个 response。Filter 不
是一个 servlet, 它不能产生一个 response, 它 能够在一 个 request 到达 servlet 之 前预处理
request, 也 可 以 在 离 开 servlet 时 处 理 response. 换 种 说 法 ,filter 其 实 是 一 个 “ servlet
chaining”(servlet 链).一个 filter 包括:
1. 在 servlet 被调用之前截获;
2. 在 servlet 被调用之前检查 servlet request;
3. 根据需要修改 request 头和 request 数据;
4. 根据需要修改 response 头和 response 数据;
5. 在 servlet 被调用之后截获.
你能够配置一个 filter 到一个或多个 servlet;单个 servlet 或 servlet 组能够被多个 filter 使用。
几个实用的 filter 包括:用户辨认 filter,日志 filter,审核 filter,加密 filter,符号 filter,能改变 xml
内容的 XSLT filter 等.
建立一个过滤器涉及下列五个步骤:
1 ) 建 立 一个实现 Filter 接口 的 类 。这 个 类 需要三个 方 法 ,分别是 : doFilter 、 init 和
destroy。doFilter 方法包含主要的过滤代码,init 方法建立设置操作,而 destroy 方法进行清
楚。
2)在 doFilter 方法中放入过滤行为。doFilter 方法的第一个参数为 ServletRequest 对象。此
对象给过滤器提供了对进入的信息(包括表单数据、 cookie 和 HTTP 请求头)的完全访问。
第二个参数为 ServletResponse,通常在简单的过滤器中忽略此参数。最后一个参数为
FilterChain,如下一步所述,此参数用来调用 servlet 或 JSP 页。
3)调用 FilterChain 对象的 doFilter 方法。Filter 接口的 doFilter 方法取一个 FilterChain 对象
作为它的一个参数。在调用此对象的 doFilter 方法时,激活下一个相关的过滤器。如果没
有另一个过滤器与 servlet 或 JSP 页面关联,则 servlet 或 JSP 页面被激活。
4)对相应的 servlet 和 JSP 页面注册过滤器。在部署描述符文件(web.xml)中使用 filter 和
filter-mapping 元素。
5)禁用激活器 servlet。防止用户利用缺省 servlet URL 绕过过滤器设置。