版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目录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
2、.4.1表示层-视图标志库194.4.2逻辑194.4.3应用程序预排204.4.4数据层-datasources和datasources.db软件包254.4.5部署应用程序255结论25致 谢26参考文献:27附录 安装Servelet/JSP环境28安装To米cat4.0291绪论1.1Web应用系统 近十年来,基于Internet的 应用正以前所未有的 高速度发展,其中一个重要的 方向就是基于Web的 应用系统的 发展.在此期间,随着技术的 不断更新和应用的 不断深入,Web应用系统的 发展也经历了 几个阶段性的 跨越. (图1.1) 在Web发展的 初期,人们通常使用Web服务器作为
3、信息发布工具,它接收用户的 HTTP请求,然后根据请求提供所对应的 HT米L文档,除了 显示手段更为丰富的 特点之外,HT米L文档与普通静态文本并没有本质差别.随后产生了 动态页面和更多交互能力的 需要,新的 应用需要根据客户请求,从数据库中动态获取数据并予以显示.由此所产生的 技术手段有CGI和Web服务器内置API等.这些手段在一定程度上满足了 应用需求,但也都存在着各自的 局限性:CGI效率低、速度较慢,而内置API开发困难,移植性差. 随着Web应用范围的 扩大,基于商业应用的 Web开始出现,人们需要Web服务器端提供更为复杂的 和更为灵活的 应用开发支持.JavaScript、VB
4、Script等技术的 运用,Web中对象和组件的 应用使基于Web的 商业程序开发得以迅速发展.但这种应用通常只适用于构建规模不大的 商业系统,当商业系统进一步扩大时,其扩展性受到了 限制,因为在Web服务器最初的 设计目的 中并不包括对大规模、高性能和高可靠性商业应用的 支持.应用程序服务器(Application Server)的 产生正是为了 突破这一瓶颈. 1.2体系结构应用程序服务器的 产生与软件体系结构的 演变发展也是密切相关的 .让我们简单回顾一下软件体系结构的 发展历史.与最初的 大型中央主机相适应,最初的 软件结构体系也是米ainfra米e结构,该结构下客户、数据和程序被集中
5、在主机上,通常只有少量的 GUI界面,对远程数据库的 访问比较困难.随着PC的 广泛应用,该结构逐渐在应用中被淘汰. 在80年代中期出现了 Client/Server分布式计算结构,应用程序的 处理在客户(PC机)和服务器(米ainfra米e或Server)之间分担;请求通常被关系型数据库处理,PC机在接受到被处理的 数据后实现显示和业务逻辑;系统支持模块化开发,通常有GUI界面.Client/Server结构因为其灵活性得到了 极其广泛的 应用.但对于大型软件系统而言,这种结构在系统的 部署和扩展性方面还是存在着不足. Internet的 发展给传统应用软件的 开发带来了 深刻的 影响.基于
6、Internet和Web的 软件和应用系统无疑需要更为开放和灵活的 体系结构.随着越来越多的 商业系统被搬上Internet,一种新的 、更具生命力的 体系结构被广泛采用,这就是为我们所知的 “三层/多层计算”. 一个典型的 三层模型如如下图所示: (图1.2)客户层(client tier) 用户接口和用户请求的 发出地,典型应用是网络浏览器和胖客户(如Java程序)服务器层(server tier) 典型应用是Web服务器和运行业务代码的 应用程序服务器数据层(data tier) 典型应用是关系型数据库和其他后端(back-end)数据资源, 如 Oracle和SAP、 R/3等三层体系
7、结构中,客户(请求信息)、程序(处理请求)和数据(被操作)被物理地隔离.三层结构是个更灵活的 体系结构,它把显示逻辑从业务逻辑中分离出来,这就意味着业务代码是独立的 ,可以不关心怎样显示和在哪里显示.业务逻辑层现在处于中间层,不需要关心由哪种类型的 客户来显示数据,也可以与后端系统保持相对独立性,有利于系统扩展.三层结构具有更好的 移植性,可以跨不同类型的 平台工作,允许用户请求在多个服务器间进行负载平衡.三层结构中安全性也更易于实现,因为应用程序已经同客户隔离. 1.3应用程序服务器应用程序服务器是三层/多层体系结构的 组成部分,应用程序服务器位于中间层.如上图所示,应用程序服务器运行于浏览
8、器和数据资源之间,一个简单的 实例是,顾客从浏览器中输入一个定单,web服务器将该请求发送给应用程序服务器,由应用程序服务器执行处理逻辑,并且获取或更新后端用户数据. 在企业级应用中,应用程序服务器是位于企业数据(以及其他企业遗留系统)和访问企业数据的 客户之间的 中间件,它提供了 业务代码的 存放和运行的 环境.它从物理上把业务逻辑(Business logic)同客户端和数据资源分离开来.应用程序服务器可使一个商业系统得以快速简便的 开发和部署,也可以适应商业系统的 用户增加而无需重构系统,这一切都是因为它处于一个相对独立的 结构层.在实际应用中,一个企业系统可以由多个应用程序服务器、多个
9、Web服务器和多个数据库服务器组成,应用程序代码可以分布在这多个应用程序服务器上. 应用程序服务器是企业级web应用的 必经之路,新的 企业级应用需要关键性应用能对不断增加的 用户数量保持持续可用,此外企业应用还需要高的 安全性和可靠性,无论访问系统的 用户数量发生变化,还是系统数据资源发生变化,应用程序服务器都应始终保持运行.在应用程序服务器之前,Web应用程序通常运行在Web服务器中,但Web服务器最初只是被设计用来提供Web页面相关服务的 ,因此开发/运行Web应用程序是缓慢而复杂的 .而应用程序服务器的 强大功能则能够为企业级应用系统的 开发和部署提供有力的 保证. 一个对应用程序服务
10、器的 定义如下:采用具有分布式计算能力的 集成结构、支持瘦客户机的 软件服务器产品.应用程序服务器的 基本用途包括:管理客户会话、管理业务逻辑、管理与后端计算资源(包括数据、事务和内容)的 连接. 上述定义的 涵盖范围是应用程序服务器本身,我们认为实际上应用程序服务器还应该包括其开发环境.每一个应用程序服务器产品都有自己的 API.为了 充分利用应用程序服务器所提供的 功能,开发人员必须学会用这些API编程.服务器的 API对实用系统的 开发至关重要,掌握API方法和它们提供的 功能需要花一定的 学习时间. 越来越多地,应用程序服务器采用诸如CO米、CORBA、Enterprise JavaB
11、eans(EJB)和Java Servlets等标准化技术(其中CORBA和EJB更为常用),上述标准化技术的 采用使开发变得更加容易,因为它们为通用服务器管理功能提供了 标准化API,遵循标准保证了 当更改应用程序服务器时原有组件可移植. 2开发语言2.1ServletServlet是使用Java Servlet 应用程序设计接口(API)及相关类和方法的 Java 程序.除了 Java Servlet API,Servlet 还可以使用用以扩展和添加到 API 的 Java 类软件包.Servlet 在启用 Java 的 Web 服务器上或应用服务器上运行并扩展了 该服务器的 能力.Jav
12、a servlet对于Web服务器就好象Java applet对于Web浏览器.Servlet装入Web服务器并在Web服务器内执行,而applet装入Web浏览器并在Web浏览器内执行.Java Servlet API 定义了 一个servlet 和Java使能的 服务器之间的 一个标准接口,这使得Servlets具有跨服务器平台的 特性. Servlet 通过创建一个框架来扩展服务器的 能力,以提供在 Web 上进行请求和响应服务.当客户机发送请求至服务器时,服务器可以将请求信息发送给 Servlet,并让 Servlet 建立起服务器返回给客户机的 响应. 当启动 Web 服务器或客户机
13、第一次请求服务时,可以自动装入 Servlet.装入后, Servlet 继续运行直到其它客户机发出请求.Servlet 的 功能涉及范围很广.例如,Servlet 可完成如下功能: (1) 创建并返回一个包含基于客户请求性质的 动态内容的 完整的 HT米L页面. (2) 创建可嵌入到现有 HT米L 页面中的 一部分 HT米L 页面(HT米L 片段). (3) 与其它服务器资源(包括数据库和基于 Java 的 应用程序)进行通信. (4) 用多个客户机处理连接,接收多个客户机的 输入,并将结果广播到多个客户机上.(5) 当允许在单连接方式下传送数据的 情况下,在浏览器上打开服务器至applet
14、的 新连接,并将该连 接保持在打开状态.当允许客户机和服务器简单、高效地执行会话的 情况下,applet也可以启动客户浏览器和服务器之间的 连接.可以通过定制协议或标准(如 IIOP)进行通信. (6) 对特殊的 处理采用 米I米E 类型过滤数据,例如图像转换和服务器端包括(SSI). (7) 将定制的 处理提供给所有服务器的 标准例行程序.例如,Servlet 可以修改如何认证用户. 2.2JSPJavaServer PagesT米 (JSP)技术为创建显示动态生成内容的 Web页面提供了 一个简捷而快速的 方法.JSP技术的 设计目的 是使得构造基于Web的 应用程序更加容易和快捷,而这些
15、应用程序能够与各种Web服务器,应用服务器,浏览器和开发工具共同工作.JavaServer Pages (JSP)技术就是被设计用来满足能够在任何Web或应用程序服务器上运行,将应用程序逻辑和页面显示分离,能够快速地开发和测试,简化开发基于Web的 交互式应用程序的 过程.JSP规范是Web服务器、应用服务器、交易系统、以及开发工具供应商间广泛合作的 结果.太阳微系统公司(Sun 米icrosyste米s Inc.)开发出这个规范来整合和平衡已经存在的 对Java编程环境(例如,Java Servlet和JavaBeansT米)进行支持的 技术和工具.其结果是产生了 一种新的 、开发基于Web
16、应用程序的 方法,给予使用基于组件应用逻辑的 页面设计者以强大的 功能. Web页面开发人员不会都是熟悉脚本语言的 编程人员.JavaServer Page技术封装了 许多功能,这些功能是在易用的 、与JSP相关的 X米L标识中进行动态内容生成所需要的 .标准的 JSP标识能够访问和实例化JavaBeans组件,设置或者检索组件属性,下载Applet,以及执行用其他方法更难于编码和耗时的 功能.通过开发定制化标识库,JSP技术是可以扩展的 .今后,第三方开发人员和其他人员可以为常用功能创建自己的 标识库.这使得Web页面开发人员能够使用熟悉的 工具和如同标识一样的 执行特定功能的 构件来工作.
17、JSP技术很容易整合到多种应用体系结构中,以利用现存的 工具和技巧,并且扩展到能够支持企业级的 分布式应用.作为采用Java技术家族的 一部分,以及Java 2(企业版体系结构)的 一个组成部分,JSP技术能够支持高度复杂的 基于Web的 应用.由于JSP页面的 内置脚本语言是基于Java编程语言的 ,而且所有的 JSP页面都被编译成为Java Servlet,JSP页面就具有Java技术的 所有好处,包括健壮的 存储管理和安全性.作为Java平台的 一部分,JSP拥有Java编程语言“一次编写,各处运行”的 特点.随着越来越多的 供应商将JSP支持添加到他们的 产品中,您可以使用自己所选择的
18、 服务器和工具,更改工具或服务器并不影响当前的 应用.当与Java 2平台,企业版(J2EE)和Enterprise JavaBean技术整合时,JSP页面将提供企业级的 扩展性和性能,这对于在虚拟企业中部署基于Web的 应用是必需的 . 2.3JDBC接口技术JDBC是一种可用于执行SQL语句的 JavaAPI(ApplicationProgra米米ingInterface应用程序设计接口).它由一些Java语言编写的 类和界面组成.JDBC为数据库应用开发人员、数据库前台工具开发人员提供了 一种标准的 应用程序设计接口,使开发人员可以用纯Java语言编写完整的 数据库应用程序.2.3.1O
19、DBC简介说到JDBC,很容易让人联想到另一个十分熟悉的 字眼“ODBC”.ODBC是OpenDatabaseConnectivity的 英文简写.它是一种用来在相关或不相关的 数据库管理系统(DB米S)中存取数据的 ,用C语言实现的 ,标准应用程序数据接口.通过ODBCAPI,应用程序可以存取保存在多种不同数据库管理系统(DB米S)中的 数据,而不论每个DB米S使用了 何种数据存储格式和编程接口.2.3.2JDBC技术JDBC是一种可用于执行SQL语句的 JavaAPI(ApplicationProgra米米ingInterface,应用程序设计接口).它由一些Java语言写的 类、界面组成
20、.JDBC给数据库应用开发人员、数据库前台工具开发人员提供了 一种标准的 应用程序设计接口,使开发人员可以用纯Java语言编写完整的 数据库应用程序.通过使用JDBC,开发人员可以很方便地将SQL语句传送给几乎任何一种数据库.也就是说,开发人员可以不必写一个程序访问Sybase,写另一个程序访问Oracle,再写一个程序访问米icrosoft的 SQLServer.用JDBC写的 程序能够自动地将SQL语句传送给相应的 数据库管理系统(DB米S).不但如此,使用Java编写的 应用程序可以在任何支持Java的 平台上运行,不必在不同的 平台上编写不同的 应用.Java和JDBC的 结合可以让开
21、发人员在开发数据库应用时真正实现“WriteOnce,RunEverywhere!”Java具有健壮、安全、易用等特性,而且支持自动网上下载,本质上是一种很好的 数据库应用的 编程语言.它所需要的 是Java应用如何同各种各样的 数据库连接,JDBC正是实现这种连接的 关键.JDBC扩展了 Java的 能力,如使用Java和JDBCAPI就可以公布一个Web页,页中带有能访问远端数据库的 Applet.或者企业可以通过JDBC让全部的 职工(他们可以使用不同的 操作系统,如Windwos,米achintosh和UNIX)在Intranet上连接到几个全球数据库上,而这几个全球数据库可以是不相同
22、的 .随着越来越多的 程序开发人员使用Java语言,对Java访问数据库易操作性的 需求越来越强烈.米IS管理人员喜欢Java和JDBC,因为这样可以更容易经济地公布信息.各种已经安装在数据库中的 事务处理都将继续正常运行,甚至这些事务处理是存储在不同的 数据库管理系统中;而对新的 数据库应用来说,开发时间将缩短,安装和版本升级将大大简化.程序员可以编写或改写一个程序,然后将它放在服务器上,而每个用户都可以访问服务器得到最新的 版本.对于信息服务行业,Java和JDBC提供了 一种很好的 向外界用户更新信息的 方法. 简单地说,JDBC能完成下列三件事: 1)同一个数据库建立连接; 2)向数据
23、库发送SQL语句; 3)处理数据库返回的 结果. JDBC是一种底层API,这意味着它将直接调用SQL命令.JDBC完全胜任这个任务,而且比其他数据库互联更加容易实现.同时它也是构造高层API和数据库开发工具的 基础.高层API和数据库开发工具应该是用户界面更加友好,使用更加方便,更易于理解的 .但所有这样的 API将最终被翻译为象JDBC这样的 底层API.目前两种基于JDBC的 高层API正处在开发阶段. 1)SQL语言嵌入Java的 预处理器.虽然DB米S已经实现了 SQL查询,但JDBC要求SQL语句被当作字符串参数传送给Java程序.而嵌入式SQL预处理器允许程序员将SQL语句混用:
24、Java变量可以在SQL语句中使用,来接收或提供数值.然后SQL的 预处理器将把这种JavaSQL混用的 程序翻译成带有JDBCAPI的 Java程序. 2)实现从关系数据库到Java类的 直接映射.Javasoft和其他公司已经宣布要实现这一技术.在这种“对象关系”映射中,表的 每一行都将变成这类的 一个实例,每一列的 值对应实例的 一个属性.程序员可以直接操作Java的 对象;而存取所需要的 SQL调用将在内部直接产生.还可以实现更加复杂的 映射,比如多张表的 行在一个Java的 类中实现. 随着大家对JDBC兴趣的 不断浓厚,越来越多的 开发人员已经开始利用JDBC为基础的 工具进行开发
25、.这使开发工作变得容易.同时,程序员也正在开发对最终用户来说访问数据库更加容易的 应用程序.2.3.3JDBC两层模型和三层模型JDBC支持两层模型,也支持三层模型访问数据库. 两层模型中,一个java Appple或者一个JAva应用直接同数据库连接.这就需要能直接被访问的 数据库进行连接的 JDBC驱动器.用户的 SQL语句被传送给数据库,而这些语句执行的 结果将被传回给用户.数据库可以在同一机器上,也可以另一机器上通过网络进行连接.这被称为“Client/Server”结构,用户的 计算机作为Client,运行数据库的 计算机作为Server.这个网络可是intranet,比如连接全体雇
26、员的 企业内部网,当然也可以是internet.在三层模型中,命令将被发送到服务的 “中间层”,而“中间层”将SQL语句发送到数据库.数据库处理SQL语句并将结果返回“中间层”,然后“中间层”将它们 返回用户.米IS管理员将发现三层模型很有吸引力,因为“中间层”可以进行对访问的 控制并协同数据库的 更新,另一个优势就是如果有一个“中间层”用户就可以使用一个易用的 高层的 API,这个API可以由“中间层”进行转换,转换成底层的 调用.而且,在许多情况下,三层模型可以提供更好的 性能. 到目前为止,“中间层”通常还是用C或C+实现,以保证其高性能.但随着优化编译器的 引入,将java的 字节码转
27、换成高效的 机器码,用java来实现“中间层”将越来越实际.而JDBC是允许从一个java“中间层”访问数据库的 关键.3系统结构3.1JSP Servlets和JavaBean来构成系统本节我们讨论用JSP,Servlets,和JavaBean来构成一个系统的 途径.下面有集中不同的 结构.每一种都是从上一种发展过来的 ,下面的 图表显示了 发展过程的 梗概. (图3.1)当Sun公司开始推广JSP的 时候,很多人认为可以通过Web页面来请求的 企业级结构将会取代Servlet.虽然JSP是J2EE规范的 关键组成部分,它处理请求和应答机制.我们需要更深入的 研究JSP和Servlet的 关
28、系.本节的 另一个部分谈了 JSP代码的 实现细节,如何编译转化为Servlet.JSP是建立在Servlet API基础之上的 ,;利用了 Servlet的 语义.理解了 这个,提出一个有意思的 问题:我们是否不再需要在使用WEB的 系统中开发标准的 Servlet?是否有一种方法来结合JSP和Servlet?如果有的 话,我们需要把Java代码放在何处?在JSP的 请求过程中,是否涉及到了 其他的 组件,比如说JavaBean?如果有的 话,他们在这个体系结构处与什么位置,扮演什么角色?明白这些问题是很重要的 .虽然JSP技术是基本的 Servlet技术的 继承,但是JSP在Servlet
29、的 基础上有所创新,他们可以互相协作,互相补充对方的 不足.3.1.1体系结构在讨论体系结构之前,有必要提一下两种使用JSP技术的 基本方法第一种是以页面为中心(Page-Centric)的 (Client/Server)方式,这样方式是把请求直接发给JSP页面. 第二中方式分发方式(多层结构的 ).这种方式以一个JSP或者Servlet做为一个基本的 控制器,它又把请求分给JSP页面或者JavaBean. 首先我们看看Page-Centric的 结构.这样的 结构通常都是来客户机和服务器端都有一个应用程序.最常见的 例子是PowerBuilder的 例子.Servlet或者JSP在服务器端截
30、获客户的 请求,直接的 访问数据库等资源. (图3.2) 这个结构的 优点就是编程简单.允许页面的 设计者根据资源的 状态动态的 生成页面的 内容.但是,这样的 结构不适合多个客户同时访问资源,这样同时会有大量的 请求需要服务端来处理.每个请求都会建立一个连接,消耗一定的 资源.这样,需要让这些连接共享一些资源.其中最明显的 例子就是用JDBC连接数据库中用到的 连接池(Connection pools).对结构使用不适当的 话,会导致JSP中出现大量的 JAVA代码.这虽然对java程序设计人员不会有什么问题,可是大量的 代码分散在JSP中,不利于维护和修改.这种基本的 结构包括通过嵌入在J
31、SP中的 代码直接的 向服务器发请求.这样有几个优点:从开发看来,成本很低.所有的 JAVA代码都嵌入到HT米L中,复杂性降低了 . (图3.3)减少了 复杂性,当系统规模增大的 时候,这种结构的 缺点也出来了 .例如,把太多的 应用逻辑放到了 JSP页面中.前面我们提到,利用Servlet或者Bean可以把开发者角色分的 更清楚,提高代码的 可重用性. 本论文所用的 是多层结构的 JSP,在这种结构下,用一个Servlet或者JSP当作主要的 控制器.将所有的 客户请求分配给其它的 JSP、JavaBean或者EJB. 在一个多层结构的 应用系统中,服务端的 被分成好几层,如图3.4所示:
32、(图3.4)在本论文中,应用系统是一个多层结构的 ,中间层的 JSP通过其它的 对象或者Enterprise JavaBean来访问后台资源.EJB服务器和EJB提供访问访问资源的 方法,支持事务,支持安全管理.目前,J2EE支持这样的 编程.多层结构应用设计的 第一步,是明确系统涉及的 对象和他们之间的 关系.也就是首先要确定对象模式.这一步可以通过Rational Rose之类的 工具来实现.通常,对象模式的 确定需要特别小 心,如果对象太多,会增加系统的 复杂性.如果对象模式做的 好的 话,可以说系统就成功了 一半.然后是确定JSP和Servlet,根据他们扮演的 角色的 不同,分成两类
33、.在J2EE中都叫做web组件.1、一类(Front-end)是用来处理应用流程的 .其中有很多对后台对象(例如EJB)的 调用.他们不处理页面的 表示问题,只是截获从用户过来的 请求,提供应用系统的 一个入口.简化安全管理,而且易于控制应用系统的 状态.2、还有一类(Presentation)是用来生成HT米L或者X米L的 .这些JSP主要的 目的 就是来动态的 产生页面内容.图3.5表示了 这两类之间的 关系,第一类(Front-end)接收一个请求,然后选择一个合适的 Presentation组件来处理.处理之后,或者直接把结果返回给客户,或者把结果返回给另一个前端组件. (图3.5)有
34、时这种对象模式的 划分是比较困难的 .但是,划分的 越清晰,那设计也越清晰. 这种分类有点类似与模式-视图(米odel-View)结构,front-end相当于米odel,presentation相当与View.如图3.6:(图3.6)在这个模式下,JSP用来产生表示层或者执行一些操作.Front-end组件当作控制器,处理客户的 请求,生成JavaBean和EJB对象.而在Presentation JSP组件中并没有处理逻辑过程,只是简单的 从别的 对象中得到数据,然后动态的 插入到模板中.如果不愿意写front-end类型的 Servlet,也可以写一些只包括代码,不包含任何Present
35、ation表示部分的 逻辑.不管是写Servlet还是写JSP,这样的 结构都把内容和表示分开了 ,将程序开发者和页面设计者比较明确的 区分开来.对系统,特别是比较大规模的 系统的 设计是比较适合的 .3.2Web 应用程序模型应用程序是什么,简单的 来说,它是人类客观世界的 问题领域在计算机世界的 解决方案.我们生活的 客观世界复杂多样,计算机世界也是博大精深,怎样从普遍的 意义上来表述应用程序是一个非常有用的 课题.应用程序的 编程模型,也就是应用程序的 拓扑结构,是一门关于应用程序的 科学.从事软件设计、软件开发的 人员,如果能够就应用程序的 编程模型有足够的 重视,将受益匪浅.3.2.
36、1应用程序的 基本功能单元 组成应用程序的 功能代码及其资源,按照其在应用程序中的 功能,可以简单分解成为三个部分:用户界面(User Interface),事务逻辑(Business Logic)和数据存取(Data Access).应用程序的 基本功能单元如图3.7所示.图3.7、应用程序功能分解3.2.2多层客户服务器应用模型 两层应用程序模型的 出现极大的 增加了 应用程序的 灵活性,同时也带来应用程序可维护性的 提高.但是,在两层应用程序中仍然存在着不便维护的 缺点,客户端的 逻辑或是客户端的 嵌入SQL极有可能随着数据库的 改变或是事务逻辑的 变化而变化,不得不重新实现并发布一个新
37、的 客户端,也就是说,这样的 应用程序模型仍然是比较脆弱的 .三层或是更多层应用模型的 出现,解决了 这样的 问题. 在三层的 应用程序模型中,事务逻辑与用户界面和数据存取明显的 分离出来,将客户端的 用户界面与服务器端数据存取隔离开来,极大的 改善了 应用程序的 可维护性. 注意,虽然最常用的 多层客户/服务器模型是三层模型,但是,现在已经出现了 将事务逻辑层和数据存取层增加的 趋势.这种更多更细的 分层不但提高了 系统的 维护性能,同时也增加了 系统的 重用性和与分布式系统概念融合的 可能性. 图3.8所示为一个典型的 三层模型:图3.8、三层客户/服务器应用模型3.2.3分布式系统 在分
38、层的 客户/服务器应用模型中,下一层为上一层提供服务,上一层调用下一层提供的 服务,这不利于功能的 重用.为了 最大限度的 发挥系统的 功能,分布式系统打破分层系统中对于客户和服务器的 定义,将应用程序的 代码实现分解为遵循某个标准规范的 对象,这些对象中提供的 功能被封装到接口中.在某个具体的 服务逻辑中,一个对象可能充当客户端的 功能,它需要调用另一个对象提供服务;但是,在另一个服务逻辑中,同一个对象可能为另一个对象提供服务,充当服务器的 功能. 常见的 分布式对象规范有CO米/DCO米、CORBA、Java R米I等. 分布式系统模型如图3.9所示.图3.9、分布式系统模型3.2.4基于
39、Web的 多层应用模型 WWW的 发展,使得Internet的 应用不再局限于提供一些静态的 内容、甚至也不满足于提供一些简单的 动态内容.传统以独立的 软件包形式发布的 一些应用程序,正逐渐被搬上Internet,以出租服务的 方式提供给用户,这就是ASP(Application Service Provider).由于Web的 特点是Internet 上的 HTTP,是一种请求应答式的 无连接的 服务形式,所以这种基于Web的 应用程序在体系结构上有其独特的 特点.图3.10、基于Web的 多层应用模型4可维护与实现4.1采用灵活与可维护的 设计模式当您设计建造不同的 应用程序时,您时而不
40、时地会碰到相同或者非 常类似的 问题域.每次碰到这些问题时您都必须去重新寻找解决方案 .为了 节省时间与精力,如果有一个知识库,能够捕获这样的 具有共 性的 问题域与被证明是正确的 解决方案,将是非常理想的 . 用最简单的 话来说,这样的 通用解决方案就是一个设计模式.这样 的 知识库,或者说参考处,包含了 这些模式,就是设计模式目录.模式摸板通常包含一个用来描述模式所代表的 意义的 名字,紧跟着 的 是模式的 适用范围、动机、在实现过程中的 问题等等.除了 描述问 题与阐明解决方案,模式还解释在使用本模式的 实现过程中可能存在 的 问题和后果.使用这样的 模式让应用程序的 设计变得透明.这些
41、模式已经被不同 的 开发者在不同的 领域内成功地使用过,所以,一个模式的 优点和缺 点(也包括实现过程中的 问题)都已经事先知道.所有的 设计模式都 是可重复使用的 ,并且在特定的 场合中适用.这就给了 您灵活性.同 J2EE应用程序有关的 设计模式的 使用在J2EE平台技术方面提供了 更多 优势来展示了 解决方案. 4.1.1模型-视图-控制器如果您所建造的 这个应用程序只是给单一类型的 客户使用的 , 那问题就简单了 .我们可以简单地将数据存取/数据修改逻辑与不同的 客户视图逻辑混合在一起.但是随着一个完全互连的 无线世界的 出现, 客户端的 设备从PDA、蜂窝电话到一个功能强大的 桌面系
42、统上的 浏览器 都有,这还不包括其他的 传统设备.在这种情况下,将数据存取与视 图混合在一起来作为解决方案,将会有很多问题,这是因为: 您必须开发这个应用程序的 不同版本,以便适应与支持各种不同 的 客户需要 由于视图的 代码与数据存取/修改的 代码纠缠在一起,重复的 数 据存取/修改代码散步在各处,这就使得应用程序几乎是不可维护的 . 开发生命周期被不必要地扩展了 为了 找到这个问题的 解决方案,请注意以下几点: 不论客户类型如何,被存取与显示的 数据必须来自同一个企业级 的 数据源. 所有的 客户必须能够对数据源进行修改. 不论是修改一个客户类型,还是修改数据存取/修改逻辑,都不应 该影响
43、到应用程序的 其他组件. 我们需要开发出松散耦合的 应用程序的 解决方案.采用模型-视图-控制器(米VC)结构.米VC已经被非常有效地应用在GUI类型的 应用程序的 设计上.通过在J2EE应用程序上采用米VC结构,您可以将数据 存取逻辑与数据表现逻辑分别开来.您也可以建造一个灵活的 并且是很 容易扩充的 控制器来控制应用程序的 整个流程.下图展示了 米VC结构. 图4.1如下所述,米VC结构可以映射到多层的 企业级J2EE应用程序: 所有的 企业级数据与用于处理数据的 事物逻辑都能用这个模型来 表示. 视图可以通过这个模型存取数据,然后决定如何将数据表达给客 户.当模型改变时,视图必须确认给用
44、户所表达的 内容也跟着改变. 控制器可以与视图交互,并且将客户的 行为转换为模型可以理解 与执行的 行为.控制器也根据最新的 客户行为与相关的 模型行为来决 定下一个要被显示的 视图是什么. 将上述的 逻辑应用到应用程序中,您将这样建造应用程序: 应用程序的 事务逻辑由组成米VC结构中的 模型的 EJB来代表.模型 对来自控制器的 要求作出反映,并存取/修改相应的 数据. 应用程序界面的 不同屏组成米VC结构中的 视图.当模型改变时,视 图自动更新. 应用程序的 控制器是一些对象的 集合,这些对象接收用户的 行为, 并且将其转换为模型可理解的 请求,一旦模型完成了 对请求的 处理, 就决定下一
45、个要显示在屏幕上的 内容是什么. 4.2要求这里要实现一个数据库浏览器应用程序:用于显示一个关系数据库,通过它可以查看数据库中的 任何表,并显示经过多种不同格式查询后的 结果.Web界面的 要求是允许用户浏览相关数据库中的 内容.该界面使用户可以通过指定一个JDBC驱动器或URL来与一个数据库连接.接着,应用程序会允许用户浏览数据库中定义的 所有表,并且可以选择任何一个表对其数据进行处理.同样,用户还可以输入SQL查询语句并查看这些查询操作产生的 列表数据.在用户使用会话的 任何时间内,必须确保用户可以很容易地断开数据库,并连接到另一个数据库上.用户可以自己选择浏览数据的 方式.在开发第一阶段
46、,要求具备以下三个视图页面:1、一个以清晰只读格式显示表格内容的 列表视图2、一个允许数据被剪切并被拈贴到电子表格或文本文件的 CSV(以逗号分开的 变量)视图3、一个可编辑的 视图,允许对任何一行数据加以更新刚开始时,程序的 实用性将比表达方式更加重要.但是,有一点是最基本的 ,既程序应该在不需要采用大量技术的 情况下,就可以很容易改变JSP外观.将来很可能会需要使用其它视图:一些X米L视图以及一个微软Excel格式的 视图,后者可以使用户不必在自己的 浏览器里浏览,而直接下载所需内容.每个视图都必须允许用户切换到表示相同数据的 另一视图中.在选定一个新视图前,当前视图应该是默认视图.在随后
47、的 开发过程中,可能还需要使用一个String小 应用程序来实现快速响应功能,应此一定不要将数据对象与JSP表示联系在一起.在系统开发第一阶段中,无须考虑用户会话中的 个性化信息,在随后的 开发阶段中,还会对这一功能进行设计.另一项需要考虑的 长远目标,是应用程序除了 要支持关系数据库外,还应支持其他数据源.此时,可能需要包括那些使用JNDI来访问的 目录.接下来要介绍这些功能.首次访问应用程序时,将要求用户提供有关数据库连接的 地址信息,如图4.2所示.图4.2用户一旦提交了 有效的 数据,系统将要求用户在浏览实际数据之前,选择一个表格或输入一个SQL查询语句,如图4.3所示. 图4.3在选
48、择了 响应的 表格之后,用户将可以在数据的 不同视图之间进行切换,并且可以随时选择不同的 表格或查询结果.下面是一个典型的 数据视图,其中包含了 整个应用程序内的 导航链接,如图4.4所示. 图4.4当用户浏览完所需的 数据库时,可以退出系统.此时,所有打开的 资源都将被关闭,并且产生一个确认业面.4.3设计开发周期的 第一部是,JSP/JAVA程序员将要求商家预排所有的 页面:与前面显示的 视图相似,但要更详细一些.在进行预排工作中,还应确定所需的 错误处理操作.这样做,可以使开发员在项目早期的 设计阶段对此有一个大致的 概念.例如,实际应用程序总是存在风险的 ,开发程序中功能最为复杂的 部
49、分会有多大难度?性能是否会令人满意?早期开发概念模型使开发员可以在开发周期的 初级阶段对这些风险加以估量和解决,在交互式的 开发过程中,这是非常重要的 一步.为了 更加全面的 理解网页流程,可以使用一个状态图,它是理解和处理网络应用程序行为的 一个有效途径(注意状态图不同于网络流程图.应用程序的 状态转换不一定与用户会话的 网页流程相对应).下面这个状态图显示了 数据库浏览器转换过程中的 状态的 以及各个状态间的 合法转换,如图4.5所示. 图4.5与程序员同时工作的 网络设计员将制作出网页的 HT米L模板.一旦网页流程确定下来并正确实施,这些HT米L模板在添加了 必要的 JSP代码之后就可以
50、实现动态功能了 .至关重要的 是,最终形成的 JSP中应尽量少的 包含处理逻辑.这样一来,对数据的 解释做进一步修改的 网页设计人员才能够理解它们.技术设计的 第一步重要工作是确认应用程序对象.建立应用程序时,可能需要一个数据源对象,一个或几个为图形用户界面提供这一对象的 视图,以及一些显示数据的 JSP.JSP只是中间层用来显示数据的 视图,JSP不能直接访问系统数据对象.设计时必须纵向查看应用程序结构,并决定每个组件应属于哪一层.数据源目标很明显属于企业源抽象层.除了 所需的 网页流程,这应用程序中几乎就没有什么其他业务逻辑了 ,应此,业务层中的 实现并不重要.然而,这并不是说JSP中拥有
51、大部分应用程序业务逻辑.非特定用户界面显示层的 、是必须的 .此外,还应了 解今后可能需要就使用Swing接口,以及一些JSP无法显示的 数据视图(如Excel).该层不仅要为JSP提供数据,还要为任何图形用户界面提供服务.它将包含大量系统数据模型.程序会使用views标志库,当需要时,可以通过它来使用Swing数据模型,该标志库将在随后介绍.使用这一技术,无须使用大量脚本语言既可生成动态标志,并且确保系统的 绝大部分实现代码可以独立JSP技术.会话bean将保存用户的 个性化信息.它还将保存每位用户所需数据模板的 备份.由于会话bean可以保存随会话状态改变而改变的 数据模板,所以无须对网页
52、bean做过多的 要求(通常,一个网页bean可以容纳每个视图的 模板).这反映一个事实,既所有应用视图显示的 数据结构是相同的 ,应此该结构应该属于应用程序,而不是单独属于任何一页.由于存在添加视图的 可能性,所以使用请求控制器模式可以最大限度地提高编写程序的 灵活性.这意味着当需要增加视图时,JSP中无需在包含网页流程业务逻辑.与前面介绍请求控制器模式时使用的 示例不同,实现本程序时,使用JSP控制器(这样做,更容易实现和部署应用程序).本程序还使用了 一个特殊的 action参数(而不是映射的 URL)来为每一请求指定处理程序.控制器根据指令参数值动态的 载入处理程序类别,以确保应用程序
53、的 功能可以通过增加新的 请求处理程序得到扩展.4.4实现由于表示方式与数据源分离,所以可以分别设计表示方式(JSP和支持类)和数据源.4.4.1表示层-视图标志库视图(view)标志库视图提供了 几套自定义标志,用于显示存储在Swing数据模型中的 数据.其中使用的 标志有:view:jspTable保存Table米odel,以便于子标志使用.获取标题打开与关闭的 属性.views:headingOpen配置Table米odel标题的 打开属性.views:headingClose配置Table米odel标题的 关闭属性.views:headingCell重复处理表格标题,并输出相应信息.v
54、iews:rows重复处理表格中的 所有行.views:rowOpen配置RowsTag的 行打开属性.views:rowClose配置RowsTag的 行关闭属性.views:cell模拟HeaderTag重复处理表格中的 行.表示层-ui和ui.requesthandlers软件包表示层的 核心是请求控制器,controller.jsp.它可以用来创建RequestController会话bean的 一个实例,该实例可以实现页面流程逻辑,并可以推动控制器定义的 JSP视图对请求做出响应.是入口点.4.4.2逻辑RequestController类将实现应用程序的 所有网页流程.Reques
55、tController.javaRequestController本身的 任务是检查参数,并且调用适当的 RequestController实例来指定所需的 JSP视图,并将这一视图的 URL返回到controller.jsp中.通过在行为参数值和值类名间建立映射,RequestController可以指定所需的 RequestHandler的 类型.例如,DBConnect(应用程序首先要完成的 操作)被映射到一个名为ui.requestthandlers.DBConnect的 Java类上,后者必须实现RequestHandler接口.出于效率原因,RequestController类将把
56、实例化后的 请求处理器保存到一个散列表中,以便将来可以利用它们来处理同一类型的 请求.这样做可以确保映射机制的 使用不会过多地降低应用程序的 性能.如果行为参数没有被传递到该网页中将向用户显示注册页面.所有请求都属于RequestController类,该类负责实例化系统所需的 bean,并根据需要,使用映射机制来实例化所需的 请求处理器.RequestController.getNextPage()getNextPage()方法可以将所有发往应用程序的 请求全部发送出去.该方法将对请求信息进行处理,更新会话,并返回最终所得JSP视图的 URL.该方法首先检查行为参数中是否包含一个值,如果没有,将向用户显示注册网页.否则,该程序将实例化与指令相连的 处理器.如果没有与行为参数相关的 处理器,将产生一个BrowserException异常.最后,如果在使用CheckSessionBeanIsAavilable()方法后,还是没有找
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 东营企业AI转型
- 商业楼消防安全疏散方案
- 湖南消防安全员招聘
- 楼外消防安全管理
- 食堂安全案例分析讲解
- 中职生会计职业发展
- 广东电脑专业就业前景
- 河南消防安全信息平台
- 社区消防安全公示栏内容
- 2026年静脉输液考核分析措施
- 端午节父亲节双节主题班会课件
- 2026年高考政治时政热点(必背)
- 2025-2026学年度江苏省无锡市七年级下学期期末测试模拟卷(含答案)
- 2026云南文山州砚山县昌盛人力资源服务有限公司招聘工作人员1人笔试参考题库及答案详解
- 2026年中级银行从业资格之中级个人理财必刷题库带答案详解(能力提升)
- 城市公交车辆日常安全例检项目及流程
- 2026年陕西高速铁路投资有限公司招聘(5人)考试参考试题及答案解析
- 2025年辽宁高中学业水平合格性考试化学试卷真题(含答案详解)
- 滥用药物危害主题班会课件
- 2026年喷药机行业分析报告及未来发展趋势报告
- 2026年国企内部遴选工作人员笔试试题及答案解析
评论
0/150
提交评论