第13章使用Servlet过滤器和监听器
时间:2026-04-30
时间:2026-04-30
第13章 使用Servlet过滤器和监听器
本章学习目标:
理解过滤器和监听器的执行过程和作用 掌握过滤器和监听器的开发和部署
13.1 Filter在Web开发中的应用
过滤器(Filter)是在Servlet2.3规范中引入的新功能,并 在Servlet2.4规范中得到增强。Servlet过滤器是一种 Web组件,它们拦截请求和响应,以便查看、提取或 以某种方式操作客户机和服务器之间交换的数据。
13.1.1 过滤器概述
对Web应用来说,过滤器就是驻留在服务器端,在源 数据和目的数据间,对Web请求和Web响应的头属性 (Header)和内容体(Body)进行操作的一种特殊Web组件。 如图13-1所示。Web容器 浏览器 请求过滤器
响应
目 标 资 源
在一个Web应用程序中,可以部署多个过滤器,这些 过滤器组成一个过滤器链。过滤器链中的每个过滤器 都有特定的操作,请求和响应在浏览器和目标资源之 间按照部署描述符中声明的过滤器的顺序,在过滤器 之间进行传递。如图13-2所示。Web容器
浏览器
请求
响应
过滤器 1
过滤器 2
过滤器 3
过滤器 4
目 标 资 源
13.1.2 Filter API
与过滤器开发相关的接口和类包含在javax.servlet和 javax.servlet.http包中,主要的接口和类如表13-1所示。接口/类 javax.servlet.Filter接口 说明 过滤器是执行过滤任务的对象,这些任务是针对对某一资源(servlet 或静态内容)的请求或来自某一资源的响应执行的,抑或同时针 对这两者执行。
javax.servlet.FilterConfig接口
servlet 容器使用的过滤器配置对象,该对象在初始化期间将信息传递给过滤器。 FilterChain 是 servlet 容器为开发人员提供的对象,它提供了对某一资源的已过滤请求调用链的视图。过滤器使用 FilterChain 调用链中 的下一个过滤器,如果调用的过滤器是链中的最后一个过滤器,则调用链末尾的资源。
javax.servlet.FilterChain接口
javax.servlet.ServeltRequestWrapper类 extends http://ng.Object implements ServletRequest javax.servlet.ServeltResponseWrapper类 extends http://ng.Object implements ServletResponse javax.servlet.HttpServeltRequestWrapper类 extends ServletRequestWrapper implements HttpServletRequest javax.servlet.HttpServeltResponseWrapper类 extends ServletResponseWrapper implements HttpServletResponse
提供 ServletRequest 接口的便捷实现,希望将请求适配到 Servlet 的开发人员可以子类化该接口。 默认情况下,方法通过包装的请求对象调用。
提供 ServletResponse 接口的便捷实现,希望根据 Servlet 适配响应的开发人员可以子类化该接口。默认情况下,方法通过包装的响应 对象调用。
提供 HttpServletRequest 接口的便捷实现,希望将请求适配到 Servlet 的开发人员可以子类化该接口。此类实现 Wrapper 或 Decorator
模式。 默认情况下,方法通过包装的请求对象调用。 提供 HttpServletResponse 接口的便捷实现,希望根据 Servlet 适配响应的开发人员可以子类化该接口。此类实现 Wrapper 或 Decorator 模式。 默认情况下,方法通过包装的响应对象调用。
13.1.3 Filter接口
所有的过滤器在开发中必须实现javax.servlet.Filter接口, 并且提供一个公开的不带参数的构造方法。接口定义 了init()、doFilter()和destroy()三方法,和Servelt接口类 似,这三个方法分别对应Servlet过滤器生命周期中的 初始化、响应和销毁三个阶段
13.1.4 FilterConfig接口
当容器对Filter对象进行初始化时,容器调用Filter的init 方法,并传入一个实现FilterConfig接口的对象。Filter 可使用该对象获得一些有用的信息。
13.1.5 FilterChain接口
javax.servlet.FilterChain接口由容器实现,容器将其实 例作为参数传入过滤器对象的doFilter()方法中。过滤 器对象使用FilterChain对象调用过滤器链中的下一个过 滤器或者是将调用目标资源。
13.1.7过滤器的部署在创建过滤器之后必须将它添加到部署描述符中,这 样容器才会将过滤器投入到服务中去。 配置工作由两部分组成: 1.声明过滤器
<filter>元素用于在Web应用中声明一个过滤器。<filter>元 素的结构如图13-6所示。
description
display-name
icon filter filter-name description filter-class param-name init-param param-value
2.设置过滤器映射<filter-mapping> <filter-mapping>元素用于指定过滤器关联的URL样式或 者Servlet。<filter-mapping>结构如图13-7所示。filter-name
filter-mapping
url-pattern
or servlet-name
0..4 dispatcher
使用<filter-mapping>元素
使用<servlet-name>元素将过滤器连接到一个servlet中。 使用<url-pattern>将过滤器映射到某个URL模式
使用<url-pattern>将过滤器映射到某个URL模式的方法 会获得更大的灵活性,它能够使开发人员将过滤器应 用于一组servlet、JSP或任何静态资源。
13.1.8 对请求数据进行处理的过滤器【例13-2】使用过滤器校验表单数据 在Web应用,常要求用户注册成功后才能使用。有时 用户在注册时输入不合法。在过滤器中拦截客户端请 求,获得输入的参数数据,对输入的参数数据的合法 性进行校验,将不合法的请求重新定位到一个错误页 面。 第一步:开发3个jsp页面:CheckForm.jsp、 CheckFormSuccess.jsp和CheckFormFail.jsp 第二步:编写过滤器类 :过滤器类的名字为 CheckFormFilter.java, 第三步:在web.xml文件中添 …… 此处隐藏:43字,全部文档内容请下载后查看。喜欢就下载吧 ……