过滤器

过滤是 Tomcat 4 的新功能,它是 Servlet 2.3 规范的一部分,并且最终将为所有支持此标准的 J2EE 容器的厂商所采用执行。开发人员将能够用过滤器来实现以前使用不便的或难以实现的功能,这些功能包括:

 •资源访问(Web 页、JSP 页、servlet)的定制身份认证

 •应用程序级的访问资源的审核和记录

•应用程序范围内对资源的加密访问,它建立在定制的加密方案基础上

•对被访问资源的及时转换,包括从 servlet 和 JSP 的动态输出

这个清单当然并没有一一罗列,但它让您初步体验到了过滤所带来的额外价值。

 

在物理结构上,过滤器是 J2EE Web 应用程序中的应用程序级的 Java 代码组件。除了 servlet 和 JSP 页以外,遵循 Servlet 2.3 规范编码的开发人员能将过滤器作为在 Web 应用程序中加入活动行为的机制。与在特定的 URL 上工作的 servlet 和 JSP 页不同,过滤器接入 J2EE 容器的处理管道,并能跨越由 Web 应用程序提供的 URL 子集(或所有 URL)进行工作。



 

图 1 说明了过滤是在哪里配合 J2EE 请求处理的。

 调用链

所有过滤器都服从调用的过滤器链,并通过定义明确的接口得到执行。一个执行过滤器的 Java 类必须执行这一 javax.servlet.Filter 接口。这一接口含有三个过滤器必须执行的方法:

•doFilter(ServletRequest, ServletResponse, FilterChain) :这是一个完成过滤行为的方法。这同样是上游过滤器调用的方法。引入的 FilterChain 对象提供了后续过滤器所要调用的信息。

•init(FilterConfig) :这是一个容器所调用的初始化方法。它保证了在第一次 doFilter() 调用前由容器调用。您能获取在 web.xml 文件中指定的初始化参数。

 •destroy() :容器在破坏过滤器实例前, doFilter() 中的所有活动都被该实例终止后,调用该方法。 嵌套调用在 doFilter() 方法执行中发生。除非您建立一个过滤器明确阻止所有后续处理(通过其它过滤器及资源处理器),否则过滤器一定会在 doFilter 方法中作以下的调用: FilterChain.doFilter(request, response);

安装过滤器:定义与映射

容器通过 Web 应用程序中的配置描述符 web.xml 文件了解过滤器。有两个新的标记与过滤器相关: <filter> 和 <filter-mapping> 。应该指定它们为 web.xml 文件内 <web-app> 标记的子标记。 过滤器定义的元素 <filter> 标记是一个过滤器定义,它必定有一个 <filter- name> 和 <filter-class> 子元素。 <filter-name> 子元素给出了一个与过滤器实例相关的、基于文本的名字。 <filter-class> 指定了由容器载入的实际类。您能随意地包含一个 <init-param> 子元素为过滤器实例提供初始化参数。例如,下面的过滤器定义指定了一个叫做 IE Filter 的过滤器:

 清单 1. 过滤器定义标记

<web-app>
   
   <filter>
        <filter-name>IE Filter</filter-name>
        <filter-class>com.ibm.devworks.filters.IEFilter</filter-class>
   </filter>
 
</web-app>

容器处理 web.xml 文件时,它通常为找到的每个过滤器定义创建一个过滤器实例。这一实例用来服务所有的可用 URL 请求;因此,以线程安全的方式编写过滤器是最为重要的。

 过滤器映射及子元素

<filter-mapping> 标记代表了一个过滤器的映射,指定了过滤器会对其产生作用的 URL 的子集。它必须有一个 <filter-name> 子元素与能找到您希望映射的过滤器的过滤器定义相对应。接下来,您可以使用 <servlet-name> 或 <url-pattern> 子元素来指定映射。 <servlet-name> 指定了一个过滤器应用的 servlet (在 web.xml 文件中的其它地方已定义)。您能使用 <url-pattern> 来指定一个该过滤器应用的 URL 的子集。例如, /* 的样式用来代表该过滤器映射应用于该应用程序用到的每个 URL,而 /dept/humanresources/* 的样式则表明该过滤器映射只应用于人力资源部专有的 URL。 容器使用这些过滤器映射来确定一个特定的过滤器是否应参与某个特定的请求。

清单 2 是为应用程序的所有 URL 定义的应用于 IE Filter 的一个过滤器映射:

 

清单 2. 过滤器映射标记

<filter-mapping>
        <filter-name>IE Filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值