




已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于java的web服务器摘 要:应用服务器是当前基于web的软件开发的重要的支撑平台。本文通过研究web应用服务器的功能需求以及基于组件的软件开发模式,结合java规范和超文本传输协议,设计并实现了基于java的web应用服务器dm was,为web客户部署web应用程序提供支持,从而更加方便地使用dm的数据存储和访问服务。关键字:java;应用服务器;超文本传输协议;多线程第一章 绪论1.1课题背景随着信息处理流程越来越复杂,需要存取的数据量越来越庞大,数据库逐渐成为存储和处理数据的主要工具,它是许多公司整体业务结构形成的基础。在传统的客户机/服务器两层体系结构中,应用程序的处理在前台的客户端和后台的数据库服务器之间分担,客户端发出数据请求,服务器响应并处理请求,把处理的结果再回送到发出请求的客户端。客户机/服务器结构因为其灵活性得到了较广泛的应用,但对于大型软件系统而言,这种结构在系统的部署、可扩展性和可维护性方面还存在着不足,典型的有胖客户机/瘦服务器和瘦客户机/胖服务器体系结构。internet的发展给传统应用软件的开发带来了深刻的影响,基于internet和web的软件和应用系统无疑需要更为开放和灵活的体系结构。随着internet/intranet技术的普及、电子商务技术的发展等,数据库技术又面临着新的挑战,一种新的、更具生命力的体系结构被广泛采用,这就是所谓的三层和多层应用体系模型。一个典型的三层模型由前端客户层、中间服务器层和后端数据库层所组成,在这种模型中,业务逻辑被放到系统服务和用户接口之间的中间层,从而使业务逻辑与用户界面的表示层分开,同时与后端系统保持相对独立性,有利于系统扩展。三层模型具有更好的移植性,可以跨不同类型的平台工作,允许用户请求在多个服务器间进行负载平衡。在三层和多层应用模型中,应用服务器是最核心的基础软件,国际上许多著名的计算机公司和开放源码组织纷纷推出了各自的产品和系统,如ibm websphere、beaweblogic、oracle9ias、sun iplanet、开放源码jboss和enhydra等,这其中有很多是由数据库厂家开发的,以便为企业应用提供整体解决方案。dm数据库管理系统是华中科技大学数据库与多媒体技术研究所研制的分布式多媒体数据库管理系统。为了满足dm数据库在分布式环境下,特别是多层应用软件体系结构中企业级应用的需求,抢占数据库管理系统前沿技术的制高点,研发支持可扩展标记语言(extensible markup language,xml)的数据库管理系统xdm4和支持xml、符合java规范的web应用服务器已成为dm下一步的目标。正是在这一背景下,本课题提出开发支持java标准的web应用服务器,为基于java、xml和数据库的web应用提供存储、查询、发布数据的能力,并提供部署、运行应用的环境。1.2 web应用服务器的定义及功能1.2.1. web基本概念www采用web页面的方式进行信息的存储与传递,web信息存储在web站点上,用户通过web浏览器访问页面。web页面是由html语言编写,并由浏览器翻译解释的。建立web的愿望是通过易于使用的超文本接口,提供通过的文件共享。完整的web结构应包括:http协议、web服务器、通用网关接口、web应用程序接口、web浏览器。web体系结构如图2-1所示。图2-1 web体系结构http协议:http(hyptertext transfer protocol)就是超文本传输协议,是www服务的支撑协议,它实现了服务器和客户机间信息交流。web以两个主要的协议为基础即http及tcp/ip协议。http用于web浏览器与web服务器之间的数据交换,浏览器使用超文本标记语言html;tcp/ip为网络传输控制协议。http协议工作在tcp协议之上,在很多方面,理解http协议是理解web的关键。web服务器:是指驻留在因特网上某种类型计算机的程序。它是在网络中信息提供者基于http的为实现信息发布、资料查询、数据处理等诸多应用搭建基本平台的服务器,其主要功能是提供网上信息浏览服务。通用网关接口(cgi):common gateway interface的简称,是在web服务器端的一个通用接口,用来调用外部程序进行计数、查询数据库、生成定制的图像,或完成其他任务。其主要的功能是在www环境下,从客户端传递一些讯息给web服务器,再由web服务器去启动所指定的程序来完成特定的工作。web应用程序接口:web应用程序是运行在服务器端的可执行程序或动态连接库。它们可以响应用户要求,动态产生超文本页面,并将信息提供给客户浏览器。web应用程序接口就是一组函数,可以帮助开发者借助服务器配置文件中的指令来创建自己的应用程序。这些指令就是服务器执行一个请求的步骤,包括访问授权、根据文件根目录的路径转换、存在性验证、文件类型判别以及服务器的正确执行。web浏览器:web浏览器用于通过url(uniform resource locator,同一资源定位符)来获取并显示web网页的一种软件工具。在windows环境中较为流行的web浏览器为netscape navigator和internet explorer。用户也可在autocad等软件的系统内部直接调用web浏览器进入web网络世界。1.2.2 web的工作机制web系统的工作主要就是进行web页面的交互,一个典型的web页面有一个基础页面和内嵌的资源对象组成。基础页面一般按照标准的语法结构超文本标记语言(html)书写,而内嵌资源(图象、声音等)的统一资源定位符(url)则按一定格式包含在基础页面之内1。这里从用户的角度来描述web页面的交互过程。为了显示用户所制定的一个页面,浏览器需要完成下列步骤:1.浏览器首先需要对url中所包含的服务器名进行域名解析;2.服务器与浏览器建立一条到该ip地址的tcp连接,这段时间称为连接建立时间;3.浏览器在该tcp连接上向服务器发送http请求,从浏览器发送请求到它收到第一个响应ip包的时间称为请求及响应时间;4.如http响应的消息多于一个包,从浏览器收到第一个ip包到它收到所有ip包之间的时间称为传送时间;5.在浏览器得到完整的响应消息后,基础页面的传送就结束了,而浏览器需要分析所获得的页面,并提取出其中包含的资源对象的url;6.在得到所有的内嵌资源后,浏览器根据具体的格式(html、声音、图片、动画等)解释这些资源,并把它们传送给用户。图2-2表示了获取一个web页面的过程。图2-2获取web页面的过程由web的结构以及工作过程可以看出,web服务器是整个web系统的重要组成部分,在web系统的页面交互的过程中也占有举足轻重的作用。因此,改善web系统的性能,其中关键的一环就是提高web服务器的性能,如何优化web服务器的性能也就成了人们一直以来在提高web性能方面共同关注的课题。1.2.3 web应用服务器web应用服务器是web计算环境下产生的新型中间件,为创建、部署、运行、集成和管理事务性web应用提供了一个跨平台的运行环境。近年来,许多研究人员、组织机构对web应用服务器分别提出了不同的定义,但到目前为止,web应用服务器仍然没有一个完全统一的定义。c.mohan在文献中认为,应用服务器是传统事务处理监控器(transaction processing monitor)在web环境下的现代等同物,是事务性服务在线应用的执行平台,将现代的应用环境与历史遗留数据源集成是应用服务器最重要的特征之一。ritter在文献中认为,应用服务器是位于以浏览器为基础的前端和历史遗留应用的后端之间的、基于组件的服务器端软件,它高速存取后端系统的信息,处理业务逻辑,集成企业计算中的资源和应用,为安全、状态维护、数据访问、数据存取提供中间件服务。文献认为应用服务器是为创建、部署、运行、集成和管理事务性web应用提供一系列运行时服务(如消息、事务、安全、应用集成等)的可伸缩、高可用、高可靠、高效的中间件平台。应用服务器需满足web计算的特定需求,所以,应用服务器通常同时具有web服务器的功能,亦称为web应用服务器。每种定义有其侧重的方向,一般来说,web应用服务器应具有几个大的功能。1.业务逻辑处理3业务逻辑是用户为完成某项功能所部署的应用程序组件。处理业务逻辑是应用服务器的主要功能。与应用程序相关的业务逻辑可以由可重用组件组成,而不需要每个开发者自己开发。一旦组件被创建,就可以被部署到应用服务器中运行。大多数应用服务器提供某种机制用于指定组件的持久性、事务处理和安全性等。2.数据访问应用服务器提供一整套数据访问机制,用于管理与关系型数据库(如oracle,sql server)的连接。开发人员只需要提供必要的连接参数就可以透明地访问数据源而不需要知道访问具体是如何实现的。3.事务管理事务处理是企业计算中最重要的内容之一。过去,web开发人员和应用程序开发人员习惯于自己完成数据库事务管理。对于没有经验的开发人员来说,自己控制事务既烦琐而且又容易出错。而在应用服务器环境中,开发人员所要关心的只是业务逻辑的实现,有关数据库的事务处理应交由应用服务器管理。应用服务器提供不同级别的事务控制,以满足开发人员的不同需求。4.状态和会话管理应用服务器必须在同一用户会话过程的多次请求之间维护有关的状态数据。在应用服务器环境中,应用服务器一般是通过会话对象来保持用户状态数据的。会话对象的唯一功能就是保存服务器端的数据,它使那些存在安全风险的数据远离浏览器端,从而保证了系统的安全性。5.安全服务为了获得对资源的访问权,客户端必须通过服务器的认证,因此应用服务器必须要有验证用户的安全设施。大多数服务器采用基于角色的访问控制机制。此外,也有一些服务器提供对安全服务的验证(如操作系统,ldap等),更高级的安全通过用户主机上数字认证的使用来实现。一旦用户身份被验证,服务器将允许或禁止该用户访问组件和服务器所管理的数据库连接等。6.数据库连接池基于web应用服务器的应用开发不可避免地要访问数据库。当客户端在页面中请求数据或更新数据时,服务器必须连接数据库以完成工作。如果用户每次提交页面时都要执行数据库的连接和断开操作,系统的性能就会变得很差,因为在一个事务周期中建立到数据库的连接是一个费时而又浪费系统资源的操作。应用服务器通常采用数据库连接池技术来优化数据库连接,它不为每一个用户保持单独连接,而是维护了一个连接池来缓存已有的数据库连接。如果用户需要查询或更新数据,相应组件就会请求服务器从连接池中分配一个可用连接。当一个事务结束后,连接池收回该连接以待重用。7.负载平衡和失败恢复为了满足web计算环境下大规模用户的并发访问,web应用服务器需要提供可信赖性、高伸缩性等特性,提高系统整体性能和吞吐量,这就要求服务器需提供某种负载平衡和失败恢复机制。负载平衡意味着一组服务器可以被集中成为一个服务器集群。发往服务器的请求被一个代理服务器处理后委派给服务器集群中最空闲的服务器,此后发送该请求的客户端将直接与那台服务器通信。具有负载平衡机制的系统一般应具有良好的扩展性,以便当客户端请求负载的增加时,更多的服务器主机能够被加入到服务器集群中。失败恢复机制增强了服务器的容错性。如果集群内某台服务器失效停机,新的请求将被重新分配给其它某台服务器。简单的失败恢复不能解决所有问题,如果在某项任务的执行过程中服务器停机,负载平衡机制将会发现这个问题并将该任务重新分配给其它服务器,但是请求该任务的用户的状态和会话数据将对新服务器不再可用。正因为这个缺陷,有的应用服务器提供会话级失败恢复,状态和会话数据将被复制给集群内其它服务器或是被存储在永久性存储介质(如数据库)中,使用户数据对每个服务器总是保持可用。1.3 java简介与技术1.3.1 java简介java的诞生需追溯到1991年。当时,在sun公司内,有一个称为green的项目,这个项目的工程师受命设计一种小型的计算机语言,用于机顶盒、家电控制芯片等消费类设备。但是1993年交互式电视及pda市场开始滑坡,而internet开始盛行,sun公司将市场目标投向internet。1994年,原来的项目组编写了一个hotjava浏览器,当时正是这个浏览器吸引了全世界的眼球,1995年秋,netscape决定让其浏览器支持java,并在1996年年初发布了支持java的版本。这意味着java语言开始流行起来。后来,ibm、oracle、symantec、bea、inprise等许多著名it公司都注册了java使用许可证,甚至心不甘、情不愿的microsoft也开始支持java,java逐渐成为了一个工业标准。sun于1996年年初发布了java的第一个版本,在1998年召开的javaone大会上,又发布了java 1.2版,这就是常说的java 2,它以功能全面、具有高度扩展能力的新版本换掉了原来的gui界面和图形工具包。朝着“一次编写,到处运行”的宏伟目标又前进了一大步。1999年,sun宣布了以java 2平台为核心的java、j2se和j2me三大平台。今天,这三大平台迅速推进,满足着不断增长的市场需求。2002年2月,sun发布了j2se 1.4版,成为最具竞争优势的企业级应用与服务的快速开发平台。该产品已通过中文编码国家标准gb18030的检测,标志着java开发将在中国提速。2002年9月,java 1.4在日本javaone开发者大会上预演,并于2003年第一季度正式交付客户使用。而j2me平台已被全球20多家顶尖的手机生产商在100多种不同类型的java手机中采用。2004年10月,sun公司正式发布jdk 5.0版。作为通过jcp研发的最大规模的项目之一,有大约160位专家成员参与了jdk 5.0版本的研发。jdk 5.0提供了100多个新特性,从易用性和各个破记录的性能来看,jdk 5.0的推出被认为是java平台和编程语言近10年来最重大的升级。现今java联盟成员公司超过了400个,其中包括 oracle、sap、sony、motorola、nokia、hp和philips等。java联盟的java开发者超过300万。java下载量超过100万,许可证接收方达35个。j2me手机超过1 500万部,应用达5 000多个。1.3.2 java的特点java语言是一种优秀的编程语言。它最大的优点就是与平台无关,在windows 2000、windows xp、solaris、linux、mac os及其他平台上,都可以使用相同的代码。“一次编写,到处运行”的特点,使得系统的移植、平台的迁移变得十分容易。java语言的设计者借鉴了c+的设计,java语言是完全面向对象的语言,而c+至多只能算准“面向对象”的语言。java语言的语法结构与c+语言的语法结构十分相似,这使得c+程序员学习java语言相当容易。当然,如果仅仅是对c+改头换面,那么就不会有今天java热闹的场面了,但这种借鉴是取其精华、去其糟粕的“拿来主义”的借鉴。java语言提供的许多有用的新特性,使得java语言比c+语言更易使用且不容易出错。简单地说,java具有以下的特性:简洁性、面向对象、分布式运算、健壮性、安全性,跨平台、可移植。1.3.3 java技术为了适应多层分布式体系结构的发展,人们相继开发了很多应用服务器产品。但不幸的是,大多数应用服务器还没有一个明确统一的标准,各个应用服务器都是按照自己的模式来提供服务。这就导致了开发人员不能够将为一种应用服务器开发的应用程序组件安全可靠地移植到另外一种应用服务器中。基于上述原因,业界迫切需要一个服务器端组件体系机构的统一标准。这个统一标准需要明确定义出应用程序组件所必须遵循的统一的接口,让组件不再只能面向一种特定的应用服务器,而是能够在遵循相同标准的不同的应用服务器间安全可靠地移植。组件供应商因此不用再顾虑他们提供的组件与服务器的兼容性问题以及诸如运行时所需要的安全、事务等服务和支持,从而可以专注于开发具体业务逻辑问题的解决方案。正是基于这样的需求,java应运而生。java是一种利用java2平台来简化诸多与多级企业解决方案的开发、部署和管理相关的复杂问题的体系结构。java提供了多层分布式的应用系统模型、重用组件的能力、统一的安全模型和灵活的事务控制。基于组件的java企业应用系统具有平台独立性,所以不受任何软件产品和任何软件厂商应用程序接口(application program interface,api)的约束。java具有如下一系列明显的优点:1.java是一个分布式应用系统的平台,几乎包括了企业级应用系统开发所需要的各种技术;2. java使得企业级应用真正实现“一次开发,到处运行”;3.由于java是一个规范,任何遵循该规范开发的应用程序组件都能够在实现了该规范的应用服务器上方便的移植并得到重用;4.java具有开放性和统一性,用户不必再受具体软硬件体系结构的约束;5.java提供了基于组件的开发技术,使得企业级应用程序的开发更加容易。基于java和web的企业级分布式应用开发的标准,目前大多数主流应用服务器都已经支持java。java包含多项核心技术。1.企业javabeans(enterprise java beans,ejb)ejb是java中最重要、最核心的部分,它是一种服务器端的组件模型。一个ejb是一个运行在应用服务器端的非可视化的软件组件。ejb提供了一个框架来开发和实施分布式业务逻辑,简化了中间层的开发,它通过提供对中间层服务的支持,如数据库连接、事务、安全等,显著地简化了具有可伸缩性和高度复杂性的企业级应用的开发。ejb规范定义了四种基本的bean类型。(1)无状态会话bean(stateless session bean):它提供某种单一的服务,不保存与特定客户的对话状态,在服务器发生故障时无法继续存在,其生命周期相对较短。(2)有状态会话bean(stateful session bean):它提供了一种保持会话状态的服务,每个实例都与特定的客户机相关联,且只用于一个单一的线程,在与客户机的方法调用之间维持对话状态。有状态会话bean在服务器发生故障时无法继续生存,生命周期相对较短。(3)实体bean(entity bean):它代表业务上的实体,包含与数据相关的逻辑。实体bean一般与数据库形成一种对象/关系映射,一个实体bean可以代表一个数据库中存储的对象。他们能够通过一个主关键字来识别并可以被不同的客户端所共享。ejb容器负责管理这些对象的持久性。实体bean在服务器发生故障后能继续存在。(4)消息驱动bean(message-driver bean):它是ejb2.0新引入的一种bean类型,用来监听消息的对象。消息驱动bean在接收到java消息服务(java message service,jms)的消息后执行,它们是事务可知的和无状态的,一般用来执行一些异步的方法调用。2.servletservlet是一种独立于平台和协议的服务器端java应用程序,用来拓展基于请求响应模式的服务器端的能力。servlet位于web服务器端,由web服务器动态加载和卸载。servlet具有多线程、持久性、灵活性及易于访问其它网络资源等特点,为创建基于web的应用程序提供了基于组件的、平台独立性的方法。3.java服务器端页面(java server pages,jsp)jsp是sun公司提出的一种基于java的服务器端动态页面技术,是servlet技术的扩展。与asp相比,jsp更具有平台独立性。jsp页面由html代码和嵌入其中的java代码以及jsp标记所组成。服务器在页面被客户端请求以后对这些java代码和标记进行处理,然后将生成的html页面返回给客户端的浏览器。4.java数据库连接(java database connectivity,jdbc)jdbc api是一个标准的数据库访问接口,以一种统一的方式来对各种各样的关系数据库进行存取。与odbc一样,jdbc为开发人员隐藏了不同数据库的不同特性。另外,由于jdbc建立在java的基础上,因此还提供了数据库存取的平台独立性。5.java事务api(java transaction api,jta)和java事务服务(javatransaction service,jts)事务处理是企业计算中最主要的内容之一。jta和jts为java平台提供了分布式事务服务。一个分布式的事务涉及一个事务管理器和一个或者多个资源管理器。一个资源管理器是任何类型的持久性的数据存储。事务管理器负责协调所有事务参与者之间的通信。jta事务比jdbc事务功能更强,jdbc事务局限于一个数据库连接,而jta事务可以有多个参与者。6.java名字和目录接口(java naming and directory interface,jndi)jndi api被用于执行名字和目录服务。由于java应用程序组件一般分布在不同的机器上,所以需要一种机制以便于组件客户使用者查找和引用组件及资源。在java体系中,使用jndi定位各种对象,这些对象包括ejb、jdbc数据源及消息连接等。jndi为企业应用中的多种命名和目录服务提供统一接口,使应用程序组件可以统一访问这些命名和目录服务。7.jmsjms被用来支持开发面向消息的分布式计算系统,它提供创建、发送、接收、读取消息的服务。jms的目的是提供给消息系统中的客户一个固定的接口,而且与底层的消息提供者无关。它提供了通用的消息模型以支持不同的异步和同步通讯机制,按处理机制的不同,可分为发布/订阅(pub/sub)模型和点到点(p2p)排队模型。第二章 系统总体设计2.1 web应用服务器dm was功能需求web应用服务器是多层体系结构中的关键部件,web应用服务器有其共有的功能特性,包括客户端连接管理、状态和会话管理、业务逻辑处理、数据库连接、安全管理和事务管理等。具体到java中,一个符合java规范的web应用服务器需要提供的服务除了要满足一般需求外,还有其特殊之处,主要表现在如下几个方面。1.web容器服务web容器负责加载和执行web应用程序,接受web请求,返回动态的web页面。web容器中的组件可使用ejb容器中的组件完成复杂的业务逻辑。2.ejb容器服务负责管理ejb组件的生存期和ejb组件的状态,调度ejb实例池以及池中的ejb组件,管理执行ejb规范的java类和ejb组件服务的接口插入类。3.命名服务服务器要提供jndi的实现以便实现相关资源的绑定和查找。4.事务服务负责处理分布式事务,提供对ejb组件的事务管理。在java中,一个事务资源可能是jdbc连接、jms会话或者是jca资源适配器的连接。事务之间的联系是隐含的分布式请求传递。该服务要实现jta规范,允许从客户端的应用软件中明确的开始和结束事务。5.数据库服务负责处理数据源对象。数据源是为了处理数据库连接的标准jdbc管理对象。数据库服务在服务器中创建、加载数据源,同时负责管理连接池。6.安全服务执行java规范指定的访问服务器组件和应用程序的授权机制。2.2系统架构分析软件架构的设计是决定软件系统的性能和可扩展性等质量指标的重要因素。在基于java的web应用服务器的实现产品中,开源的tomcat应用服务器在系统架构方面给了我们很多有益的启迪。2.2.1 tomcat体系结构分析tomcat是sun公司官方推荐的servlet和jsp容器。tomcat从4.0版本开始,在体系结构上进行了调整,与4.0之前所采用的基于模块的链式控制结构相比,tomcat在4.0之后采用了面向组件的设计方式,各部分功能都是由组件提供的,控制流程通过组件之间的通讯完成。设计组件时应该从不同的问题领域,站在不同的观点上分析,把每一种属性分别考虑。例如tomcat中的filelogger组件,它用于把系统日志信息保存到文件系统中。按照这种模式分析,我们从不同的角度看待它:它如何启动服务、停止服务和进行通讯?它的具体的功能有哪些?别的组件可以发给它哪些消息?基于这些考虑,filelogger组件实现了两种接口:lifecycle(生存期接口)和loggerbase(基本功能接口)。tomcat中使用了inversion of control(ioc)模式,其意思是组件总是通过外部进行管理的。组件需要的信息总是来源于外部,实际上组件在生存期的各个阶段都是被创建它的组件管理的。在tomcat4.0中就是通过这种组件之间的相互控制和调用实现各个功能的。tomcat的基本流程是首先通过解析xml格式的配置文件(server.xml和web.xml),获得系统的配置和应用信息,然后加载定制的组件模块提供各种系统服务。tomcat的常用组件包括:server、service、connector、engine、host、context。server代表整个tomcat的catalina servlet容器,它包含一个或多个service;service由一个或者多个连接器(connector)以及一个共享的处理引擎(engine)组成,engine负责处理所有connector所获得的客户请求;connector在某个指定端口上侦听客户请求,并将获得的请求交给engine来处理,从engine处获得响应结果,并返回给客户端;engine代表一个service所属的请求处理机,它接受所有connector传递过来的客户端请求,将处理结果返回给connector,由connector将最终响应返回给客户端,engine必须配置在service组件下;engine下可以配置多个host,每个host都有一个域名,当engine获得一个请求时,它把该请求匹配到某个host上,把请求交给该host来处理;host代表一个虚拟主机,每个虚拟主机和某个网络域名相匹配。每个虚拟主机下都可以部署一个或者多个web应用程序,每个web应用程序对应于一个context,有一个context路径;一个context对应于一个web应用程序,一个web应用程序由一个或者多个servlet组成。tomcat整个系统的功能都是通过组件实现的,组件之间的通讯构成了系统的运行控制机制,具有很高的复用性和可扩展性。2.2.2组件技术组件技术越来越广泛地应用于软件系统设计中,它是为提高软件的可重用性而提出的,其思想是将软件按一定的标准封装成组件,对外提供一组访问接口,指明组件与容器或与其它组件交互的机制。面向组件的技术(component-oriented,co)是比面向对象的技术更高一层的抽象,它融合了面向对象的优点,加入了安全性和可扩展的模块设计,可以更好的映射问题域空间。采用面向组件的设计会带来很多好处,可以提高复用性、降低耦合度和通过组装构成系统等。应用服务器系统吸取了组件技术所提供的优点,采用开放的层次组件式结构,系统的各种资源均以服务的形式提供,服务按功能划分层次,形成不同组件,服务与系统核心之间定义公共接口标准,所有服务采用标准接口实现与底层通讯。采用这种层次式组件结构,组件通过核心层定义的公共标准接口实现与底层通讯,系统功能作为组件式服务部署和管理,整个系统可以在不影响现有应用的基础上,实现对组件的修改和扩展。java是一个基于组件的多层网络应用体系结构,它定义了一套标准化的组件,并为这些组件提供了完整的服务,这意味着应用程序的不同部分可以运行在不同的设备和系统上。其核心是容器,容器提供了组件服务的运行环境和对企业信息系统的标准访问,还提供了配置和部署应用程序行为的机制。2.3 dm was体系结构2.3.1服务器总体设计框架java平台从功能上大体可以划分为两个大的组成部分:web服务器和ejb服务器。web服务器主要是为jsp和servlet提供运行平台,实现企业应用程序的web表示层;ejb服务器主要是提供ejb组件的运行环境,为业务逻辑事务层服务。各个厂商一般会根据需要有选择地实现全部或部分java规范,如openejb是一个实现了ejb规范的纯ejb容器,tomcat是一个主要提供servlet和jsp服务的web容器,当然它也实现了jndi、连接池、事务处理等相关服务。在总结国内外web应用服务器研究的基础之上,结合具体的需求分析,我们提出如下系统总体框架,如图2.1所示。图2.1 dm was总体框架图由图中可以看出,整个web应用服务器的功能是由一个个的组件提供的。采用组件技术,能够提高系统的可扩展性。整个系统由11种组件组成。1.服务器启停组件服务器启停组件实现服务器的启动与停止。服务器启动时,完成如下一些工作:初始化类装载器,初始化jndi服务,读入服务器配置文件server.xml(由xml组件中的xml解析器完成解析),根据配置文件的内容配置相应的资源服务(如数据源的初始化),启动“停止服务器”监听线程并注册虚拟机停止钩子(hook),初始化web应用程序上下文,初始化并启动http连接管理组件,初始化其它内置服务(如内置的数据库等)。2.http连接管理组件http连接管理组件负责建立一个或多个serversocket并监听来自客户端的连接请求。它在初始化过程中获取服务器启停组件读入的服务器配置信息,如服务器绑定的ip地址和端口号、线程池能够允许的最大线程数和最小线程数等,建立serversocket,并循环地接收客户端的连接。当某个客户端发出连接请求时,它建立一个socket对象并将该对象包装成request和response对象赋给请求处理任务的实例,交由线程池处理。3.静态资源处理器静态资源处理器完成对静态页面html、图片等静态资源的请求处理。如果用户请求的是一个目录,它可根据服务器的配置决定是否显示欢迎页面、显示目录内容或给出出错信息。4.servlet容器servlet容器是服务器的核心,它实现并扩展了servlet2.3规范中的绝大多数接口。servlet容器在系统启动过程中完成初始化,包括web应用程序上下文的配置、web描述符的解析以及根据web描述符的配置决定是否预先装入某些servlet。它实现了基于session和cookie的会话管理机制,能够有效地对用户会话进行跟踪。servlet实例池能够对用户的请求做出快速响应。根据web描述符能够处理任何匿名或非匿名的servlet请求。5.jsp引擎jsp引擎是服务器的另一个核心组件,用来处理对jsp页面的请求。当servlet容器监听到客户端请求的是一个jsp页面时,它将请求转发给jsp引擎。jsp引擎将对jsp文件进行解析并生成相应的servlet代码,随后对生成的servlet进行编译并加载到内存中,然后将该servlet交给servlet容器进行处理。上述过程会随时因发生错误(如jsp文件写法不规范,找不到引用类等)而终止。对于所有的随后而来的对该jsp文件的请求,jsp引擎将检查该jsp文件自最后一次被存取后是否经过修改。如果没有修改则请求将交给还在内存中的servlet以一种同时发生的方式加以处理。由于servlet始终驻于内存,所以响应是非常快的。如果jsp文件被修改了,jsp引擎将自动地对该文件重新编译,并将结果取代内存中的servlet,并继续上述处理过程。6.数据库连接管理组件数据库连接管理组件管理数据库的连接操作,它包括一个事务管理器和一个数据库连接池。事务管理器采用jta和jts为开发者提供数据库的事务支持,开发人员可以有选择地通过jndi访问事务管理器控制事务或自己使用jdbc接口控制事务。数据库连接池实现了javax.sql.datasource接口并对开发人员屏蔽了引用的细节,开发人员只需要通过jdni查找datasource的逻辑名称就可以获得数据库连接从而操纵数据库。7.xml组件xml组件包括xml解析器、xsl转换器、xmljdbc组件等。它负责系统中所有xml文件的解析工作,能够完成xml文件与关系数据库之间数据的存取与转换,以及与xml数据库的连接。8.jndi组件jndi组件为用户访问java名字和目录服务提供了便利,任何有关jndi的查找和绑定工作都由该组件完成。9.安全管理组件安全管理组件采用基于安全域(security realm)的方式实现服务器中用户的认证和授权。在身份认证方面,使用基于http基本验证方式和基于表单(form)的认证方式;在授权方面,使用基于角色的访问控制。所有安全操作由服务器管理,用户只需在web应用描述符中进行配置。10.日志管理组件日志管理组件负责系统的日志记录工作。我们采用了优秀的日志记录软件log4j并对其进行了扩展以满足本地化需求。日志管理组件提供分级方法在程序中嵌入日志记录语句。日志信息具有多种输出格式和多个输出级别,用户可根据需要进行定制,以捕捉有关应用程序运行时行为的细节。11.服务器接口组件服务器接口组件负责与dm ejb服务器的连接工作。它通过jndi与dm ejb服务器进行通信,从而实现dm was和dm ejb服务器的互连,形成一个完整的java应用服务器。2.3.2服务器总体方案的特点基于java的dm was处于web浏览器/dm was/dm数据库服务器三层体系结构的中间层,该服务器具有6个基本特点。1.规范性dm was严格遵循java规范,任何符合java规范的web应用程序都能够在我们的服务器中正确地配置和运行。2.适应性dm was严格来说是一个web容器,但我们提供与dm ejb服务器的整合,从而可以给用户提供完整的java开发环境。3.安全性在服务器中可以配置各种组件的安全性,只有被授权的用户才能访问系统资源。每一个客户隶属于一个特定的角色,而每个角色只能访问特定的资源。开发人员可以在应用部署描述符中声明角色和可被访问的资源,而不必在应用程序中硬编码安全规则。4.可配置性用户可以通过服务器配置文件方便地对各项参数进行修改,从而达到最佳运行效果。5.可管理性我们提供良好的操作管理界面帮助服务器管理人员管理服务器以及部署在服务器中的web应用程序。6.易用性服务器应用程序目录结构规范,web应用程序部署方便简单,具有对war文件的自动解压,简单的批处理文件使得启停服务器变得异常方便。2.4 dm was的运行过程dm was基于http/1.1协议,支持java中servlet、jsp、jdbc、jndi等相关规范,能够部署大多数基于web的java应用。dm was由服务器核心类、java核心类库、第三方软件包、一组配置文件和多个web应用程序组成。服务器在启动时读入并解析服务器配置文件,并初始化一系列服务,包括类装载器、数据库连接池、jndi、数据源等资源在jndi上的绑定、线程池、web应用程序的上下文等,最后建立serversocket,等待客户端连接。第三章 系统技术实现3.1 http连接管理组件一个客户机与一个服务器要进行有效的通信,他们之间必然要遵守某种共同的协议,当前,浏览器和web服务器之间大多采用超文本传输协议http进行通信。http协议是基于tcp/ip协议之上的应用层协议,具有无连接、无状态、面向对象等几个特点。http协议基于请求/响应机制,其工作原理包括四个步骤。1.连接:浏览器与服务器建立连接,打开一个称为套接字(socket)的虚拟文件,此文件的建立标志着连接建立成功。2.请求:浏览器通过socket向服务器提交请求。3.应答:服务器接收到该请求后,进行相应的事务处理,然后将处理结果通过http传回给浏览器。4.关闭连接:当应答结束后,服务器断开与浏览器的连接,以保证更多的浏览器能够与服务器建立连接。http连接管理组件位于dm was的最前端,它在服务器启动过程中获取服务器配置参数并初始化,负责监听端口,接收请求消息,并且将处理后的回复反馈给客户端。3.1.1组件实现http连接管理组件基于http协议,负责建立一个或多个服务器socket并监听来自客户端的连接请求。当某个客户端发出连接请求时,它建立一个socket对象,读出socket输入输出流,将输入流进行解析并提取相关信息,然后实例化一个请求处理任务,并将输入输出流分别包装成request和response对象赋给该任务,交由线程池处理。流程图如图3.1所示。图3.1 http连接管理组件流程图http连接管理组件由lifecycle、server、httpserver、connectionhandler、requesthandler、request、response等类和接口以及实现线程池的相关类组成。下面详细介绍一下相关的数据结构。interface lifecyclevoid start()throws lifecycleexception;void stop()throws lifecycleexception;boolean isstarted();lifecycle代表组件的生命周期接口,其目的是以一种一致的方式来管理组件的启动与停止。服务器中所有具有生命周期的组件如服务器类、应用程序上下文类都必须实现该接口。interface server extends lifecyclestring getserverinfo();string getservername();int getserverport();string getappbase();urlclassloader getwebappparentclassloader();server代表整个服务器,它包含服务器的相关属性信息,负责服务器的启动与停止。它由服务器启停组件调用。httpserver类是对server接口的实现,并扩展了对servlet容器的接口。class connectionhandler implements lifecycleserversocket opensocket()throws lifecycleexception;void accept();void handleconnection(socket socket)throws ioexception;connectionhandler实现了生命周期接口,它根据server中的相关信息建立serversocket,循环地接收客户端的连接请求。它获取客户端的socket连接对象,读取输入输出流,然后交给requesthandler任务处理。class requesthandler implements lifecycle,taskvoid parserequest(inputstream inputstream)void execute(request request,response response)requesthandler同时实现了生命周期接口和task接口,从而可以交给线程池处理。requesthandler解析输入流,读取http请求头,将输入输出流包装成request和response对象,然后被connectionhandler放入线程池中,交由线程池执行。interface request extends javax.servlet.http.httpservletrequestvoid setresponse(response response);void setsocketinputstream(inputstream is);void addcookie(cookie cookie);void addheader(string headername,string headervalue);interface response extends javax.servlet.http.httpservletresponsevoid setrequest(request request);void setsocketoutputstream(outputstream os);void writeheaders()throws ioexception;void flush()throws ioexception;request和response是对socket输入输出流的包装并实现了相关的servlet接口,以一种对象的形式屏蔽了http底层操作的细节。3.1.2多线程web服务器应用程序常常要处理来自远程的大量而短小的任务,其特点是单个任务处理的时间很短而请求的数目却很大且很多请求是同时进行的。显然单线程的处理机制无法满足我们的需求。在服务器程序中,使用多线程是提高服务器性能的捷径。实践证明,采用多线程设计可以极大地改善系统的响应性能,提高程序的并行性。多线程,顾名思义就是在应用程序中使用多个线程。在服务器应用程序中使用多线程的意思是对于接收的每一个请求我们使用一个单独的线程进行处理。构建多线程应用程序时,一个简单的方法是:每当一个请求到达时就创建一个新线程,然后在新建的这个线程中对该请求进行处理。实际应用中,这种方法的缺点是很明显的:为每个请求创建一个新线程的开销是很大的;创建过多的线程可能会导致系统由于内存消耗过度而导致系统资源不足。资源不足是多线程应用中需要注意的一个问题。为了防止资源不足,服务器应对创建和销毁线程的次数进行合理的调整,尽量重用已有的线程。池化技术被广泛的应用于服务器端软件的开发上。池化技术简单来说就是对已创建的对象放在一个池中进行缓存,将来需要某对象时,就从池中获取,从而达到重用对象的目的。线程池技术是池化技术的一种,当需要完成某项任务时,直接从线程池中取出线程来对任务进行处理,任务处理完后,将线程返回线程池,其优
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高炉炼铁工质量管控考核试卷及答案
- 高炉炼铁工工艺考核试卷及答案
- 浴池服务员工艺创新考核试卷及答案
- 固体矿产钻探工适应性考核试卷及答案
- 压铸模具工新员工考核试卷及答案
- 课件文案简短
- 金属切割考试题及答案
- 社群健康助理员入职考核试卷及答案
- 飞机数字化装配工三级安全教育(车间级)考核试卷及答案
- 2025年中国T/R双弹单面华达呢数据监测研究报告
- 四川省成都龙泉中学2025-2026学年英语高三第一学期期末学业水平测试模拟试题
- 保管员工勤技师综合测试试卷及参考答案
- 投资协议书对赌协议范本
- 2025年电子商务设计师国家资格考试试题及答案解析
- 综合执法局执法考试试题库(附答案)
- 血透室溶血的应急预案演练记录范文
- 环境保护与节能减排课件
- 铁路十五五规划2026-2030年
- 汽车销售培训课程
- 工厂数据采集与分析系统方案
- 2025证券股份面试题目及答案
评论
0/150
提交评论