计算机时代2006年第11期

计算机时代2006年第11期
0引言
Servlet过滤器是J2EEWeb应用程序级的Java代码组件,
是一种类似于Servlet,由容器管理的对象,它能够以声明的方
式插人到HTTP请求响应的过程中.它们拦截请求和响应,以
便查看,提取或以某种方式操作正在客户机和服务器之间交换
的数据.它是通常封装了一些功能的类,实现了对Web应用程
序中的预处理和后期处理逻辑.
过滤器提供一种面向对象的模块化机制,用以将公共任务
封装到可插入的组件中.这些组件通过Web部署描述符(web.
xml)配置文件来声明,可以方便地添加和删除过滤器,无需改
动任何应用程序代码或JSP页面,并由Servlet容器进行动态调
用.通过在请求/响应链中使用过滤器,可以对应用程序(而不
是以任何方式替代)的Servlet或JSP页面提供的核心处理进行
补充,而不会破坏Servlet或JSP页面的功能.由于是纯Java实
现,所以Servlet过滤器是跨平台和跨容器可移植的,从而进一
步支持了Servler过滤器的模块化和可重用性,使得它们很容易
地被部署到任何相容的J2EE环境中.
1Servlet过滤器体系结构
1.1过滤器工作原理
图1过滤器原理
当客户端发出Web资源的请求时,Web服务器根据应用程
序配置文件设置的过滤规则进行检查,客户请求满足过滤规则,
则对客户请求/响应进行拦截,对请求头和请求数据进行检查
或改动,并依次通过过滤器链,最后把请求/响应交给请求的
Web资源处理.请求信息在过滤器链中可以被修改,也可以根据
条件让请求不发往资源处理器,并直接向客户机发回一个响应.
当资源处理器完成了对资源的处理后,响应信息将逐级逆向返
回.同样在这个过程中,用户可以修改响应信息,从而完成一定
的任务.如图1所示:在Servlet2.4规范中,对2.3规范进行了扩
展,使得Servlet过滤器可以应用在客户机和Servlet之间,
Servlet和Servlet或JSP页面之间,以及各个JSP页面之间.
1.2Servlet过滤器API
Servlet过滤器API包含了3个接口,它们都在javax.servlet
包中,分别是Filter接口,FilterChain接口和FilterConfig接口.
1.2.1publicInterfaceFilter
所有的过滤器都必须实现Filter接口.该接口定义了init(),
doFilter(),destory()三个方法:
⑴publicvoidinit(FilterConfigfilterConfig)throws
ServletException.
当开始使用servlet过滤器服务时,Web容器调用此方法
一次,为服务准备过滤器;然后在需要使用过滤器的时候调用
doFilter(),传送给此方法的FilterConfig对象,包含servlet过滤
器的初始化参数.
⑵publicvoiddoFilter(ServletRequestrequest,ServletRe-
sponseresponse,FilterChainchain)throwsjava.io.IOException,
ServletException.
每个过滤器都接受当前的请求和响应,而FilterChain包含
的过滤器则仍然必须被处理.doFilter()方法中,过滤器可以对请
求和响应做它想做的一切,通过调用他们的方法收集数据,或
者给对象添加新的行为.过滤器通过传送至此方法的
FilterChain参数,调用chain.doFilter()将控制权传送给下一个
过滤器.当这个调用返回后,过滤器可以在它的doFilter()方法
的最后对响应做些其他的工作.如果过滤器想要终止请求的处
理或得到对响应的完全控制,则可以不调用下一个过滤器,而
将其重定向至其它一些页面.当链中的最后一个过滤器调用
chain.doFilter()方法时,将运行最初请求的Servlet.
⑶publicvoiddestroy()
一旦doFilter()方法里的所有线程退出或已超时,容器调用
此方法.服务器调用destory()以指出过滤器已结束服务,用于释
放过滤器占用的资源.
1.2.2publicinterfaceFilterChain
方法publicvoiddoFilter(ServletRequestrequest,Servle-
Servlet过滤器机制分析及应用
李德水
(渭南师范学院计算机科学系,陕西渭南714000)
摘要:Servlet过滤器是可重用的Web组件,是一种类似于Servlet由容器管理的对象,能够以声明的方式插入到HTTP
请求,响应的过程中,具有功能强大,通过Web部署描述符(web.xml)配置文件配置组件的特点.它实现了对Web应用程
序的预处理和后期处理逻辑,在应用程序中得到了大量的应用.文章详细分析了过滤器的工作原理,相关的API及工作流
程,并结合实例介绍了过滤器的设计与配置.
关键词:Servlet;Servlet过滤器;HTTP请求/响应;过滤器链
63
ComputerEraNo.112006
tResponseresponse)
throwsjava.io.IOException,ServletException是由Servlet
容器提供给开发者的,用于对资源请求过滤链的依次调用,通
过FilterChain调用过滤链中的下一个过滤器,如果是最后一个
过滤器,则下一个就调用目标资源.
1.2.3publicinterfaceFilterConfig
FilterConfig接口检索过滤器名,初始化参数以及活动的
Servlet上下文.该接口提供了以下4个方法:
⑴publicjava.lang.StringgetFilterName()返回web.xml部
署文件中定义的该过滤器的名称.
⑵publicServletContextgetServletContext()返回调用者所
处的servlet上下文.
⑶publicjava.lang.StringgetInitParameter(java.lang.String
name)返回过滤器初始化参数值的字符串形式,当参数不存在
时,返回null.name初始化参数名.
⑷publicjava.util.EnumerationgetInitParameterNames()
以Enumeration形式返回过滤器所有初始化参数值,如果没有
初始化参数,返回为空.
1.3过滤器相关接口工作流程
从编程的角度看,过滤器类将实现Filter接口,然后使用这
个过滤器类中的FilterChain和FilterConfig接口.该过滤器类的
一个引用将传递给FilterChain对象,以允许过滤器把控制权传
递给链中的下一个资源.FilterConfig对象将由容器提供给过滤
器,以允许访问该过滤器的初始化数据.详细流程如图2所示.
图2过滤器相关接口工作流程
1.4过滤器配置
过滤器通过Web应用程序中的配置描述符web.xml文件中的
XML标签来声明,包括两个部分:第一部分是过滤器定义,由
元素表示,主要包括和两个必需的子元
素和,,,这4个
可选的子元素.子元素定义了一个过滤器的名字,
指定了由容器载入的实际类,子元素为过
滤器实例提供初始化参数.另一部分是对过滤器过滤规则的配置,由
元素表示,主要由,
和子元素组成.将过滤器映射到一个或
多个Servlet,将过滤器映射到一个或多个任意特征的
URL的JSP页面.
2应用实例
从上面分析可知,实现Servlet过滤器,需要两步:第一步开
发过滤器,设计一个实现Filter接口的类;第二步通过web.xml
配置过滤器,实现过滤器和Servlet,JSP页面之间的映射.
以下设计一个简单的IP地址过滤器,根据用户的IP地址
进行对网站的访问控制.
⑴过滤器类的设计ipfilter.java
packageipf;
importjava.io.IOException;
importjavax.servlet.*;
publicclassipfilterimplementsFilter//实现Filter接口
{protectedFilterConfigconfig;
protectedStringrejectedIP;
publicvoidinit(FilterConfigfilterConfig)throws
ServletException
{this.config=filterConfig;//从Web服务器获取过滤器配置对象
rejectedIP=config.getInitParameter("RejectedIP");
//从配置中取得过滤IP
if(rejectedIP==null){rejectedIP=""}
}publicvoiddoFilter(ServletRequestrequest,
ServletResponseresponse,FilterChainchain)throws
IOException,ServletException
{RequestDispatcherdispatcher=request.
getRequestDispatcher("rejectedError.jsp");
StringremoteIP=request.getRemoteAddr();
//获取客户请求IP
inti=remoteIP.lastIndexOf(".");
intr=rejectedIP.lastIndexOf(".");
StringreIPscope=rejectedIP.substring(0,r);//过滤IP段
if(reIPscope.equals(remoteIP.substring(0,i)))
{dispatcher.forward(request,response);
//重定向到rejectedError.jsp页面
return;//阻塞,直接返Web回客户端
}else{chain.doFilter(request,response);
//调用过滤链上的下一个过滤器
}
}publicvoiddestroy(){}
//过滤器功能完成后,由Web服务器调用执行,回收
}//过滤器资源
注意:chain.doFilter()语句以前的代码用于对客户请求的处
理;以后的代码用于对响应进行处理.
⑵配置过滤器
在应用程序Web-INF目录下的web.xml描述符文件中添
加以下代码:
64
计算机时代2006年第11期
ipfilter//过滤器名称
ipf.ipfilter//实现过滤器的类
RejectedIP
//过滤器初始化参数名RejectedIP
192.168.12.*
//参数RejectedIP的值
//过滤器映射(规律规则)
ipfilter
/*
//映射到Web应用根目录下的所有JSP文件
通过以上设计与配置,就禁止了IP地址处在192.168.12网
段的用户对网站的访问.
3结束语
Servlet过滤器功能强大,应用广泛,除支持Servlet和JSP
页面的基本功能,比如日志记录,性能,安全,会话处理,XSLT
转换等外,在J2EE应用程序中使用JavaServlet过滤器转换其
输出,以便兼容任何类型客户端也表现出了很好的前景.Servlet
过滤器能够侦测到来自使用WAP协议(无线应用协议)的移动
客户端的呼叫,并且将答复内容转换成WML(无线标记语言)
格式.Servlet过滤器也能检测到来自iMode无线客户的呼叫,
并将其转变成cHTML(紧凑HTML)格式等等.因而,深刻理解
Servlet过滤器的工作机制,熟练掌握编程技术,在实际的开发
过程中,可以不断地发现新的用途,增强组件的可重用性,提高
Web应用程序的可维护性.
参考文献:
[1]SunMicrosystems.JavaServlet2.4Specification.http://jcp.
org/aboutJava/communityprocess/first/jsr154.2002.8.
[2]陈敏,唐溢键,周新志.用Servlet过滤器简化中文的输入和输出[J].成
都信息工程学院学报,2005.20(2):129~133
[3]谢志华.深入JavaServlet网络编程[M].西安电子科技大学出版社,
2004.
[4]柳永坡,刘雪梅,赵长海.JSP应用开发技术[M].人民邮电出版社,
2005.
0引言一直以来,软件工程界在如何减少软件工程师的工作量和
提高工作产品的质量问题上进行了不懈的探讨和研究,用于解决
这些问题的新方法,新技术,新工具也不断涌现.以往的一些应
用框架需要软件工程师编写基于API的重复,繁琐的代码,并且
不支持应用框架API的变更.有了XSLT(ExtensibleStylesheet
LanguageTransformations),CG(CodeGeneration代码生成器)
的制作变得相当简单.笔者在使用XSLT技术为Sems_Web制
作CG的过程中发现,使用XSLT技术可以大大提高软件重用率
和数据重用率,在系统的可维护性,项目管理与控制方面具有明
显的优势.
1扩展风格表单语言转换XSLT
1.1XSLT简介
XSLT是一种用来转换XML文档结构的语言,是XSL的一
个分支.XSL也就是扩展风格表单语言(ExtensibleStylesheet
Language),XSLT最简单的应用涉及到两个文档:包含原始数据的
XML文档和用来转换该文档的XML风格表单.XSLT处理器把
XSLT风格表单的规则应用到XML文档,从而创建如XHTML,
WML,SVG及其他任何格式的第三个文档.多个XSLT风格表单
可以采用多种格式来表达某一文档.单一的风格表单还可以把某
一数据类型的多种实例转换为标准的报告格式,只需修改风格表
单就可以改变这些报告模式.而XSLT则可以把数据的多种实例
转换为多种格式而不仅仅局限于报告格式.
1.2XSLT与代码生成器CG
CG可将用户输入的项目信息(包括项目一般信息,数据源
信息,模块信息,类命名规则,数据库表与DTO类的映射信息)
和CG系统的设置信息(项目列表和插件信息)都存储在XML
文件中.相对普通文本文件而言,XML文件有着文件结构正确
性的可验证和较强的检索功能的优势.较强的检索功能体现
在:XML可以通过语义标记来显示结构性的数据,每个标记都
可以作为未来的搜索引擎的索引,使得数据的检索更有效率,
更加精确;所有标记内的数据都可以视为一个元素,而且每个
元素可以作为数据的索引.因此,数据的搜索不仅限于找到一
个文件,还可以更加详细地找出文件内部的关键部分,所以搜
基于XSLT的CG在企业信息网建设中的应用
武建虎1,赵卫2
(1.咸阳师范学院远程教育中心,陕西咸阳712000;2.咸阳师范学院网络中心)
摘要:介绍了XSLT语言,采用XSLT语言开发了CG工具.着重分析了CG工具为企业信息网建设带来的优势;结合
具体项目给出实现了CG的具体方法.
关键词:XSLT;CG;SEMS_WEB;XML;XSL;SDLC
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
▲CE
65