3.3.3 Servlet过滤器
Servlet2.3规范增加了一个很重要的新功能—Servlet过滤器(Servlet Filter),其主要作用是在客户端请求到达被请求的服务之前,或者服务响应离开服务器到达客户端之前,根据需要对请求或响应进行预处理。
与Servlet一样,一个Filter也有三个方法表示它的生命周期:init、doFilter和destroy。容器处理Filter的生命周期与处理Servlet类似,这里不再重述。
容器实现过滤器的机制关键是要处理好过滤链(FilerChain)。DMFilerChain实现了FilerChain接口,用以表示一个或多个Filter的集合。DMFilerChain内部采用一个队列用来存储所有该过滤链上的所有过滤器。过滤链上的过滤器执行时具有先后顺序,它们按照击鼓传花的方式逐个执行。
DM Servlet容器按照如下方法处理过滤器:当容器接收到一个请求时,它获取请求的requestURL,找出所有在Web描述符中定义的与该requestURL匹配的Filter,按照Web描述符中配置的Filter映射的先后循序逐个将这些Filter加到DMFilerChain过滤链上。DMFilerChain对象通过Filter的doFilter方法传给该过滤链上的每个Filter。过滤链提供doFilter方法用以激活过滤链上下一个Filter。
是否调用过滤链的doFilter方法完全由应用程序决定,容器只保证在请求到达时激活过滤链上的第一个Filter。如果过滤器在过滤链的尾部,没有后继过滤器,容器将处理客户端所请求的服务。
全文总结
JAVA是Sun公司提出的一种新的多层分布式计算体系结构的技术框架,是一整套技术的总称,包括建立企业应用系统的各个方面。Java语言的服务器端应用的框架,支持平台独立、可移植、多用户、安全和标准的企业级应用。使用JAVA技术能够快速建立可伸缩性的企业应用系统。目前市场上出现了很多成熟的应用服务器产品,多数数据库厂商也针对自己的数据库系统推出了应用服务器中间件,以便为企业应用提供整体解决方案。本课题就是在这一背景下提出的。
DM WAS实现了三层体系结构中的应用逻辑层,以DM关系数据库系统为数据管理层、标准Web浏览器为应用表现层,构成了完整的基于Web的三层结构的应用系统平台。
本课题在研究HTTP协议和JAVA规范白皮书的基础上,开发出一种基于JAVA的DM WAS,本文的研究工作主要体现在下面几个方面:
1.设计并实现了基于JAVA规范的Web应用服务器,它能够处理静态资源、动态JSP页面、Servlet等大部分服务器端Web资源,任何符合JAVA规范的Web应用程序都能够在DM WAS中配置运行;
2.实现了服务器的多层类装载体系,以支持热部署和控制Web应用程序对类和资源文件的访问权限;
3.为满足服务器端多线程体系结构的需求,设计并实现了线程池,并对运行过程中可能出现的资源不足、内存泄露等问题给出了解决方法;
4.参照JDBC2.0扩展标准,在服务器中实现了数据库连接缓冲池技术,对物理连接和逻辑连接进行两级缓存,提高数据库物理连接的利用率,改善连接请求的响应性能;
5.采用基于域的方式实现服务器端的安全管理功能,实现了基于HTTP基本验证和基于表单的身份认证以及基于角色的访问控制。
参考文献
[1]樊银亭,何鸿云.基于客户机/服务器体系的二层与三层结构研究.计算机应用研究,2001,18(12):23~24
[2]徐琨,刘志镜,来琳涵.Web数据库访问的中间件技术分析与研究.计算机工程与科学,2002,24(4):54~56
[3]齐勇,赵季中,侯迪等.基于Web的中间件系统集成框架—应用服务器的研究.计算机研究与发展,2001,38(4):430~437
[4]范国闯,钟华,黄涛等.Web应用服务器研究综述.软件学报,2003,14(10):1728~1739
[5]齐勇,赵季中,侯迪等.中间应用服务器中分布对象事务服务管理技术研究.西安交通大学学报,2001,35(2):133~136
[6]赵仲孟,沈海斌,王瑞等.JAVA应用服务器安全服务体系的分析与实现.计算机工程与应用,2003,21(3):175~177
[7]桂艳峰,林作铨.一个基于角色的Web安全访问控制系统.计算机研究与发展,2003,40(8):1186~1194
[8]唐建平.与应用服务器平台无关的Web认证和授权方法.计算机应用,2003,23(8):70~72 [9]范国闯,朱寰,黄涛等.Web应用服务器自适应负载平衡服务.软件学报,2003,14(6):1134~1141
[10]邓丽.基于JAVA规范的网络平台应用服务器的研究:西安建筑科技大学图书馆.2002
[11]张震,张曾科,秦颖.用Java开发Web服务器组件的方法.计算机工程与应用,2001,37(8):45~46
[12]阮彤,李京,冯东雷.基于Java的应用服务器的设计与实现.计算机研究与发展,2001,38(8):939~946
[13]姚念民,郑名扬,鞠九滨.基于流水线的高性能Web服务器.软件学报,2003,14(6):1127~1133
[14]万江平,何思遥,吴越等.用Java开发HTTP服务器.计算机应用研究,2000,17(2):60~62 [15]Claire Cloutier,Molly Shangraw,Joan McGaw,et al.Java Network
[46]宋维维,陈淑珍,孙晓安.Java语言中的多线程和双缓冲技术.计算机工程,1998,24(12):30~31
[16]陈泽斌,张凌.新型Web服务器Jigsaw结构与功能分析.见:全国第一届JAVA技术及应用研讨会论文集.北京.1998.北京:中国计算机学会,1998.114~119 [17]门志勇.Servlet过滤器研究.微型机与应用,2002,21(3):7~8
[18]左华,袁太文,谢寄石.Java中的名字目录服务及其管理实现.微型机与应用,2002,21(5):13~14
[19]R.Fielding,J.Gettys,J.C.Mogul,et al.RFC 2616,Hypertext Transfer
Protocol—HTTP/1.1.Massachusetts:The World Wide Web Consortium,1999.13~92
[20]Edith Cohen,Haim Kaplan,Jeffrey Oldham.Managing TCP connection under persistent HTTP.in:Proceeding of the eighth international conference on World Wide Web.Toronto,Canada. 1999.New York,NY USA:Elsevier North-Holland,Inc.,1999.1709~1723
[21]Thiemo Voigt,Per Gunningberg.Kernel-based control of persistent web server connections. ACM SIGMETRICS Performance Evaluation Review, 2001,29(2):20~25