没有合适的资源?快使用搜索试试~ 我知道了~
首页servlet过滤器Filter入门
servlet过滤器Filter入门
需积分: 9 27 浏览量
更新于2023-05-20
评论
收藏 77KB DOC 举报
servlet过滤器Filter入门,Servle过滤器的使用是Servlet中的重要内容,此文档就是针对此内容编写的。
资源详情
资源评论
资源推荐

过滤器 入门
中最重要的一个功能就是能够为 和 页面定义过滤器。
过滤器提供了某些早期服务器所支持的非标准“ 链接”的一种功能强大且
标准的替代品。
过滤器是一个程序,它先于与之相关的 或 页面运行在服务器
上。过滤器可附加到一个或多个 或 页面上,并且可以检查进入这
些资源的请求信息。在这之后,过滤器可以作如下的选择:
以常规的方式调用资源(即,调用 或 页面)。
利用修改过的请求信息调用资源。
调用资源,但在发送响应到客户机前对其进行修改
阻止该资源调用,代之以转到其他的资源,返回一个特定的状态代码或生成
替换输出。
过滤器提供了几个重要好处。
首先,它以一种模块化的或可重用的方式封装公共的行为。你有 个不
同的 或 页面,需要压缩它们的内容以减少下载时间吗?没问题:
构造一个压缩过滤器,然后将它应用到 个资源上即可。
其次,利用它能够将高级访问决策与表现代码相分离。这对于 特别有
价值,其中一般希望将几乎整个页面集中在表现上,而不是集中在业务逻辑
上。例如,希望阻塞来自某些站点的访问而不用修改各页面(这些页面受到访
问限制)吗?没问题:建立一个访问限制过滤器并把它应用到想要限制访问的
页面上即可。
最后,过滤器使你能够对许多不同的资源进行批量性的更改。你有许多现
存资源,这些资源除了公司名要更改外其他的保持不变,能办到么?没问题:
构造一个串替换过滤器,只要合适就使用它。
但要注意,过滤器只在与 规范 版兼容的服务器上有作用。如果
你的 应用需要支持旧版服务器,就不能使用过滤器。
. 建立基本过滤器
建立一个过滤器涉及下列五个步骤:
)建立一个实现 接口的类。这个类需要三个方法,分别是:
、 和 。
方法包含主要的过滤代码(见第 步), 方法建立设置操
作,而 方法进行清楚。

)在 方法中放入过滤行为。 方法的第一个参数为
!"# 对象。此对象给过滤器提供了对进入的信息(包括表单数
据、$% 和 &'' 请求头)的完全访问。第二个参数为
!(,通常在简单的过滤器中忽略此参数。最后一个参数为
)*+,如下一步所述,此参数用来调用 或 页。
)调用 )*+ 对象的 方法。 接口的 方法取一
个 )*+ 对象作为它的一个参数。在调用此对象的 方法时,激
活下一个相关的过滤器。如果没有另一个过滤器与 或 页面关联,
则 或 页面被激活。
)对相应的 和 页面注册过滤器。在部署描述符文件
(,-.)中使用 / 和 /.+((0 元素。
)禁用激活器 。防止用户利用缺省 1!2 绕过过滤器设置。
建立一个实现 接口的类
所有过滤器都必须实现 3++-。这个接口包含三个方法,分
别为 、 和 。
(#$4!"#"#5
!((5
)*+$*+6
*,7-$(587-$(
每当调用一个过滤器(即,每次请求与此过滤器相关的 或 页面)
时,就执行其 方法。正是这个方法包含了大部分过滤逻辑。第一个参
数为与传入请求有关的 !"#。对于简单的过滤器,大多数过滤逻
辑是基于这个对象的。如果处理 &'' 请求,并且需要访问诸如 0&+
或 0)% 等在 !"# 中无法得到的方法,就要把此对象构造
成 &(!"#。
第二个参数为 !(。除了在两个情形下要使用它以外,通常忽
略这个参数。首先,如果希望完全阻塞对相关 或 页面的访问。可
调用 (0 并直接发送一个响应到客户机。其次,如果希望修
改相关的 或 页面的输出,可把响应包含在一个收集所有发送到它
的输出的对象中。然后,在调用 或 页面后,过滤器可检查输出,
如果合适就修改它,之后发送到客户机。
9 的最后一个参数为 )*+ 对象。对此对象调用 以激活
与 或 页面相关的下一个过滤器。如果没有另一个相关的过滤器,
则对 的调用激活 或 本身。

(#$4)/0$/06*,7-$(
方法只在此过滤器第一次初始化时执行,不是每次调用过滤器都执行它。
对于简单的过滤器,可提供此方法的一个空体,但有两个原因需要使用 。
首先,)/0 对象提供对 环境及 ,-. 文件中指派的过滤器
名的访问。因此,普遍的办法是利用 将 )/0 对象存放在一个字段
中,以便 方法能够访问 环境或过滤器名其次,)/0
对象具有一个 0++. 方法,它能够访问部署描述符文件
(,-.)中分配的过滤器初始化参数。
(#$ 46
大多数过滤器简单地为此方法提供一个空体,不过,可利用它来完成诸如
关闭过滤器使用的文件或数据库连接池等清除任务。
将过滤行为放入 方法
方法为大多数过滤器地关键部分。每当调用一个过滤器时,都要
执行 。对于大多数过滤器来说, 执行的步骤是基于传入的信
息的。因此,可能要利用作为 的第一个参数提供的
!"#。这个对象常常构造为 &(!"# 类型,以提供
对该类的更特殊方法的访问。
调用 )*+ 对象的 方法
接口的 方法以一个 )*+ 对象作为它的第三个参数。
在调用该对象的 方法时,激活下一个相关的过滤器。这个过程一般持
续到链中最后一个过滤器为止。在最后一个过滤器调用其 )*+ 对象的
方法时,激活 或页面自身。
但是,链中的任意过滤器都可以通过不调用其 )*+ 的 方法中
断这个过程。在这样的情况下,不再调用 页面的 ,并且中断此调
用过程的过滤器负责将输出提供给客户机。
对适当的 和 页面注册过滤器
部署描述符文件的 版本引入了两个用于过滤器的元素,分别是:/
和 /.+((0。/ 元素向系统注册一个过滤对象,/.+((0 元
素指定该过滤对象所应用的 1!2。
/ 元素
/ 元素位于部署描述符文件(,-.)的前部,所有 /
.+((0、 或 .+((0 元素之前。/ 元素具有如下六个
可能的子元素:
、 $这是一个可选的元素,它声明 97 能够使用的一个图象文件。
、/+.这是一个必需的元素,它给过滤器分配一个选定的名字。

、(+ +.这是一个可选的元素,它给出 97 使用的短名称。
、 $(这也是一个可选的元素,它给出 97 的信息,提供文本文
档。
、 /$+这是一个必需的元素,它指定过滤器实现类的完全限定名。
:、 (++.这是一个可选的元素,它定义可利用 )/0 的
0++. 方法读取的初始化参数。单个过滤器元素可包含多个
(++. 元素。
请注意,过滤是在 规范 版中初次引入的。因此,,-. 文件必
须使用 9'9 的 版本。下面介绍一个简单的例子:
;<-.=>>$0=>8?><@
;A98)'B7,+((1C2)
>DD#E$ .5$DD9'9(($+DD7F>
>*(DD3++#$.DD,+((GG>@
;,+((@
;/@
;/+.@E ;D/+.@
;/$+@. +$%+0)+;D/$+@
;D/@
;A@
;/.+((0@;D/.+((0@
;D,+((@
/.+((0 元素
/.+((0 元素位于 ,-. 文件中 / 元素之后 元素之
前。它包含如下三个可能的子元素:
、 /+.这个必需的元素必须与用 / 元素声明时给予过滤器的名
称相匹配。
、 #(+此元素声明一个以斜杠(D)开始的模式,它指定过滤器应
用的 1!2。所有 /.+((0 元素中必须提供 #(+ 或
+.。但不能对单个 /.+((0 元素提供多个 #(+ 元素项。如
果希望过滤器适用于多个模式,可重复整个 /.+((0 元素。
、 +.此元素给出一个名称,此名称必须与利用 元素给
予 或 页面的名称相匹配。不能给单个 /.+((0 元素提供多
个 +. 元素项。如果希望过滤器适合于多个 名,可重复这
个 /.+((0 元素。
下面举一个例子:
;<-.=>>$0=>8?><@
剩余15页未读,继续阅读
















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0