




免费预览已结束,剩余27页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要可维护的数据库浏览器,采用基于Web的多层应用模型。程序上采用MVC结构,可以将数据存取逻辑与数据表现逻辑分开,组合JSP Servlet和JavaBean来建造灵活与可维护的应用程序的设计模式。Web界面的要求是允许用户浏览相关数据库中的内容.该界面使用户可以通过指定一个JDBC驱动器或URL来与一个数据库连接。接着,应用程序会允许用户浏览数据库中定义的所有表,并且可以选择任何一个表对其数据进行处理。同样,用户还可以输入SQL查询语句并查看这些查询操作产生的列表数据。在用户使用会话的任何时间内,必须确保用户可以很容易地断开数据库,并连接到另一个数据库上。关键字:MVC、设计模式、多层结构。 目录1绪论11.1Web应用系统11.2体系结构12开发语言42.1Servlet42.2JSP42.3JDBC接口技术52.3.1ODBC简介52.3.2JDBC技术52.3.3JDBC两层模型和三层模型73系统结构83.1JSP Servlets和JavaBean来构成系统83.1.1体系结构93.2Web 应用程序模型113.2.1应用程序的基本功能单元113.2.2多层客户服务器应用模型123.2.3分布式系统123.2.4基于Web的多层应用模型134可维护与实现144.1采用灵活与可维护的设计模式144.1.1模型-视图-控制器144.2要求154.3设计174.4实现194.4.1表示层-视图标志库194.4.2逻辑194.4.3应用程序预排204.4.4数据层-datasources和datasources.db软件包254.4.5部署应用程序255结论25致 谢26参考文献:27附录 安装Servelet/JSP环境28安装Tomcat4.0291绪论1.1Web应用系统 近十年来,基于Internet的应用正以前所未有的高速度发展,其中一个重要的方向就是基于Web的应用系统的发展。在此期间,随着技术的不断更新和应用的不断深入,Web应用系统的发展也经历了几个阶段性的跨越。 (图1.1) 在Web发展的初期,人们通常使用Web服务器作为信息发布工具,它接收用户的HTTP请求,然后根据请求提供所对应的HTML文档,除了显示手段更为丰富的特点之外,HTML文档与普通静态文本并没有本质差别。随后产生了动态页面和更多交互能力的需要,新的应用需要根据客户请求,从数据库中动态获取数据并予以显示。由此所产生的技术手段有CGI和Web服务器内置API等。这些手段在一定程度上满足了应用需求,但也都存在着各自的局限性:CGI效率低、速度较慢,而内置API开发困难,移植性差。 随着Web应用范围的扩大,基于商业应用的Web开始出现,人们需要Web服务器端提供更为复杂的和更为灵活的应用开发支持。JavaScript、VBScript等技术的运用,Web中对象和组件的应用使基于Web的商业程序开发得以迅速发展。但这种应用通常只适用于构建规模不大的商业系统,当商业系统进一步扩大时,其扩展性受到了限制,因为在Web服务器最初的设计目的中并不包括对大规模、高性能和高可靠性商业应用的支持。应用程序服务器(Application Server)的产生正是为了突破这一瓶颈。 1.2体系结构应用程序服务器的产生与软件体系结构的演变发展也是密切相关的。让我们简单回顾一下软件体系结构的发展历史。与最初的大型中央主机相适应,最初的软件结构体系也是Mainframe结构,该结构下客户、数据和程序被集中在主机上,通常只有少量的GUI界面,对远程数据库的访问比较困难。随着PC的广泛应用,该结构逐渐在应用中被淘汰。 在80年代中期出现了Client/Server分布式计算结构,应用程序的处理在客户(PC机)和服务器(Mainframe或Server)之间分担;请求通常被关系型数据库处理,PC机在接受到被处理的数据后实现显示和业务逻辑;系统支持模块化开发,通常有GUI界面。Client/Server结构因为其灵活性得到了极其广泛的应用。但对于大型软件系统而言,这种结构在系统的部署和扩展性方面还是存在着不足。 Internet的发展给传统应用软件的开发带来了深刻的影响。基于Internet和Web的软件和应用系统无疑需要更为开放和灵活的体系结构。随着越来越多的商业系统被搬上Internet,一种新的、更具生命力的体系结构被广泛采用,这就是为我们所知的“三层/多层计算”。 一个典型的三层模型如如下图所示: (图1.2)客户层(client tier) 用户接口和用户请求的发出地,典型应用是网络浏览器和胖客户(如Java程序)服务器层(server tier) 典型应用是Web服务器和运行业务代码的应用程序服务器数据层(data tier) 典型应用是关系型数据库和其他后端(back-end)数据资源, 如 Oracle和SAP、 R/3等三层体系结构中,客户(请求信息)、程序(处理请求)和数据(被操作)被物理地隔离。三层结构是个更灵活的体系结构,它把显示逻辑从业务逻辑中分离出来,这就意味着业务代码是独立的,可以不关心怎样显示和在哪里显示。业务逻辑层现在处于中间层,不需要关心由哪种类型的客户来显示数据,也可以与后端系统保持相对独立性,有利于系统扩展。三层结构具有更好的移植性,可以跨不同类型的平台工作,允许用户请求在多个服务器间进行负载平衡。三层结构中安全性也更易于实现,因为应用程序已经同客户隔离。 1.3应用程序服务器应用程序服务器是三层/多层体系结构的组成部分,应用程序服务器位于中间层。如上图所示,应用程序服务器运行于浏览器和数据资源之间,一个简单的实例是,顾客从浏览器中输入一个定单,web服务器将该请求发送给应用程序服务器,由应用程序服务器执行处理逻辑,并且获取或更新后端用户数据。 在企业级应用中,应用程序服务器是位于企业数据(以及其他企业遗留系统)和访问企业数据的客户之间的中间件,它提供了业务代码的存放和运行的环境。它从物理上把业务逻辑(Business logic)同客户端和数据资源分离开来。应用程序服务器可使一个商业系统得以快速简便的开发和部署,也可以适应商业系统的用户增加而无需重构系统,这一切都是因为它处于一个相对独立的结构层。在实际应用中,一个企业系统可以由多个应用程序服务器、多个Web服务器和多个数据库服务器组成,应用程序代码可以分布在这多个应用程序服务器上。 应用程序服务器是企业级web应用的必经之路,新的企业级应用需要关键性应用能对不断增加的用户数量保持持续可用,此外企业应用还需要高的安全性和可靠性,无论访问系统的用户数量发生变化,还是系统数据资源发生变化,应用程序服务器都应始终保持运行。在应用程序服务器之前,Web应用程序通常运行在Web服务器中,但Web服务器最初只是被设计用来提供Web页面相关服务的,因此开发/运行Web应用程序是缓慢而复杂的。而应用程序服务器的强大功能则能够为企业级应用系统的开发和部署提供有力的保证。 一个对应用程序服务器的定义如下:采用具有分布式计算能力的集成结构、支持瘦客户机的软件服务器产品。应用程序服务器的基本用途包括:管理客户会话、管理业务逻辑、管理与后端计算资源(包括数据、事务和内容)的连接。 上述定义的涵盖范围是应用程序服务器本身,我们认为实际上应用程序服务器还应该包括其开发环境。每一个应用程序服务器产品都有自己的API。为了充分利用应用程序服务器所提供的功能,开发人员必须学会用这些API编程。服务器的API对实用系统的开发至关重要,掌握API方法和它们提供的功能需要花一定的学习时间。 越来越多地,应用程序服务器采用诸如COM、CORBA、Enterprise JavaBeans(EJB)和Java Servlets等标准化技术(其中CORBA和EJB更为常用),上述标准化技术的采用使开发变得更加容易,因为它们为通用服务器管理功能提供了标准化API,遵循标准保证了当更改应用程序服务器时原有组件可移植。 2开发语言2.1ServletServlet是使用Java Servlet 应用程序设计接口(API)及相关类和方法的 Java 程序。除了 Java Servlet API,Servlet 还可以使用用以扩展和添加到 API 的 Java 类软件包。Servlet 在启用 Java 的 Web 服务器上或应用服务器上运行并扩展了该服务器的能力。Java servlet对于Web服务器就好象Java applet对于Web浏览器。Servlet装入Web服务器并在Web服务器内执行,而applet装入Web浏览器并在Web浏览器内执行。Java Servlet API 定义了一个servlet 和Java使能的服务器之间的一个标准接口,这使得Servlets具有跨服务器平台的特性。 Servlet 通过创建一个框架来扩展服务器的能力,以提供在 Web 上进行请求和响应服务。当客户机发送请求至服务器时,服务器可以将请求信息发送给 Servlet,并让 Servlet 建立起服务器返回给客户机的响应。 当启动 Web 服务器或客户机第一次请求服务时,可以自动装入 Servlet。装入后, Servlet 继续运行直到其它客户机发出请求。Servlet 的功能涉及范围很广。例如,Servlet 可完成如下功能: (1) 创建并返回一个包含基于客户请求性质的动态内容的完整的 HTML页面。 (2) 创建可嵌入到现有 HTML 页面中的一部分 HTML 页面(HTML 片段)。 (3) 与其它服务器资源(包括数据库和基于 Java 的应用程序)进行通信。 (4) 用多个客户机处理连接,接收多个客户机的输入,并将结果广播到多个客户机上。(5) 当允许在单连接方式下传送数据的情况下,在浏览器上打开服务器至applet的新连接,并将该连 接保持在打开状态。当允许客户机和服务器简单、高效地执行会话的情况下,applet也可以启动客户浏览器和服务器之间的连接。可以通过定制协议或标准(如 IIOP)进行通信。 (6) 对特殊的处理采用 MIME 类型过滤数据,例如图像转换和服务器端包括(SSI)。 (7) 将定制的处理提供给所有服务器的标准例行程序。例如,Servlet 可以修改如何认证用户。 2.2JSPJavaServer PagesTM (JSP)技术为创建显示动态生成内容的Web页面提供了一个简捷而快速的方法。JSP技术的设计目的是使得构造基于Web的应用程序更加容易和快捷,而这些应用程序能够与各种Web服务器,应用服务器,浏览器和开发工具共同工作。JavaServer Pages (JSP)技术就是被设计用来满足能够在任何Web或应用程序服务器上运行,将应用程序逻辑和页面显示分离,能够快速地开发和测试,简化开发基于Web的交互式应用程序的过程.JSP规范是Web服务器、应用服务器、交易系统、以及开发工具供应商间广泛合作的结果。太阳微系统公司(Sun Microsystems Inc.)开发出这个规范来整合和平衡已经存在的对Java编程环境(例如,Java Servlet和JavaBeansTM)进行支持的技术和工具。其结果是产生了一种新的、开发基于Web应用程序的方法,给予使用基于组件应用逻辑的页面设计者以强大的功能。 Web页面开发人员不会都是熟悉脚本语言的编程人员。JavaServer Page技术封装了许多功能,这些功能是在易用的、与JSP相关的XML标识中进行动态内容生成所需要的。标准的JSP标识能够访问和实例化JavaBeans组件,设置或者检索组件属性,下载Applet,以及执行用其他方法更难于编码和耗时的功能。通过开发定制化标识库,JSP技术是可以扩展的。今后,第三方开发人员和其他人员可以为常用功能创建自己的标识库。这使得Web页面开发人员能够使用熟悉的工具和如同标识一样的执行特定功能的构件来工作。JSP技术很容易整合到多种应用体系结构中,以利用现存的工具和技巧,并且扩展到能够支持企业级的分布式应用。作为采用Java技术家族的一部分,以及Java 2(企业版体系结构)的一个组成部分,JSP技术能够支持高度复杂的基于Web的应用。由于JSP页面的内置脚本语言是基于Java编程语言的,而且所有的JSP页面都被编译成为Java Servlet,JSP页面就具有Java技术的所有好处,包括健壮的存储管理和安全性。作为Java平台的一部分,JSP拥有Java编程语言“一次编写,各处运行”的特点。随着越来越多的供应商将JSP支持添加到他们的产品中,您可以使用自己所选择的服务器和工具,更改工具或服务器并不影响当前的应用。当与Java 2平台,企业版(J2EE)和Enterprise JavaBean技术整合时,JSP页面将提供企业级的扩展性和性能,这对于在虚拟企业中部署基于Web的应用是必需的。 2.3JDBC接口技术JDBC是一种可用于执行SQL语句的JavaAPI(ApplicationProgrammingInterface应用程序设计接口)。它由一些Java语言编写的类和界面组成。JDBC为数据库应用开发人员、数据库前台工具开发人员提供了一种标准的应用程序设计接口,使开发人员可以用纯Java语言编写完整的数据库应用程序。2.3.1ODBC简介说到JDBC,很容易让人联想到另一个十分熟悉的字眼“ODBC”。ODBC是OpenDatabaseConnectivity的英文简写。它是一种用来在相关或不相关的数据库管理系统(DBMS)中存取数据的,用C语言实现的,标准应用程序数据接口。通过ODBCAPI,应用程序可以存取保存在多种不同数据库管理系统(DBMS)中的数据,而不论每个DBMS使用了何种数据存储格式和编程接口。2.3.2JDBC技术JDBC是一种可用于执行SQL语句的JavaAPI(ApplicationProgrammingInterface,应用程序设计接口)。它由一些Java语言写的类、界面组成。JDBC给数据库应用开发人员、数据库前台工具开发人员提供了一种标准的应用程序设计接口,使开发人员可以用纯Java语言编写完整的数据库应用程序。通过使用JDBC,开发人员可以很方便地将SQL语句传送给几乎任何一种数据库。也就是说,开发人员可以不必写一个程序访问Sybase,写另一个程序访问Oracle,再写一个程序访问Microsoft的SQLServer。用JDBC写的程序能够自动地将SQL语句传送给相应的数据库管理系统(DBMS)。不但如此,使用Java编写的应用程序可以在任何支持Java的平台上运行,不必在不同的平台上编写不同的应用。Java和JDBC的结合可以让开发人员在开发数据库应用时真正实现“WriteOnce,RunEverywhere!”Java具有健壮、安全、易用等特性,而且支持自动网上下载,本质上是一种很好的数据库应用的编程语言。它所需要的是Java应用如何同各种各样的数据库连接,JDBC正是实现这种连接的关键。JDBC扩展了Java的能力,如使用Java和JDBCAPI就可以公布一个Web页,页中带有能访问远端数据库的Applet。或者企业可以通过JDBC让全部的职工(他们可以使用不同的操作系统,如Windwos,Machintosh和UNIX)在Intranet上连接到几个全球数据库上,而这几个全球数据库可以是不相同的。随着越来越多的程序开发人员使用Java语言,对Java访问数据库易操作性的需求越来越强烈。MIS管理人员喜欢Java和JDBC,因为这样可以更容易经济地公布信息。各种已经安装在数据库中的事务处理都将继续正常运行,甚至这些事务处理是存储在不同的数据库管理系统中;而对新的数据库应用来说,开发时间将缩短,安装和版本升级将大大简化。程序员可以编写或改写一个程序,然后将它放在服务器上,而每个用户都可以访问服务器得到最新的版本。对于信息服务行业,Java和JDBC提供了一种很好的向外界用户更新信息的方法。 简单地说,JDBC能完成下列三件事: 1)同一个数据库建立连接; 2)向数据库发送SQL语句; 3)处理数据库返回的结果。 JDBC是一种底层API,这意味着它将直接调用SQL命令。JDBC完全胜任这个任务,而且比其他数据库互联更加容易实现。同时它也是构造高层API和数据库开发工具的基础。高层API和数据库开发工具应该是用户界面更加友好,使用更加方便,更易于理解的。但所有这样的API将最终被翻译为象JDBC这样的底层API。目前两种基于JDBC的高层API正处在开发阶段。 1)SQL语言嵌入Java的预处理器。虽然DBMS已经实现了SQL查询,但JDBC要求SQL语句被当作字符串参数传送给Java程序。而嵌入式SQL预处理器允许程序员将SQL语句混用:Java变量可以在SQL语句中使用,来接收或提供数值。然后SQL的预处理器将把这种JavaSQL混用的程序翻译成带有JDBCAPI的Java程序。 2)实现从关系数据库到Java类的直接映射。Javasoft和其他公司已经宣布要实现这一技术。在这种“对象关系”映射中,表的每一行都将变成这类的一个实例,每一列的值对应实例的一个属性。程序员可以直接操作Java的对象;而存取所需要的SQL调用将在内部直接产生。还可以实现更加复杂的映射,比如多张表的行在一个Java的类中实现。 随着大家对JDBC兴趣的不断浓厚,越来越多的开发人员已经开始利用JDBC为基础的工具进行开发。这使开发工作变得容易。同时,程序员也正在开发对最终用户来说访问数据库更加容易的应用程序。2.3.3JDBC两层模型和三层模型JDBC支持两层模型,也支持三层模型访问数据库。 两层模型中,一个java Appple或者一个JAva应用直接同数据库连接。这就需要能直接被访问的数据库进行连接的JDBC驱动器。用户的SQL语句被传送给数据库,而这些语句执行的结果将被传回给用户。数据库可以在同一机器上,也可以另一机器上通过网络进行连接。这被称为“Client/Server”结构,用户的计算机作为Client,运行数据库的计算机作为Server。这个网络可是intranet,比如连接全体雇员的企业内部网,当然也可以是internet。在三层模型中,命令将被发送到服务的“中间层”,而“中间层”将SQL语句发送到数据库。数据库处理SQL语句并将结果返回“中间层”,然后“中间层”将它们 返回用户。MIS管理员将发现三层模型很有吸引力,因为“中间层”可以进行对访问的控制并协同数据库的更新,另一个优势就是如果有一个“中间层”用户就可以使用一个易用的高层的API,这个API可以由“中间层”进行转换,转换成底层的调用。而且,在许多情况下,三层模型可以提供更好的性能。 到目前为止,“中间层”通常还是用C或C+实现,以保证其高性能。但随着优化编译器的引入,将java的字节码转换成高效的机器码,用java来实现“中间层”将越来越实际。而JDBC是允许从一个java“中间层”访问数据库的关键。3系统结构3.1JSP Servlets和JavaBean来构成系统本节我们讨论用JSP,Servlets,和JavaBean来构成一个系统的途径。下面有集中不同的结构。每一种都是从上一种发展过来的,下面的图表显示了发展过程的梗概。 (图3.1)当Sun公司开始推广JSP的时候,很多人认为可以通过Web页面来请求的企业级结构将会取代Servlet。虽然JSP是J2EE规范的关键组成部分,它处理请求和应答机制。我们需要更深入的研究JSP和Servlet的关系。本节的另一个部分谈了JSP代码的实现细节,如何编译转化为Servlet。JSP是建立在Servlet API基础之上的,;利用了Servlet的语义。理解了这个,提出一个有意思的问题:我们是否不再需要在使用WEB的系统中开发标准的Servlet?是否有一种方法来结合JSP和Servlet?如果有的话,我们需要把Java代码放在何处?在JSP的请求过程中,是否涉及到了其他的组件,比如说JavaBean?如果有的话,他们在这个体系结构处与什么位置,扮演什么角色?明白这些问题是很重要的。虽然JSP技术是基本的Servlet技术的继承,但是JSP在Servlet的基础上有所创新,他们可以互相协作,互相补充对方的不足。3.1.1体系结构在讨论体系结构之前,有必要提一下两种使用JSP技术的基本方法第一种是以页面为中心(Page-Centric)的(Client/Server)方式,这样方式是把请求直接发给JSP页面。 第二中方式分发方式(多层结构的)。这种方式以一个JSP或者Servlet做为一个基本的控制器,它又把请求分给JSP页面或者JavaBean。 首先我们看看Page-Centric的结构。这样的结构通常都是来客户机和服务器端都有一个应用程序。最常见的例子是PowerBuilder的例子。Servlet或者JSP在服务器端截获客户的请求,直接的访问数据库等资源。 (图3.2) 这个结构的优点就是编程简单。允许页面的设计者根据资源的状态动态的生成页面的内容。但是,这样的结构不适合多个客户同时访问资源,这样同时会有大量的请求需要服务端来处理。每个请求都会建立一个连接,消耗一定的资源。这样,需要让这些连接共享一些资源。其中最明显的例子就是用JDBC连接数据库中用到的连接池(Connection pools)。对结构使用不适当的话,会导致JSP中出现大量的JAVA代码。这虽然对java程序设计人员不会有什么问题,可是大量的代码分散在JSP中,不利于维护和修改。这种基本的结构包括通过嵌入在JSP中的代码直接的向服务器发请求。这样有几个优点:从开发看来,成本很低。所有的JAVA代码都嵌入到HTML中,复杂性降低了。 (图3.3)减少了复杂性,当系统规模增大的时候,这种结构的缺点也出来了。例如,把太多的应用逻辑放到了JSP页面中。前面我们提到,利用Servlet或者Bean可以把开发者角色分的更清楚,提高代码的可重用性。 本论文所用的是多层结构的JSP,在这种结构下,用一个Servlet或者JSP当作主要的控制器。将所有的客户请求分配给其它的JSP、JavaBean或者EJB。 在一个多层结构的应用系统中,服务端的被分成好几层,如图3.4所示: (图3.4)在本论文中,应用系统是一个多层结构的,中间层的JSP通过其它的对象或者Enterprise JavaBean来访问后台资源。EJB服务器和EJB提供访问访问资源的方法,支持事务,支持安全管理。目前,J2EE支持这样的编程。多层结构应用设计的第一步,是明确系统涉及的对象和他们之间的关系。也就是首先要确定对象模式。这一步可以通过Rational Rose之类的工具来实现。通常,对象模式的确定需要特别小心,如果对象太多,会增加系统的复杂性。如果对象模式做的好的话,可以说系统就成功了一半。然后是确定JSP和Servlet,根据他们扮演的角色的不同,分成两类。在J2EE中都叫做web组件。1、一类(Front-end)是用来处理应用流程的。其中有很多对后台对象(例如EJB)的调用。他们不处理页面的表示问题,只是截获从用户过来的请求,提供应用系统的一个入口。简化安全管理,而且易于控制应用系统的状态。2、还有一类(Presentation)是用来生成HTML或者XML的。这些JSP主要的目的就是来动态的产生页面内容。图3.5表示了这两类之间的关系,第一类(Front-end)接收一个请求,然后选择一个合适的Presentation组件来处理。处理之后,或者直接把结果返回给客户,或者把结果返回给另一个前端组件。 (图3.5)有时这种对象模式的划分是比较困难的。但是,划分的越清晰,那设计也越清晰。 这种分类有点类似与模式-视图(Model-View)结构,front-end相当于Model,presentation相当与View。如图3.6:(图3.6)在这个模式下,JSP用来产生表示层或者执行一些操作。Front-end组件当作控制器,处理客户的请求,生成JavaBean和EJB对象。而在Presentation JSP组件中并没有处理逻辑过程,只是简单的从别的对象中得到数据,然后动态的插入到模板中。如果不愿意写front-end类型的Servlet,也可以写一些只包括代码,不包含任何Presentation表示部分的逻辑。不管是写Servlet还是写JSP,这样的结构都把内容和表示分开了,将程序开发者和页面设计者比较明确的区分开来。对系统,特别是比较大规模的系统的设计是比较适合的。3.2Web 应用程序模型应用程序是什么,简单的来说,它是人类客观世界的问题领域在计算机世界的解决方案。我们生活的客观世界复杂多样,计算机世界也是博大精深,怎样从普遍的意义上来表述应用程序是一个非常有用的课题。应用程序的编程模型,也就是应用程序的拓扑结构,是一门关于应用程序的科学。从事软件设计、软件开发的人员,如果能够就应用程序的编程模型有足够的重视,将受益匪浅。3.2.1应用程序的基本功能单元 组成应用程序的功能代码及其资源,按照其在应用程序中的功能,可以简单分解成为三个部分:用户界面(User Interface),事务逻辑(Business Logic)和数据存取(Data Access)。应用程序的基本功能单元如图3.7所示。图3.7、应用程序功能分解3.2.2多层客户服务器应用模型 两层应用程序模型的出现极大的增加了应用程序的灵活性,同时也带来应用程序可维护性的提高。但是,在两层应用程序中仍然存在着不便维护的缺点,客户端的逻辑或是客户端的嵌入SQL极有可能随着数据库的改变或是事务逻辑的变化而变化,不得不重新实现并发布一个新的客户端,也就是说,这样的应用程序模型仍然是比较脆弱的。三层或是更多层应用模型的出现,解决了这样的问题。 在三层的应用程序模型中,事务逻辑与用户界面和数据存取明显的分离出来,将客户端的用户界面与服务器端数据存取隔离开来,极大的改善了应用程序的可维护性。 注意,虽然最常用的多层客户/服务器模型是三层模型,但是,现在已经出现了将事务逻辑层和数据存取层增加的趋势。这种更多更细的分层不但提高了系统的维护性能,同时也增加了系统的重用性和与分布式系统概念融合的可能性。 图3.8所示为一个典型的三层模型:图3.8、三层客户/服务器应用模型3.2.3分布式系统 在分层的客户/服务器应用模型中,下一层为上一层提供服务,上一层调用下一层提供的服务,这不利于功能的重用。为了最大限度的发挥系统的功能,分布式系统打破分层系统中对于客户和服务器的定义,将应用程序的代码实现分解为遵循某个标准规范的对象,这些对象中提供的功能被封装到接口中。在某个具体的服务逻辑中,一个对象可能充当客户端的功能,它需要调用另一个对象提供服务;但是,在另一个服务逻辑中,同一个对象可能为另一个对象提供服务,充当服务器的功能。 常见的分布式对象规范有COM/DCOM、CORBA、Java RMI等。 分布式系统模型如图3.9所示。图3.9、分布式系统模型3.2.4基于Web的多层应用模型 WWW的发展,使得Internet的应用不再局限于提供一些静态的内容、甚至也不满足于提供一些简单的动态内容。传统以独立的软件包形式发布的一些应用程序,正逐渐被搬上Internet,以出租服务的方式提供给用户,这就是ASP(Application Service Provider)。由于Web的特点是Internet 上的HTTP,是一种请求应答式的无连接的服务形式,所以这种基于Web的应用程序在体系结构上有其独特的特点。图3.10、基于Web的多层应用模型4可维护与实现4.1采用灵活与可维护的设计模式当您设计建造不同的应用程序时,您时而不时地会碰到相同或者非 常类似的问题域。每次碰到这些问题时您都必须去重新寻找解决方案 。为了节省时间与精力,如果有一个知识库,能够捕获这样的具有共 性的问题域与被证明是正确的解决方案,将是非常理想的。 用最简单的话来说,这样的通用解决方案就是一个设计模式。这样 的知识库,或者说参考处,包含了这些模式,就是设计模式目录。模式摸板通常包含一个用来描述模式所代表的意义的名字,紧跟着 的是模式的适用范围、动机、在实现过程中的问题等等。除了描述问 题与阐明解决方案,模式还解释在使用本模式的实现过程中可能存在 的问题和后果。使用这样的模式让应用程序的设计变得透明。这些模式已经被不同 的开发者在不同的领域内成功地使用过,所以,一个模式的优点和缺 点(也包括实现过程中的问题)都已经事先知道。所有的设计模式都 是可重复使用的,并且在特定的场合中适用。这就给了您灵活性。同 J2EE应用程序有关的设计模式的使用在J2EE平台技术方面提供了更多 优势来展示了解决方案。 4.1.1模型-视图-控制器如果您所建造的这个应用程序只是给单一类型的客户使用的, 那问题就简单了。我们可以简单地将数据存取/数据修改逻辑与不同的 客户视图逻辑混合在一起。但是随着一个完全互连的无线世界的出现, 客户端的设备从PDA、蜂窝电话到一个功能强大的桌面系统上的浏览器 都有,这还不包括其他的传统设备。在这种情况下,将数据存取与视 图混合在一起来作为解决方案,将会有很多问题,这是因为: 您必须开发这个应用程序的不同版本,以便适应与支持各种不同 的客户需要 由于视图的代码与数据存取/修改的代码纠缠在一起,重复的数 据存取/修改代码散步在各处,这就使得应用程序几乎是不可维护的。 开发生命周期被不必要地扩展了 为了找到这个问题的解决方案,请注意以下几点: 不论客户类型如何,被存取与显示的数据必须来自同一个企业级 的数据源。 所有的客户必须能够对数据源进行修改。 不论是修改一个客户类型,还是修改数据存取/修改逻辑,都不应 该影响到应用程序的其他组件。 我们需要开发出松散耦合的应用程序的解决方案。采用模型-视图-控制器(MVC)结构。MVC已经被非常有效地应用在GUI类型的 应用程序的设计上。通过在J2EE应用程序上采用MVC结构,您可以将数据 存取逻辑与数据表现逻辑分别开来。您也可以建造一个灵活的并且是很 容易扩充的控制器来控制应用程序的整个流程。下图展示了MVC结构。 图4.1如下所述,MVC结构可以映射到多层的企业级J2EE应用程序: 所有的企业级数据与用于处理数据的事物逻辑都能用这个模型来 表示。 视图可以通过这个模型存取数据,然后决定如何将数据表达给客 户。当模型改变时,视图必须确认给用户所表达的内容也跟着改变。 控制器可以与视图交互,并且将客户的行为转换为模型可以理解 与执行的行为。控制器也根据最新的客户行为与相关的模型行为来决 定下一个要被显示的视图是什么。 将上述的逻辑应用到应用程序中,您将这样建造应用程序: 应用程序的事务逻辑由组成MVC结构中的模型的EJB来代表。模型 对来自控制器的要求作出反映,并存取/修改相应的数据。 应用程序界面的不同屏组成MVC结构中的视图。当模型改变时,视 图自动更新。 应用程序的控制器是一些对象的集合,这些对象接收用户的行为, 并且将其转换为模型可理解的请求,一旦模型完成了对请求的处理, 就决定下一个要显示在屏幕上的内容是什么。 4.2要求这里要实现一个数据库浏览器应用程序:用于显示一个关系数据库,通过它可以查看数据库中的任何表,并显示经过多种不同格式查询后的结果。Web界面的要求是允许用户浏览相关数据库中的内容.该界面使用户可以通过指定一个JDBC驱动器或URL来与一个数据库连接。接着,应用程序会允许用户浏览数据库中定义的所有表,并且可以选择任何一个表对其数据进行处理。同样,用户还可以输入SQL查询语句并查看这些查询操作产生的列表数据。在用户使用会话的任何时间内,必须确保用户可以很容易地断开数据库,并连接到另一个数据库上。用户可以自己选择浏览数据的方式。在开发第一阶段,要求具备以下三个视图页面:1、一个以清晰只读格式显示表格内容的列表视图2、一个允许数据被剪切并被拈贴到电子表格或文本文件的CSV(以逗号分开的变量)视图3、一个可编辑的视图,允许对任何一行数据加以更新刚开始时,程序的实用性将比表达方式更加重要。但是,有一点是最基本的,既程序应该在不需要采用大量技术的情况下,就可以很容易改变JSP外观。将来很可能会需要使用其它视图:一些XML视图以及一个微软Excel格式的视图,后者可以使用户不必在自己的浏览器里浏览,而直接下载所需内容。每个视图都必须允许用户切换到表示相同数据的另一视图中。在选定一个新视图前,当前视图应该是默认视图。在随后的开发过程中,可能还需要使用一个String小应用程序来实现快速响应功能,应此一定不要将数据对象与JSP表示联系在一起。在系统开发第一阶段中,无须考虑用户会话中的个性化信息,在随后的开发阶段中,还会对这一功能进行设计。另一项需要考虑的长远目标,是应用程序除了要支持关系数据库外,还应支持其他数据源。此时,可能需要包括那些使用JNDI来访问的目录。接下来要介绍这些功能。首次访问应用程序时,将要求用户提供有关数据库连接的地址信息,如图4.2所示。图4.2用户一旦提交了有效的数据,系统将要求用户在浏览实际数据之前,选择一个表格或输入一个SQL查询语句,如图4.3所示。 图4.3在选择了响应的表格之后,用户将可以在数据的不同视图之间进行切换,并且可以随时选择不同的表格或查询结果。下面是一个典型的数据视图,其中包含了整个应用程序内的导航链接,如图4.4所示。 图4.4当用户浏览完所需的数据库时,可以退出系统。此时,所有打开的资源都将被关闭,并且产生一个确认业面。4.3设计开发周期的第一部是,JSP/JAVA程序员将要求商家预排所有的页面:与前面显示的视图相似,但要更详细一些。在进行预排工作中,还应确定所需的错误处理操作。这样做,可以使开发员在项目早期的设计阶段对此有一个大致的概念。例如,实际应用程序总是存在风险的,开发程序中功能最为复杂的部分会有多大难度?性能是否会令人满意?早期开发概念模型使开发员可以在开发周期的初级阶段对这些风险加以估量和解决,在交互式的开发过程中,这是非常重要的一步。为了更加全面的理解网页流程,可以使用一个状态图,它是理解和处理网络应用程序行为的一个有效途径(注意状态图不同于网络流程图。应用程序的状态转换不一定与用户会话的网页流程相对应)。下面这个状态图显示了数据库浏览器转换过程中的状态的以及各个状态间的合法转换,如图4.5所示。 图4.5与程序员同时工作的网络设计员将制作出网页的HTML模板。一旦网页流程确定下来并正确实施,这些HTML模板在添加了必要的JSP代码之后就可以实现动态功能了。至关重要的是,最终形成的JSP中应尽量少的包含处理逻辑。这样一来,对数据的解释做进一步修改的网页设计人员才能够理解它们。技术设计的第一步重要工作是确认应用程序对象。建立应用程序时,可能需要一个数据源对象,一个或几个为图形用户界面提供这一对象的视图,以及一些显示数据的JSP。JSP只是中间层用来显示数据的视图,JSP不能直接访问系统数据对象。设计时必须纵向查看应用程序结构,并决定每个组件应属于哪一层。数据源目标很明显属于企业源抽象层。除了所需的网页流程,这应用程序中几乎就没有什么其他业务逻辑了,应此,业务层中的实现并不重要。然而,这并不是说JSP中拥有大部分应用程序业务逻辑。非特定用户界面显示层的、是必须的。此外,还应了解今后可能需要就使用Swing接口,以及一些JSP无法显示的数据视图(如Excel)。该层不仅要为JSP提供数据,还要为任何图形用户界面提供服务。它将包含大量系统数据模型。程序会使用views标志库,当需要时,可以通过它来使用Swing数据模型,该标志库将在随后介绍。使用这一技术,无须使用大量脚本语言既可生成动态标志,并且确保系统的绝大部分实现代码可以独立JSP技术。会话bean将保存用户的个性化信息。它还将保存每位用户所需数据模板的备份。由于会话bean可以保存随会话状态改变而改变的数据模板,所以无须对网页bean做过多的要求(通常,一个网页bean可以容纳每个视图的模板)。这反映一个事实,既所有应用视图显示的数据结构是相同的,应此该结构应该属于应用程序,而不是单独属于任何一页。由于存在添加视图的可能性,所以使用请求控制器模式可以最大限度地提高编写程序的灵活性。这意味着当需要增加视图时,JSP中无需在包含网页流程业务逻辑。与前面介绍请求控制器模式时使用的示例不同,实现本程序时,使用JSP控制器(这样做,更容易实现和部署应用程序)。本程序还使用了一个特殊的action参数(而不是映射的URL)来为每一请求指定处理程序。控制器根据指令参数值动态的载入处理程序类别,以确保应用程序的功能可以通过增加新的请求处理程序得到扩展。4.4实现由于表示方式与数据源分离,所以可以分别设计表示方式(JSP和支持类)和数据源。4.4.1表示层-视图标志库视图(view)标志库视图提供了几套自定义标志,用于显示存储在Swing数据模型中的数据。其中使用的标志有:view:jspTable保存TableModel,以便于子标志使用。获取标题打开与关闭的属性。views:headingOpen配置TableModel标题的打开属性。views:headingClose配置TableModel标题的关闭属性。views:headingCell重复处理表格标题,并输出相应信息。views:rows重复处理表格中的所有行。views:rowOpen配置RowsTag的行打开属性。views:rowClose配置RowsTag的行关闭属性。views:cell模拟HeaderTag重复处理表格中的行。表示层-ui和ui.requesthandlers软件包表示层的核心是请求控制器,controller.jsp。它可以用来创建RequestController会话bean的一个实例,该实例可以实现页面流程逻辑,并可以推动控制器定义的JSP视图对请求做出响应。是入口点。4.4.2逻辑RequestController类将实现应用程序的所有网页流程。RequestController.javaRequestController本身的任务是检查参数,并且调用适当的RequestController实例来指定所需的JSP视图,并将这一视图的URL返回到controller.jsp中。通过在行为参数值和值类名间建立映射,RequestController可以指定所需的RequestHandler的类型。例如,DBConnect(应用程序首先要完成的操作)被映射到一个名为ui.requestthandlers.DBConnect的Java类上,后者必须实现RequestHandler接口。出于效率原因,RequestController类将把实例化后的请求处理器保存到一个散列表中,以便将来可以利用它们来处理同一类型的请求。这样做可以确保映射机制的使用不会过多地降低应用程序的性能。如果行为参数没有被传递到该网页中将向用户显示注册页面。所有请求都属于RequestController类,该类负责实例化系统所需的bean,并根据需要,使用映射机制来实例化所需的请求处理器。RequestController.getNextPage()getNextPage()方法可以将所有发往应用程序的请求全部发送出去。该方法将对请求信息进行处理,更新会话,并返回最终所得JSP视图的URL。该方法首先检查行为参数中是否包含一个值,如果没有,将向用户显示注册网页。否则,该程序将实例化与指令相连的处理器。如果没有与行为参数相关的处理器,将产生一个BrowserException异常。最后,如果在使用CheckSessionBeanIsAavilable()方法后,还是没有找到于之相连的处理器,那么将创建一个会话bean以结束操作流程,并返回处理器所选视图的URL。RequestController.getHandlerInstance()正如前面所说的,getHandlerInstance()在散列表中存储了各类的实例。RequestController.checkDessionBeanIsAvailable()CheckSessionBeanIsAvailable()将对用户会话bean进行检查,并将其返回。如果找不到将创建一个新的bean实例。Requ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国烤漆印花工艺门行业投资前景及策略咨询研究报告
- 2025年中国海力健营养胶囊行业投资前景及策略咨询研究报告
- 2025年中国水不漏产品行业投资前景及策略咨询研究报告
- 2025年中国标准电势与待测低电势行业市场调查、投资前景及策略咨询报告
- 2025年中国普通型热交换器行业投资前景及策略咨询研究报告
- 2025年中国摄像监控镜头行业投资前景及策略咨询研究报告
- 地产企业合伙人管理制度
- 四平市公共场所管理制度
- 公司租赁办公室管理制度
- 婚孕检医疗质量管理制度
- 幼儿园大班语言课件:《毕业诗》
- 劳动力保证措施以及计划安排
- 2021利达JB-QG-LD988EL JB-QT-LD988EL 火灾报警控制器 消防联动控制器调试手册
- 24春国家开放大学《班级管理》形考任务1-4参考答案
- 浙二医院护士进修心得体会6篇
- 2021年中国社会科学院大学统计学原理期末精练试卷
- 手术室坠床跌倒应急预案
- 2024年《军事理论》考试题库附答案(含各题型)
- 《风力发电厂调试规程》
- 广东省中山市2022-2023学年高二下学期期末数学试题(学生版+解析)
- 《无衣》教学设计 统编版高中语文选择性必修上册
评论
0/150
提交评论