J2EE探索者: 使用Java Servlets 2.4来执行过滤

Servlet 过滤器是可插入的 Web 组件,它允许我们实现 Web 应用程序中的预处理和后 期处理逻辑。过滤器支持 servlet 和 JSP 页面的基本请求处理功能,比如日志记录、性 能、安全、会话处理、XSLT 转换,等等。 过滤器最初是随 Java Servlet 2.3 规范发布 的,最近定稿的 2.4 规范对它进行了重大升级。在这 J2EE 探索者系列文章的最后一篇中 ,我将向您介绍 Servlet 过滤器的基础知识 ―― 比如总体的体系结构设计、实现细节, 以及在 J2EE Web 应用程序中的典型应用,还会涉及一些预计最新的 Servlet 规范将会提 供的扩展功能。

Servlet 过滤器是什么?

Servlet 过滤器是小型的 Web 组件,它们拦截请求和响应,以便查看、提取或以某种 方式操作正在客户机和服务器之间交换的数据。过滤器是通常封装了一些功能的 Web 组件 ,这些功能虽然很重要,但是对于处理客户机请求或发送响应来说不是决定性的。典型的 例子包括记录关于请求和响应的数据、处理安全协议、管理会话属性,等等。过滤器提供 一种面向对象的模块化机制,用以将公共任务封装到可插入的组件中,这些组件通过一个 配置文件来声明,并动态地处理。

Servlet 过滤器中结合了许多元素,从而使得过滤器成为独特、强大和模块化的 Web 组件。也就是说,Servlet 过滤器是:

声明式的:过滤器通过 Web 部署描述符(web.xml)中的 XML 标签来声明。这样允许 添加和删除过滤器,而无需改动任何应用程序代码或 JSP 页面。

动态的:过滤器在运行时由 Servlet 容器调用来拦截和处理请求和响应。

灵活的:过滤器在 Web 处理环境中的应用很广泛,涵盖诸如日志记录和安全等许多最 公共的辅助任务。过滤器还是灵活的,因为它们可用于对来自客户机的直接调用执行预处 理和后期处理,以及处理在防火墙之后的 Web 组件之间调度的请求。最后,可以将过滤器 链接起来以提供必需的功能。

模块化的:通过把应用程序处理逻辑封装到单个类文件中,过滤器从而定义了可容易地 从请求/响应链中添加或删除的模块化单元。

可移植的:与 Java 平台的其他许多方面一样,Servlet 过滤器是跨平台和跨容器可移 植的,从而进一步支持了 Servler 过滤器的模块化和可重用本质。

可重用的:归功于过滤器实现类的模块化设计,以及声明式的过滤器配置方式,过滤器 可以容易地跨越不同的项目和应用程序使用。

透明的:在请求/响应链中包括过滤器,这种设计是为了补充(而不是以任何方式替代 )servlet 或 JSP 页面提供的核心处理。因而,过滤器可以根据需要添加或删除,而不会 破坏 servlet 或 JSP 页面。

所以 Servlet 过滤器是通过一个配置文件来灵活声明的模块化可重用组件。过滤器动 态地处理传入的请求和传出的响应,并且无需修改应用程序代码就可以透明地添加或删除 它们。最后,过滤器独立于任何平台或者 Servlet 容器,从而允许将它们容易地部署到任 何相容的 J2EE 环境中。

在接下来的几小节中,我们将进一步考察 Servlet 过滤器机制的总体设计,以及实现 、配置和部署过滤器所涉及的步骤。我们还将探讨 Servlet 过滤器的一些实际应用,最后 简要考察一下模型-视图-控制器(MVC)体系结构中包含的 Servlet 过滤器,从而结束本 文的讨论。

Servlet 过滤器体系结构

正如其名称所暗示的, Servlet 过滤器用于拦截传入的请求和/或传出的响应,并监视 、修改或以某种方式处理正在通过的数据流。过滤器是自包含、模块化的组件,可以将它 们添加到请求/响应链中,或者在无需影响应用程序中其他 Web 组件的情况下删除它们。 过滤器仅只是改动请求和响应的运行时处理,因而不应该将它们直接嵌入 Web 应用程序框 架,除非是通过 Servlet API 中良好定义的标准接口来实现。

Web 资源可以配置为没有过滤器与之关联(这是默认情况)、与单个过滤器关联(这是 典型情况),甚至是与一个过滤器链相关联。那么过滤器究竟做什么呢? 像 servlet 一 样,它接受请求并响应对象。然后过滤器会检查请求对象,并决定将该请求转发给链中的 下一个组件,或者中止该请求并直接向客户机发回一个响应。如果请求被转发了,它将被 传递给链中的下一个资源(另一个过滤器、servlet 或 JSP 页面)。在这个请求设法通过 过滤器链并被服务器处理之后,一个响应将以相反的顺序通过该链发送回去。这样就给每 个过滤器都提供了根据需要处理响应对象的机会。

当过滤器在 Servlet 2.3 规范中首次引入时,它们只能过滤 Web 客户机和客户机所访 问的指定 Web 资源之间的内容。如果该资源然后将请求调度给其他 Web 资源,那就不能 向幕后委托的任何请求应用过滤器。2.4 规范消除了这个限制。Servlet 过滤器现在可以 应用于 J2EE Web 环境中存在请求和响应对象的任何地方。因此,Servlet 过滤器可以应 用在客户机和 servlet 之间、servlet 和 servlet 或 JSP 页面之间,以及所包括的每个 JSP 页面之间。这才是我所称的强大能力和灵活性!

时间: 2024-08-27 19:42:07

J2EE探索者: 使用Java Servlets 2.4来执行过滤的相关文章

J2EE 探索者:使用 Java Servlets 2.4 来执行过滤

j2ee|servlet|执行 Servlet API 很久以前就已成为企业应用开发的基石,而 Servlet 过滤器则是对 J2EE 家族的相对较新的补充.在 J2EE 探索者 系列文章的最后一篇中,作者 Kyle Gabhart 将向您介绍 Servlet 过滤器体系结构,定义过滤器的许多应用,并指导您完成典型过滤器实现的三个步骤.他还会透露 bean 的一些激动人心的变化,预计刚发布的 Java Servlet 2.4 规范会引入这些变化.Servlet 过滤器是可插入的 Web 组件,它

J2EE 探索者:用五个容易的步骤实现 JSP 自定义标记

j2ee|js JSP 自定义标记为在动态 Web 页中将表示与业务逻辑分离提供了一种标准化的机制,使页面设计者可以将注意力放到表示上,而应用程序开发人员编写后端的代码.在 J2EE 探索者 的这篇文章中,具有企业观念的开发者 Kyle Gabhart 介绍了 JSP 自定义标记的基本知识,并引导您完成将它们加入到 JSP 页面的五步过程.您可能听说现在有上百种不同的方式,但是在开发 Web 应用程序时将表示逻辑与业务逻辑分离是很重要的.近年来,Java 平台已经发展为在体系结构层次上加入了这种

J2EE探索者:用JMS进行企业消息传递[Z]

j2ee 在本期的J2EE探索者( J2EE pathfinder)中,Java 开发者和咨询顾问Kyle Gabhart 解释了为什么消息服务对于企业的体系结构来说是至关重要的,您的解决方案必须克服什么类型的障碍,以及 除了Java消息服务(Java Message Service ,JMS)之外,还有哪些替代的解决方案.在本文的结尾,他分析了三种可用的解决方案(简单JMS客户机(Simple JMS Client).结合JMS使用的会话bean, 以及消息驱动bean),并且提供了一些特定的

J2EE探索者:隐式对象的多种用法

j2ee|对象 接着上月对会话作用域的介绍,企业 Java 专家 Kyle Gabhart 深入研究了 JSP 隐式对象的多种用法.接下来,他将介绍 9 个隐式对象,解释每个对象的用途(或者多种用途),最后给出一些怎样在 JSP 编程中使用这些便利工具的最佳实践.您可以到我们的 讨论论坛 中分享您对这篇文章或者 J2EE 探索者 系列中的任何其他文章的想法. 本期的 J2EE探索者 是上个月的 正确处理会话作用域入门 的续篇.除了访问会话作用域之外,JSP 隐式对象还可以用来处理 HTML 参数

J2EE探索者: 用JMS进行企业消息传递

说到对消息传递解决方案的选择,您可以像配手套那样找到适合于企业的解决方案.您 的消息传递框架必须能够在一组应用和企业资源之间进行通信.而且,该消息传递框架必 须快速.可靠地完成这一任务.此外,面对日复一日的骚扰和紧急情况,它必须表现得天 衣无缝. 为了根据您的需求选择适当的消息传递解决方案,首先应该对您企业当前的组成结构以 及将来的发展趋势有一个清醒的认识.此外,如果能够透彻地理解消息传递框架在完成目 标的过程中必须克服的障碍,那么对于解决方案的选择将会很有帮助.最后,您要知道可 选择的范围:有

J2EE探索者: 用五个容易的步骤实现JSP自定义标记

您可能听说现在有上百种不同的方式,但是在开发 Web 应用程序时将表示逻辑与业务 逻辑分离是很重要的.近年来,Java 平台已经发展为在体系结构层次上加入了这种分离. 例如,在 JSP 体系结构中加入 JavaBean 组件使开发人员使用 JSP 标记获得和设置经过 特别编码的 Java 组件上的属性.这些组件或者 JavaBean 再代表表示层执行后端业务处 理. JSP 自定义标记是 JSP/JavaBean 体系结构的产物.像 JavaBean 技术一样,自定义标 记有助于将表示逻辑与业务

J2EE探索者: 隐式对象的多种用法

本期的 J2EE探索者是上个月的 正确处理会话作用域入门 的续篇.除了访问会话作用域之外,JSP 隐式对象还可以用来处理 HTML 参数,转发请求到一个 Web 组件,包括组件的内容.通过 JSP 容器的日志数据.控制输出流,处理异常,等等. 本月,您将学到在 JSP 页面中使用隐式对象.我们首先简要概括 JSP 架构,其中包括了隐式对象.然后,我将介绍每个对象并描述它的核心功能.最后,我们将给出使用每种类型的对象和它提供的容器管理服务的一些最佳实践. 隐式对象简介 JSP 架构背后的理念是提供

多态-java中为什么会自动执行子类重写父类的方法?

问题描述 java中为什么会自动执行子类重写父类的方法? 问题: 1.在main方法中我没有调用paint方法,为什么它会自动被调用? 2.老师说这是多态,可是多态不是需要三个条件实现么?继承,重写方法,父类引用指向子类对象,这里没有第三点啊 代码如下: public class GameFrame extends Frame{ public void launchFrame(){ setSize(500,500); setLocation(100,100); setVisible(true);

java中如何生成可执行的jar文件

java中如何生成可执行的jar文件 最简单的方法就是: jar -cfe Card.jar CardLayoutDemo CardLayoutDemo$1.class CardLayoutDemo$myAct ionListener.class CardLayoutDemo.class myClosingListener.class myPanel.class jar命令为java自带的专用打包工具: c代表生成新的jar包: e代表可执行的类,亦即main方法所在的类.如果该类有所属的包,书