1、0摘要可维护的数据库浏览器,采用基于 Web 的多层应用模型。 程序上采用 MVC 结构,可以将数据存取逻辑与数据表现逻辑分开,组合 JSP Servlet 和 JavaBean 来建造灵活与可维护的应用程序的设计模式。Web 界面的要求是允许用户浏览相关数据库中的内容.该界面使用户可以通过指定一个 JDBC 驱动器或 URL 来与一个数据库连接。接着,应用程序会允许用户浏览数据库中定义的所有表,并且可以选择任何一个表对其数据进行处理。同样,用户还可以输入SQL 查询语句并查看这些查询操作产生的列表数据。在用户使用会话的任何时间内,必须确保用户可以很容易地断开数据库,并连接到另一个数据库上。关
2、键字:MVC 、设计模式、 多层结构。 目录1 绪论 -11.1Web 应用系统 -11.2 体系结构 -12 开发语言 -42.1Servlet -42.2JSP -42.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 的多层应
3、用模型 -1314 可维护与实现 -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.0 -291 绪论1.1Web 应用系统近十年来,基于 Internet 的应用
4、正以前所未有的高速度发展,其中一个重要的方向就是基于 Web 的应用系统的发展。在此期间,随着技术的不断更新和应用的不断深入,Web 应用系统的发展也经历了几个阶段性的跨越。 (图 1.1)在 Web 发展的初期,人们通常使用 Web 服务器作为信息发布工具,它接收用户的HTTP 请求,然后根据请求提供所对应的 HTML 文档,除了显示手段更为丰富的特点之外,HTML 文档与普通静态文本并没有本质差别。随后产生了动态页面和更多交互能力的需要,新的应用需要根据客户请求,从数据库中动态获取数据并予以显示。由此所产2生的技术手段有 CGI 和 Web 服务器内置 API 等。这些手段在一定程度上满足
5、了应用需求,但也都存在着各自的局限性:CGI 效率低、速度较慢,而内置 API 开发困难,移植性差。随着 Web 应用范围的扩大,基于商业应用的 Web 开始出现,人们需要 Web 服务器端提供更为复杂的和更为灵活的应用开发支持。JavaScript、VBScript 等技术的运用,Web 中对象和组件的应用使基于 Web 的商业程序开发得以迅速发展。但这种应用通常只适用于构建规模不大的商业系统,当商业系统进一步扩大时,其扩展性受到了限制,因为在 Web 服务器最初的设计目的中并不包括对大规模、高性能和高可靠性商业应用的支持。应用程序服务器(Application Server)的产生正是为了
6、突破这一瓶颈。 1.2 体系结构应用程序服务器的产生与软件体系结构的演变发展也是密切相关的。让我们简单回顾一下软件体系结构的发展历史。与最初的大型中央主机相适应,最初的软件结构体系也是 Mainframe 结构,该结构下客户、数据和程序被集中在主机上,通常只有少量的 GUI界面,对远程数据库的访问比较困难。随着 PC 的广泛应用,该结构逐渐在应用中被淘汰。在 80 年代中期出现了 Client/Server 分布式计算结构,应用程序的处理在客户(PC 机)和服务器(Mainframe 或 Server)之间分担;请求通常被关系型数据库处理,PC 机在接受到被处理的数据后实现显示和业务逻辑;系统
7、支持模块化开发,通常有 GUI 界面。Client/Server 结构因为其灵活性得到了极其广泛的应用。但对于大型软件系统而言,这种结构在系统的部署和扩展性方面还是存在着不足。 Internet 的发展给传统应用软件的开发带来了深刻的影响。基于 Internet 和 Web 的软件和应用系统无疑需要更为开放和灵活的体系结构。随着越来越多的商业系统被搬上Internet,一种新的、更具生命力的体系结构被广泛采用,这就是为我们所知的“三层/ 多层计算”。 一个典型的三层模型如如下图所示: 3(图 1.2)客户层(client tier) 用户接口和用户请求的发出地,典型应用是网络浏览器和胖客户(如
8、 Java 程序)服务器层( server tier) 典型应用是 Web 服务器和运行业务代码的应用程序服务器数据层(data tier) 典型应用是关系型数据库和其他后端( back-end)数据资源, 如 Oracle 和 SAP、 R/3 等三层体系结构中,客户(请求信息)、程序(处理请求)和数据(被操作)被物理地隔离。三层结构是个更灵活的体系结构,它把显示逻辑从业务逻辑中分离出来,这就意味着业务代码是独立的,可以不关心怎样显示和在哪里显示。业务逻辑层现在处于中间层,不需要关心由哪种类型的客户来显示数据,也可以与后端系统保持相对独立性,有利于系统扩展。三层结构具有更好的移植性,可以跨不
9、同类型的平台工作,允许用户请求在多个服务器间进行负载平衡。三层结构中安全性也更易于实现,因为应用程序已经同客户隔离。 1.3 应用程序服务器应用程序服务器是三层/多层体系结构的组成部分,应用程序服务器位于中间层。如上图所示,应用程序服务器运行于浏览器和数据资源之间,一个简单的实例是,顾客从浏览器中输入一个定单,web 服务器将该请求发送给应用程序服务器,由应用程序服务器执行处理逻辑,并且获取或更新后端用户数据。 在企业级应用中,应用程序服务器是位于企业数据(以及其他企业遗留系统)和访问企业数据的客户之间的中间件,它提供了业务代码的存放和运行的环境。它从物理上把业务逻辑(Business log
10、ic)同客户端和数据资源分离开来。应用程序服务器可使一个商业系统得以快速简便的开发和部署,也可以适应商业系统的用户增加而无需重构系统,这一切都是因为它处于一个相对独立的结构层。在实际应用中,一个企业系统可以由多个应用程序服务器、多个 Web 服务器和多个数据库服务器组成,应用程序代码可以分布在这多个应用程序服务器上。 应用程序服务器是企业级 web 应用的必经之路,新的企业级应用需要关键性应用能对不断增加的用户数量保持持续可用,此外企业应用还需要高的安全性和可靠性,无论访问4系统的用户数量发生变化,还是系统数据资源发生变化,应用程序服务器都应始终保持运行。在应用程序服务器之前,Web 应用程序
11、通常运行在 Web 服务器中,但 Web 服务器最初只是被设计用来提供 Web 页面相关服务的,因此开发 /运行 Web 应用程序是缓慢而复杂的。而应用程序服务器的强大功能则能够为企业级应用系统的开发和部署提供有力的保证。 一个对应用程序服务器的定义如下:采用具有分布式计算能力的集成结构、支持瘦客户机的软件服务器产品。应用程序服务器的基本用途包括:管理客户会话、管理业务逻辑、管理与后端计算资源(包括数据、事务和内容)的连接。 上述定义的涵盖范围是应用程序服务器本身,我们认为实际上应用程序服务器还应该包括其开发环境。每一个应用程序服务器产品都有自己的 API。为了充分利用应用程序服务器所提供的功
12、能,开发人员必须学会用这些 API 编程。服务器的 API 对实用系统的开发至关重要,掌握 API 方法和它们提供的功能需要花一定的学习时间。 越来越多地,应用程序服务器采用诸如 COM、CORBA、Enterprise JavaBeans(EJB)和Java Servlets 等标准化技术(其中 CORBA 和 EJB 更为常用),上述标准化技术的采用使开发变得更加容易,因为它们为通用服务器管理功能提供了标准化 API,遵循标准保证了当更改应用程序服务器时原有组件可移植。 2 开发语言2.1ServletServlet 是使用 Java Servlet 应用程序设计接口(API)及相关类和方
13、法的 Java 程序。除了 Java Servlet API,Servlet 还可以使用用以扩展和添加到 API 的 Java 类软件包。Servlet 在启用 Java 的 Web 服务器上或应用服务器上运行并扩展了该服务器的能力。5Java servlet 对于 Web 服务器就好象 Java applet 对于 Web 浏览器。Servlet 装入 Web 服务器并在 Web 服务器内执行,而 applet 装入 Web 浏览器并在 Web 浏览器内执行。Java Servlet API 定义了一个 servlet 和 Java 使能的服务器之间的一个标准接口,这使得Servlets 具
14、有跨服务器平台的特性。 Servlet 通过创建一个框架来扩展服务器的能力,以提供在 Web 上进行请求和响应服务。当客户机发送请求至服务器时,服务器可以将请求信息发送给 Servlet,并让 Servlet 建立起服务器返回给客户机的响应。 当启动 Web 服务器或客户机第一次请求服务时,可以自动装入 Servlet。装入后, Servlet 继续运行直到其它客户机发出请求。Servlet 的功能涉及范围很广。例如,Servlet 可完成如下功能: (1) 创建并返回一个包含基于客户请求性质的动态内容的完整的 HTML 页面。 (2) 创建可嵌入到现有 HTML 页面中的一部分 HTML 页
15、面(HTML 片段) 。 (3) 与其它服务器资源(包括数据库和基于 Java 的应用程序)进行通信。 (4) 用多个客户机处理连接,接收多个客户机的输入,并将结果广播到多个客户机上。(5) 当允许在单连接方式下传送数据的情况下,在浏览器上打开服务器至 applet 的新连接,并将该连 接保持在打开状态。当允许客户机和服务器简单、高效地执行会话的情况下,applet 也可以启动客户浏览器和服务器之间的连接。可以通过定制协议或标准(如 IIOP)进行通信。 (6) 对特殊的处理采用 MIME 类型过滤数据,例如图像转换和服务器端包括( SSI) 。(7) 将定制的处理提供给所有服务器的标准例行程
16、序。例如,Servlet 可以修改如何认证用户。 2.2JSPJavaServer PagesTM (JSP)技术为创建显示动态生成内容的 Web 页面提供了一个简捷而快速的方法。JSP 技术的设计目的是使得构造基于 Web 的应用程序更加容易和快捷,而这些应用程序能够与各种 Web 服务器,应用服务器,浏览器和开发工具共同工作。JavaServer Pages (JSP)技术就是被设计用来满足能够在任何 Web 或应用程序服务器上运行,将应用程序逻辑和页面显示分离,能够快速地开发和测试,简化开发基于 Web 的交互式应用程序的过程.JSP 规范是 Web 服务器、应用服务器、交易系统、以及开
17、发工具供应商间广泛合作的结果。太阳微系统公司(Sun Microsystems Inc.)开发出这个规范来整合和平衡已经存在的对 Java 编程环境(例如, Java Servlet 和 JavaBeansTM)进行支持的技术和工具。其结果是产生了一种新的、开发基于 Web 应用程序的方法,给予使用基于组件应用逻辑的页面设计者以强大的功能。 Web 页面开发人员不会都是熟悉脚本语言的编程人员。JavaServer Page 技术封装了许多功能,这些功能是在易用的、与 JSP 相关的 XML 标识中进行动态内容生成所需要的。标准的 JSP 标识能够访问和实例化 JavaBeans 组件,设置或者
18、检索组件属性,下载 Applet,以及执行用其他方法更难于编码和耗时的功能。通过开发6定制化标识库,JSP 技术是可以扩展的。今后,第三方开发人员和其他人员可以为常用功能创建自己的标识库。这使得 Web 页面开发人员能够使用熟悉的工具和如同标识一样的执行特定功能的构件来工作。JSP 技术很容易整合到多种应用体系结构中,以利用现存的工具和技巧,并且扩展到能够支持企业级的分布式应用。作为采用 Java 技术家族的一部分,以及 Java 2(企业版体系结构)的一个组成部分,JSP 技术能够支持高度复杂的基于Web 的应用。由于 JSP 页面的内置脚本语言是基于 Java 编程语言的,而且所有的 JS
19、P 页面都被编译成为 Java Servlet,JSP 页面就具有 Java 技术的所有好处,包括健壮的存储管理和安全性。作为 Java 平台的一部分, JSP 拥有 Java 编程语言“一次编写,各处运行”的特点。随着越来越多的供应商将 JSP 支持添加到他们的产品中,您可以使用自己所选择的服务器和工具,更改工具或服务器并不影响当前的应用。当与 Java 2 平台,企业版(J2EE)和 Enterprise JavaBean 技术整合时,JSP 页面将提供企业级的扩展性和性能,这对于在虚拟企业中部署基于 Web 的应用是必需的。 2.3JDBC 接口技术JDBC 是一种可用于执行 SQL 语
20、句的 JavaAPI(ApplicationProgrammingInterface 应用程序设计接口) 。它由一些 Java 语言编写的类和界面组成。 JDBC 为数据库应用开发人员、数据库前台工具开发人员提供了一种标准的应用程序设计接口,使开发人员可以用纯Java 语言编写完整的数据库应用程序。2.3.1ODBC 简介说到 JDBC,很容易让人联想到另一个十分熟悉的字眼“ODBC”。ODBC 是 OpenDatabaseConnectivity 的英文简写。它是一种用来在相关或不相关的数据库管理系统(DBMS)中存取数据的,用 C 语言实现的,标准应用程序数据接口。通过 ODBCAPI,应
21、用程序可以存取保存在多种不同数据库管理系统(DBMS)中的数据,而不论每个 DBMS 使用了何种数据存储格式和编程接口。2.3.2JDBC 技术JDBC 是一种可用于执行 SQL 语句的 JavaAPI(ApplicationProgrammingInterface,应用程序设计接口)。它由一些 Java 语言写的类、界面组成。 JDBC 给数据库应用开发人员、数据库前台工具开发人员提供了一种标准的应用程序设计接口,使开发人员可以用纯 Java 语言编写完整的数据库应用程序。通过使用 JDBC,开发人员可以很方便地将 SQL 语句传送给几乎任何一种数据库。也就是说,开发人员可以不必写一个程序访
22、问 Sybase,写另一个程序访问 Oracle,再写一个程序访问 Microsoft 的 SQLServer。用 JDBC 写的程序能够自动地将 SQL 语句传送给相应的数据库管理系统(DBMS)。不但如此,使用 Java 编写的应用程序可以在任何支持 Java 的平台上运行,不必在不同的平台上编写不同的应用。Java 和 JDBC 的结合可以让开发人员在开发数据库应用时真正实现“WriteOnce ,RunEverywhere !”7Java 具有健壮、安全、易用等特性,而且支持自动网上下载,本质上是一种很好的数据库应用的编程语言。它所需要的是 Java 应用如何同各种各样的数据库连接,
23、JDBC 正是实现这种连接的关键。JDBC 扩展了 Java 的能力,如使用 Java 和 JDBCAPI 就可以公布一个 Web 页,页中带有能访问远端数据库的 Applet。或者企业可以通过 JDBC 让全部的职工(他们可以使用不同的操作系统,如 Windwos,Machintosh 和 UNIX)在 Intranet 上连接到几个全球数据库上,而这几个全球数据库可以是不相同的。随着越来越多的程序开发人员使用 Java语言,对 Java 访问数据库易操作性的需求越来越强烈。MIS 管理人员喜欢 Java 和 JDBC,因为这样可以更容易经济地公布信息。各种已经安装在数据库中的事务处理都将继
24、续正常运行,甚至这些事务处理是存储在不同的数据库管理系统中;而对新的数据库应用来说,开发时间将缩短,安装和版本升级将大大简化。程序员可以编写或改写一个程序,然后将它放在服务器上,而每个用户都可以访问服务器得到最新的版本。对于信息服务行业,Java 和 JDBC 提供了一种很好的向外界用户更新信息的方法。简单地说,JDBC 能完成下列三件事:1)同一个数据库建立连接;2)向数据库发送 SQL 语句;3)处理数据库返回的结果。JDBC 是一种底层 API,这意味着它将直接调用 SQL 命令。JDBC 完全胜任这个任务,而且比其他数据库互联更加容易实现。同时它也是构造高层 API 和数据库开发工具的
25、基础。高层 API 和数据库开发工具应该是用户界面更加友好,使用更加方便,更易于理解的。但所有这样的 API 将最终被翻译为象 JDBC 这样的底层 API。目前两种基于 JDBC的高层 API 正处在开发阶段。1)SQL 语言嵌入 Java 的预处理器。虽然 DBMS 已经实现了 SQL 查询,但 JDBC 要求 SQL 语句被当作字符串参数传送给 Java 程序。而嵌入式 SQL 预处理器允许程序员将 SQL 语句混用:Java 变量可以在 SQL 语句中使用,来接收或提供数值。然后 SQL 的预处理器将把这种 JavaSQL 混用的程序翻译成带有 JDBCAPI 的 Java 程序。2)
26、实现从关系数据库到 Java 类的直接映射。 Javasoft 和其他公司已经宣布要实现这一技术。在这种“对象关系”映射中,表的每一行都将变成这类的一个实例,每一列的值对应实例的一个属性。程序员可以直接操作 Java 的对象;而存取所需要的SQL 调用将在内部直接产生。还可以实现更加复杂的映射,比如多张表的行在一个Java 的类中实现。随着大家对 JDBC 兴趣的不断浓厚,越来越多的开发人员已经开始利用 JDBC 为基础的工具进行开发。这使开发工作变得容易。同时,程序员也正在开发对最终用户来说访问数据库更加容易的应用程序。2.3.3JDBC 两层模型和三层模型8JDBC 支持两层模型,也支持三
27、层模型访问数据库。两层模型中,一个 java Appple 或者一个 JAva 应用直接同数据库连接。这就需要能直接被访问的数据库进行连接的 JDBC 驱动器。用户的 SQL 语句被传送给数据库,而这些语句执行的结果将被传回给用户。数据库可以在同一机器上,也可以另一机器上通过网络进行连接。这被称为“Client/Server ”结构,用户的计算机作为 Client,运行数据库的计算机作为 Server。这个网络可是 intranet,比如连接全体雇员的企业内部网,当然也可以是 internet。在三层模型中,命令将被发送到服务的“中间层”,而“中间层”将 SQL 语句发送到数据库。数据库处理
28、SQL 语句并将结果返回“ 中间层”,然后“中间层”将它们 返回用户。MIS 管理员将发现三层模型很有吸引力,因为“中间层”可以进行对访问的控制并协同数据库的更新,另一个优势就是如果有一个“中间层”用户就可以使用一个易用的高层的 API,这个 API 可以由“中间层”进行转换,转换成底层的调用。而且,在许多情况下,三层模型可以提供更好的性能。到目前为止, “中间层”通常还是用 C 或 C+实现,以保证其高性能。但随着优化编译器的引入,将 java 的字节码转换成高效的机器码,用 java 来实现“中间层”将越来越实际。而 JDBC 是允许从一个 java“中间层”访问数据库的关键。3 系统结构
29、3.1JSP Servlets 和 JavaBean 来构成系统本节我们讨论用 JSP,Servlets,和 JavaBean 来构成一个系统的途径。下面有集中不同的结构。每一种都是从上一种发展过来的,下面的图表显示了发展过程的梗概。9(图 3.1)当 Sun 公司开始推广 JSP 的时候,很多人认为可以通过 Web 页面来请求的企业级结构将会取代 Servlet。虽然 JSP 是 J2EE 规范的关键组成部分,它处理请求和应答机制。我们需要更深入的研究 JSP 和 Servlet 的关系。本节的另一个部分谈了 JSP 代码的实现细节,如何编译转化为 Servlet。JSP 是建立在Servl
30、et 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 在服务器端截获客