,欢迎光临!
加入收藏设为首页请您留言
您当前位置:网站首页 >> 西南地区 >> J2EE平台上过滤器技术的研究与应用-上海联兵环保免费电话:400-600-5030

J2EE平台上过滤器技术的研究与应用-上海联兵环保免费电话:400-600-5030

2011-09-13 16:30:24 来源:中国过滤器网 浏览:1

摘 要:阐述了J2EE平台上的过滤器技术,分析了工作原理和核心方法,对过滤器编译器之间的交互过程进行了剖析,描述了部署方法,最后给出了过滤器用于远程答疑系统信息记录和审核的实例,为在企业级Web应用开发中运用过滤器技术奠定了良好的基础.
关键词:过滤器;核心方法;信息记录和审核
中图分类号:TP368.1 文献标识码:A 文章编号:1672-4410(2004)03-0190-04在基于J2EE架构开发企业级应用程序中,即时性要求高的企业级应用程序在许多方面都要应用到过滤功能,包括审核、授权、格式转换、身份验证、压缩/加密、输出格式转换这几大类.在软件设计组件化的趋势下,为了程序复用的要求,应用程序应该可移植并不依赖于服务器形式.但在使用过滤器以前,其他的实现方式只能实现代码级别的复用,而Servlet过滤器通过对服务器的动态配置可以实现组件级别的重用.
1 概 述
过滤器技术是Servlet 2.3规范中的最重要功能,过滤器(Filter)是一个类似于Servlet由容器管理的对象,能以声明的方式插入到HTTP请求-响应过程.其主要作用是在客户端请求到达被请求的服务之前,或者服务响应离开服务器到达客户端之前,根据需要对请求或响应进行预处理.通过过滤器可以配置Web容器,让它在HTTP请求-响应过程中调用特定的过滤器对象,从而可自定义在Web容器中如何处理HTTP请求和响应.在物理结构上,过滤器是J2EE Web应用程序中的应用程序级的Java代码组件.Servlet和JSP页只能对特定的URL进行处理,而过滤器却能跨越由Web应用程序提供的URL子集(或所有URL)进行工作.
过滤器类必须实现接口Javax.Servlet.Filter.包括以下三种方法:(1) init()方法.完成过滤器初始化,通过一个Filter-Config对象把配置信息发送到相应的过滤器.(2) doFilter()方法.完成过滤行为的方法,也是过滤链中前驱过滤器调用的方法,该方法引入的对象FilterChain使得前驱过滤器调用Filter()方法的同时容器调用下一个过滤器.(3) Destroy()方法.容器关闭或应用程序实施撤销时用来使过滤器退出服务.

图1说明了过滤器如何配合J2EE对请求和响应进行处理的原理.
过滤器位于应用程序服务器和客户端之间的处理管道中,它可以对不同的资源类型(静态的HTML页、JSP和Servler的混合)请求进行预处理和后期处理.在处理请求和响应过程中,过滤器通过以下几种方式工作:在数据到达资源前,检查请求头和数据;在数据被发送到资源中后,检查响应头和数据;为经过编译器处理的资源提供请求信息的修改版本;在发出响应消息前,访问和修改由资源发出的响应;防止请求信息一起访问资源.
若客户请求符合多个过滤器的激活条件,则这些过滤器组成一个依次调用序列,称为过滤器链.它们之间是嵌套调用的关系.该过滤链上的过滤器逐个被激活后,对客户端的请求或服务器端的响应进行处理.激活条件和激活次序的设定方式由应用程序部署人员在服务器布置文件中指定,其语法符合既有的Servlet映射规则.
用于实现过滤器链接功能的是Javax.Servlet.FilterChain接口.Javax.Servlet.Filter接口的doFilter()方法引入的FilterChain对象提供了调用后续过滤器需要的信息.通过调用FilterChain对象中唯一的doFilter()方法,使得当前过滤器可以调用下一过滤器.如果当前过滤器是过滤链中的第一个元素,则该过滤器由过滤器容器主动激活.所有过滤器对象对该方法的调用都将对过滤器容器产生一个类似回调的操作,该操作将导致过滤器容器激活后继过滤器.如果过滤器在过滤链的尾部,没有后继过滤器,则对该方法的调用将激活客户端所请求的资源访问操作.只有当所有下游过滤器都从其doFilter()方法中返回时,该方法才会向上返回链中的前一过滤器.运行过程如图2所示.

当程序中出现访问资源的请求后,编译器解析过滤器映像并决定应调用的过滤器链;编译器启动链中第一个过滤器的doFilter()方法,并在链中传递请求、响应和FilterChain对象的引用;过滤器执行其doFilter()方法,然后调用FilterChain.doFilter()方法,传递请求和响应消息;FilterChain.doFilter()方法中的逻辑将调用下一过滤器中的doFilter()方法;依次调用直到链中最后一个过滤器被调用.最后一个过滤器的FilterChain.doFilter()方法将启动真正的资源访问操作.
因此,设计过滤器时原则应该是:处理客户端请求的相关代码段放置在FilterChain. doFilter()方法调用之前,而处理服务器响应的相关代码应放在该方法调用之后.
2 部 署
企业级应用程序的开发,配置与部署是重要的部分.从部署角度看,过滤器是整个Web应用程序的一部分,与Servlet,JSP或静态资源属于同一个层次.用标准的J2EE应用程序部署描述符配置过滤器,分为定义和映像两个层次.
2.1 过滤器定义
过滤器定义用于向编译器通报与过滤器相关的文本名称.定义实现在web.xml文件的〈Filter〉元素中.每个元素都必须包括〈Filter-name〉,〈Filter-class〉,〈init-param〉三种子元素.Filter-name是与过滤器相关的文本名称,用于过滤器映像中;Filter-class代表实现过滤的实际类;init-param指定了提供给过滤器实例的初始化参数,为可选元素.
2.2 过滤器映像
过滤器映像允许用户在应用程序中指定需要对哪些资源应用过滤器.也即当访问该资源时在处理通道中添加相应的过滤器,定义实现在web.xml文件的〈Filter-mapping〉元素中,位于〈Filter〉之后,应用程序中过滤器的顺序由它的顺序决定.可将URL模型应用在映像中,这样可以实现用通用的方法将过滤器应用到一组资源上.
使用URL模型的映像包括两种子元素:Filter-name代表与过滤器相关的文本名称;Url-pattern代表给定的URL模型.
3 应 用
开发的基于J2EE平台的在线答疑系统中,使用了过滤器对用户发送的消息进行记录和审查,主要完成两个功能,一是从用户发送的信息中提取出欲保存信息并将其保存到答疑数据库,二是过滤用户发表的不良言辞.后台数据库使用J2EE自带的Cloudscape.
3.1 过滤器链包括负责信息记录和负责信息审查的过滤器
(1)用于信息记录的过滤器MessageLogFilter在初始化过程中,init()方法从实施描述符中读取数据库驱动和协议信息.doFilter()方法的事务处理流程如图3.
(2)用于信息审查的过滤器MessageCheckFilter在初始化过程中,init()方法读入存储不良词汇的文本文件file,并把它们存储到列表中,再另外读取一条警告信息,若为空则设置为缺省值.doFilter()方法的事务处理流程如图4.
3.2 声明过滤器和配置映像
在web.xml文件中添加相应的应用程序部署描述符,添加对这两个过滤器的声明,初始化参数包括存储不良词汇的文本文件和用于替换不良词汇的警告信息,以及数据库的相关配置信息;过滤器映射配置中设置URL模型为/Servlet/Room,说明仅将该过滤器应用在用于实现答疑室的Servlet类Room上.
3.3 过滤器链
对应过滤器链如图5所示.当系统用户开始发送信息之后,由于实施描述符中MessageCheckFilter先被映射到上述路径,因此容器先调用它.它扫描用户发送的信息是否含有不良言辞,若有则用预先设定的警告信息替换,然后调用FilterChain.Filter().容器接着调用MessageLogFilter.MessageLogFilter在记录信息之前,先调用FilterChain. Filter()方法,由于该请求没有其它映射的过滤器了,因此容器调用RoomServlet,Room Servlet读取请求,生成响应.控制返回到MessageLogFilter,这个过滤器继续记录信息然后返回,控制接着返回到MessageCheckFilter,这个过滤器已经审查了信息,接着返回,完成一次处理过程.

4 结 语
过滤器在基于J2EE平台的开发中具有广阔的应用前景,它提供了一种强大的机制,可以有计划地更改Web容器提供Web资源的方式,在处理底层源(Servlet,JSP,HTML文件、图像等)之前和之后,拦截和处理请求与响应.开发人员将能够用过滤器来实现以前使用不便的或难以实现的功能,这些功能包括:资源访问(Web页,JSP页,Servlet)的定制身份认证;应用程序级的访问资源的审核和记录;应用程序范围内对资源的加密访问,它建立在定制的加密方案基础上;对被访问资源的及时转换,包括从Servlet和JSP的动态输出.

 

上海联兵环保科技有限公司
地址:上海市松江区工业区茸北分区茸阳路69号
总机:021-51691929
传真:021-57784244
免费电话:400-600-5030
技术支持:13641659499
E-mail:zhanglianbing@126.com
http://www.shlbhb.com

发表评论
网名:
评论:
验证:
共有0人对本文发表评论查看所有评论(网友评论仅供表达个人看法,并不表明本站同意其观点或证实其描述)
赞助商链接
关于我们 - 联系我们 - 咨询联兵