快速业务通道

Tomcat的过滤诀窍 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23

Tomcat的过滤诀窍

时间:2010-12-13 IBM Sing Li

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

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

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

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

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

这个清单当然并没有一一罗列,但它让您初步体验到了过滤所带来的额外价 值。在本文中,我们将详细讨论 Servlet 2.3 的过滤,来看一看过滤器是如何 配合 J2EE 处理模型的。不像其它传统的过滤方案,Servlet 2.3过滤是建立在 嵌套调用的基础上的。我们来研究一下这一差别是怎样在架构上与新的高性能 Tomcat 4 设计取得一致的。最后,我们将获得一些编写及测试两个 Servlet 2.3过滤器的实际经验。这些过滤器只完成很简单的功能,使我们得以将注意力 集中于编写过滤器以及如何将它们集成进 Web 应用程序的机制。

作为 Web 应用程序构建模块的过滤器

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

图 1.过滤器与 J2EE 请求处理

Tomcat的过滤诀窍(2)

时间:2010-12-13 IBM Sing Li

兼容 Servlet 2.3 的容器允许过滤器在请求被处理(通过 Servlet 引擎) 以前以及请求得到处理 以后(过滤器将可以访问响应)访问 Web 请求。

在这些情况下,过滤器可以:

在请求得到处理以前修改请求的标题

提供它自己的请求版本以供处理

在请求处理以后和被传回给用户以前修改响应

先取得由容器进行的所有请求处理,并产生自己的响应

比过滤器的可用性更为重要的是,接入 J2EE 处理管道需要创建不可移植的 、容器专用的和系统范围的扩展机制(如 Tomcat 3 拦截器)。

概念上的 Tomcat过滤

不同于在 Apache、IIS 或 Netscape 服务器中能找到的熟悉的过滤机制, Servlet 2.3过滤器并非建立在挂钩式函数调用上。事实上, Tomcat 4 级别的 引擎架构脱离了传统的 Tomcat 3.x 版本。新的 Tomcat 4 引擎取代了在请求处 理的不同阶段调用挂钩式方法的整体式引擎,它在内部使用了一系列的嵌套调用、包装请求及响应。不同的过滤器和资源处理器构成了一个链。

在传统架构中:

每次接受到请求,挂钩式方法就被调用,不论它们是否执行(有时甚至是空 的)。

方法的作用域及并发关系(每个方法可能在不同的线程上被调用)不允许在 处理相同的请求时简单、高效地共享不同挂钩式方法调用间的变量和信息。

在新架构中:

嵌套的方法调用通过一系列过滤器实现,它仅有应用于当前请求的过滤器组 成;基于挂钩式调用的传统执行方式需要在处理短句中调用挂钩式例程,即使一 个特定短句的处理逻辑不起任何作用。

局部变量在实际的过滤方法返回之前都作保留,并且可用(因为上游过滤器 的调用总在堆栈上,等待后续调用的返回)。

这一新架构为今后的 Tomcat 性能调整与优化提供了一个新的、更 对象友好 的基础。Servlet 2.3过滤器是这个新的内部架构的自然扩展。该架构为 Web 应用程序设计人员提供了一个可移植的执行过滤行为的方法。

调用链

所有过滤器都服从调用的过滤器链,并通过定义明确的接口得到执行。一个 执行过

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号