ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:22.37KB ,
资源ID:2843667      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/2843667.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Servlet过滤器.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Servlet过滤器.docx

1、Servlet过滤器Servlet过滤器 一、什么是Servlet过滤器过滤器是在数据交互之间过滤数据的中间组件,独立于任何平台或者 Servlet 容器。Servlet过滤器可以应用在客户机和 servlet 之间、servlet 和 servlet 或 JSP 页面之间,以及所包括的每个 JSP 页面之间。二、实现一个 Servlet 过滤器 Servlet过滤器 API 包含javax.servlet包中的 3 个接口,分别是 Filter 、 FilterChain 和 FilterConfig 。 实现一个 Servlet 过滤器的确要经历三个步骤。 1、编写 Servlet 过滤器

2、实现类。 2、配置 Servlet 过滤器。把该过滤器添加到 Web 应用程序中(通过在 Web 部署描述符 /web.xml 中声明它); 3、部署 Servlet 过滤器。把过滤器与应用程序一起打包并部署它; Servlet容器对部署描述符中声明的每一个过滤器,只创建一个实例(或实例池)。 与Servlet类似,容器将在同一个过滤器实例上运行多个线程来同时为多个请求服务,因此,开发过滤器时,也要注意线程安全的问题。 三、编写过滤器实现类 1、Filter接口:所有的Servlet过滤器类都必须实现javax.servlet.Filter接口 a、init(FilterConfig): 这是

3、Servlet过滤器的初始化方法,Servlet容器创建Servlet过滤器实例后将调用这个方法。在这个方法中可以读取web.xml文件中Servlet过滤器的初始化参数。 b、doFilter(ServletRequest,ServletResponse,FilterChain): 这个方法完成实际的过滤操作,当客户请求访问于过滤器关联的URL时,Servlet容器将先调用过滤器的doFilter方法。FilterChain参数用于访问后续过滤器。 c、destroy(): Servlet容器在销毁过滤器实例前调用该方法,这个方法中可以释放Servlet过滤器占用的资源。 2、过滤器实现类创

4、建步骤(过滤器实现类生命周期): a实现javax.servlet.Filter接口。 b初始化:实现init方法,读取过滤器的初始化参数。 c过滤:实现doFilter方法,完成对请求或响应的过滤。 d转发或阻塞:调用FilterChain接口对象的doFilter方法,向后续的过滤器传递请求或响应。 e析构:destroy方法销毁过滤器,释放过滤器占用的资源。四、配置 Servlet 过滤器(在web.xml中配置) 过滤器通过 web.xml 文件中的两个 XML 标签来声明: 1、<filter> : 定义过滤器的名称,并且声明过滤器实现类和 init() 参数。 <

5、filter-name> : 指定过滤器的名字; <filter-class> : 指定过滤器类的类名,包括类的路径; <init-param> : 为过滤器实例提供初始化参数,可以有多个; 2、<filter-mapping> : 将过滤器与 servlet 或 URL 模式相关联。 <filter-name> : 指定过滤器的名字,与<filter>中的子元素<filter-name>相对应; <url-pattern> : 指定和过滤器关联的URL,为”/*”表示所有URL; 3、<filte

6、r-mapping>元素还可以包含0到4个<dispatcher>,指定过滤器对应的请求方式, 可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默认REQUEST. REQUEST 当用户直接访问页面时,Web容器将会调用过滤器。如果目标资源是通过RequestDispatcher的include()或forward()方法访问时,那么该过滤器就不会被调用。 INCLUDE 如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用。 FORWARD 如果目标资源是通过Reque

7、stDispatcher的forward()方法访问时,那么该过滤器将被调用,除此之外,该过滤器不会被调用。 ERROR 如果目标资源是通过声明式异常处理机制调用时,那么该过滤器将被调用。除此之外,过滤器不会被调用。 在web.xml中配置Servlet和Servlet过滤器,应该先声明过滤器元素,再声明Servlet元素。 两个或更多个过滤器应用到同一个资源,按照它们在配置文件中显示的先后次序调用它们。 例子1:单个过滤器配置:容器将其应用于所有接收的请求 <filter> <filter-name>FilterName</filter-name> <

8、;filter-class></filter-class> </filter> <filter-mapping> <filter-name>FilterName</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 例子2:过滤器应用到特定目录或资源(文件)的配置:此容器只有在接收到对 /mydocs 目录中的资源的请求时才会应用该过滤器。 <filter> <filter-name>FilterNa

9、me</filter-name> <filter-class>packageName.FilterName</filter-class> </filter> <filter-mapping> <filter-name>FilterName</filter-name> <url-pattern>/mydocs/*</url-pattern> </filter-mapping> 例子3:定义一个过滤器链:两个或更多个过滤器应用到同一个资源,按照它们在配置文件中显示的先后次序调用它

10、们。 <filter> <filter-name>FilterOne</filter-name> <filter-class>packageName.FilterOne</filter-class> </filter> <filter-mapping> <filter-name>FilterOne</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> &

11、lt;filter-name>FilterTwo</filter-name> <filter-class>packageName.FilterTwo</filter-class> </filter> <filter-mapping> <filter-name>FilterTwo</filter-name> <url-pattern>/mydocs/*</url-pattern> </filter-mapping> 五、部署 Servlet 过滤器 只需把过滤器类和其他

12、Web 组件类包括在一起,把 web.xml 文件(连同过滤器定义和过滤器映射声明)放进 Web 应用程序结构中,servlet 容器将处理之后的其他所有事情。六、Servlet 过滤器实现注意事项 1由于Filter、FilterConfig、FilterChain都是位于javax.servlet包下,并非HTTP包所特有的, 所以ServletRequest、ServletResponse在使用前都必须先转换成HttpServletRequest、HttpServletResponse再进行下一步操作。 2在web.xml中配置Servlet和Servlet过滤器,应该先声明过滤器元素,

13、再声明Servlet元素。 3如果要在Servlet中观察过滤器生成的日志,应该确保在server.xml的localhost对应的<host>元素中配置如下<logger>元素: <Logger className = “org.apache.catalina.logger.FileLogger” directory = “logs”prefix = “localhost_log.”suffix=”.txt” timestamp = “true”/>七、过滤器的实现方式 过滤器实现方式在不保证功能前提下,从性能角度考虑有如下先后顺序:Decorator或P

14、roxy模式;AOP拦截器。 1,标准Servlet控制器 包装了请求和响应对象。 web容器来充当过滤管理器(FilterManager)和过滤链(FilterChain)来管理和协调过滤器。 问题:功能覆盖范围上,也是一个scope,如果功能需求要为某个类的方法实现实现过滤,使用一个Servlet Filter这样过滤器实现。 但是它对所有的Servlet请求都进行过滤,这无疑范了杀鸡取卵的错误,会造成系统性能上的损失。 2,使用Decorator模式来定制过滤器 如果过滤器是业务逻辑的一部分,而且在设计时,我们可以确定这些过滤器,进行特定指定的拦截。 Decorator模式在点上针对性相

15、当强,特别在这个点上有一系列过滤器需要实现时。 如果某个过滤功能是很多类都需要的,会形成很多Decorator附加类,造成点形成面的情况,则升级使用AOP拦截器。 优点:能够动态地为过滤器扩展功能。 也可以使用FilterManager和FilterChain过滤器链负责协调和管理过滤处理,这样单独的过滤器就不用和其他过滤器直接通信了。 问题:不能以一种标准的可移植的方式支持对请求和响应对象的包装,而且不能够修改请求对象。 缺乏完善的缓存机制。当过滤器要控制输出流的时候,还必须引入某种形式的缓存机制。 3,使用模板方法模式来定制过滤器。 可以和其他方法混用。 优点:这种方式是基于标准的过滤器的,基本过滤器作为一个基类,封装了过滤器API的所有细节。 专注于预处理和后处理的所有逻辑。 基本过滤器声明了每个过滤器要完成的方法,每个过滤器子类来定义这些定义方法。由超类来控制子类的控制流程。 4,使用AOP框架拦截器。 当功能不是针对某个具体类或方法(方法权限除外),而是一系列类,使用动态AOP拦截器,性能损耗也是值得的,而且是必要的。 八、过滤器的应用场合简洁的说法: 1认证过滤:对用户请求进行统

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1