UML软件工程组织

J2EE1.4 Web技术应用
作者: 务实
Thursday, September 18 2003 3:42 PM  
Sun的Java 2 Enterprise Edition(J2EE)平台已经成为使用最广泛的Web程序设计技术,该技术主要支持两类软件的开发和应用:一类是做高级信息系统框架的Web应用服务器(Web application server),另一类是在Web应用服务器上运行的Web应用程序(Webapplication)。大家知道,全球主要的商业网站和管理信息系统大多采用J2EE平台作为首选的Web开发技术,每一个Web应用服务器都将需要企业开发和运行多种Web服务软件;最近几年,J2EE Web程序的开发已经成为信息系统的关键,熟悉并能熟练运用J2EE技术的软件工程师已经成为炙手可热的人才;然而,J2EE技术比较复杂难懂,它牵扯到的Web和JAVA技术五花八门,学习者需要对各种技术有全面理解,但又要有侧重;只有这样才能做到融会贯通,得心应手;下面我们从Web技术的发展历史、Web层次结构、J2EE Web编程技术特点以及J2EE1.4 Web技术框架来学习、探讨和理解Java Web技术应用。
一、Web编程技术的发展历史

随着互联网技术突飞猛进地发展,开发Web软件越来越复杂,程序开发人员应该对Web技术有系统的理解。首先,让我们回顾互联网技术的发展,从而深入分析Web编程的基本概念。典型的Web模型将计算机网络分为若干个相关层,早在20世纪80年代,国际标准化组织(ISO)提出了OSI网络抽象模型,将互联网系统分为七层(见下图1);最底层是物理层(physical)和数据链路层(data link),其上依次是网络层(network)、传送层(transport)、会话层(session)、表示层(presentation)和应用层(application),每一层都代表特定的功能组合;底层功能通过提供服务接口支持上层功能,物理层主要描述网络中通信机制的信号和连接特性,数据链路层定义在物理层之上的数据传送状态,网络层定义了在由数据链路组成的互联网中怎样查找和分发数据,传送层用于保证数据在网络中正确传递,会话层定义数据包在传递时相互组织关系,表示层描述数据类型在网络传递时的格式,应用层定义用户使用的互联网功能(如telnet,FTP,E-Mail);互联网发展的过程伴随着标准化的过程,在各个功能层都需要定义标准化的网络协议(Protocol)。例如在网络层,每个网络主机都要设置一个IP地址并以互联网协议规定数据从它的始发地到目的地选择的路径方式;在传送层,TCP规定了允许不同计算机共享一个网络上的信息的通信协议;在应用层HTTP定义了在WWW上的文档传递协议;在20世纪90年代被迅速推广的HTTP和HTML真正实现了互联网的广泛应用;用户不必掌握telnet或FTP的操作命令就可以轻松访问网页,基于互联网的电子商务因此成为IT行业的热点而带动了全球经济的发展,处理和产生HTML的技术(如JSP,ASP,CGI等)成为主要的Web编程语言;在最近几年,Web服务(Web Service)成为下一代的互联网功能层次,它定义了如何在HTTP之上利用XML语言和SOAP,UDDI等网络服务协议集成和查找互联网上的服务程序。

图1 互联网功能层次

 

纵观互联网的发展过程,有两种现象值得注意;首先,底层功能的完善会优化上层功能,上层功能的推广又对底层功能提出更高要求,当Web硬件能提供高速度和带宽时,软件公司才可能开发出满足用户需要的程序;Web系统被大量使用往往使现有系统不能满足需求,这就要求开发出新的硬件和软件系统。例如,在HTTP协议上,最先只有HTML作为文档编辑语言,当Web浏览器(IE,Netscape)成为计算机必不可少的上网工具时,动态的Web设计语言(如Java Servlet/JSP,ASP,CGI)应运而生,其后由于这些语言需要占用系统计算资源,高速的Web应用服务器软件和主机成为大型网站必不可少的配置;Java技术提供的Web编程技术就是在这样的发展背景下被开发和广泛使用的,这些技术主要基于传送层和应用层的协议和程序接口,从而提供了高效、可靠、实用的Web程序平台。

二、Web信息层次结构

在应用层,“客户-服务器”(Client/Server)是典型的Web信息系统模式。“客户-服务器”一词在20世纪80年代首先被提出,起初,主要指个人计算机和Web的连接,在互联网中,主要指计算机系统之间通过Web的信息交互传递模式;“客户”是指信息服务的索取方,“服务器”指服务的提供方,根据软件的不同设置,一台计算机可以是客户也可以是服务器。随着Web科技的发展,“客户-服务器”软件框架成为一种灵活、分布式和模块化的信息系统结构。与“客户-服务器”软件框架相反的结构是大型集中式主机。这种结构将主要运算操作放在中心计算机上。同集中式大型计算系统比较,“客户-服务器”结构的主要优点是提供了良好的实用性、灵活性、交互性和可扩展性。“客户-服务器”以数据库服务器取代集中式文件共享进而实现了计算机系统之间的松耦合。

由于客户并非完全依靠服务器,计算机之间可以更动态地进行协作。这样扩大了计算机联网的范围,同时降低了Web流量。客户和服务器之间在企业内部网(Intranet)中主要通过远程过程调用(remote procedure call)和SQL数据库检索语言,在因特网(Internet)上可以通过HTTP、telnet、FTP等协议进行通信。Web程序“客户-服务器”模式衍生出了不同体系结构,如双层结构、三层结构和分布式结构等。它们适用于不同的情况。

图2双层结构Web程序

双层结构(2-tier architecture)如图2所示,通常将客户端程序作为界面,而将数据库置于服务器上;一台服务器上的数据库同时支持多个用户(一般是个人计算机),数据处理过程由客户界面和数据库管理系统(database management systems)协调进行,数据库管理系统(如Oracle,DB2,MySQL等)提供现成的方法供用户调用,用户也可以在其基础之上进行开发;双层结构的Web系统适用于少量用户在局域网内对数据进行操作,但是当客户数量超过数百时,由于双层结构系统和大量的客户保持联系,处理速度往往难以满足要求,另外,由于双层结构系统对数据库的依赖性很强,系统的维护和更新常常令人头疼,当服务器的机器升级或更新时,软件系统的重新安装和调试非常麻烦。

图3三层结构Web程序

三层结构(3-tier architecture)弥补了双层结构的不足(见上图3);在客户界面和数据库之间加入了完善系统功能的中间层(middle tier),典型的中间层可以是事务处理控制器(transaction processing monitor)、消息服务器(message server)、应用服务器(application server)等;在客户界面与数据库之间,中间层支持数据检索、程序的分布式运行和数据库状态控制,中间层像是数据的周转和分配站,客户界面不再直接获取数据,而是通过中间层提供的接口间接访问和更新数据,中间层可以协调和优化各种处理进程,这样,对于大量客户使用的系统,三层结构的主要特点是能提高用户的使用效率,同时提高程序的可移植性;由于中间层使用标准化的接口,使Web程序无需改动就能在不同机器上运行,由于三层结构系统比双层结构复杂,程序开发人员需要掌握和考虑多种技术因素,例如如何维护数据交换一致,如何保证安全等。

最基本的三层结构由事务处理控制器作为中间层;这一层承担数据指令排序,存取规划的任务,当数以万计的客户访问数据库时,它能够利用优化的算法决定谁先谁后从而保证反应速度,事务处理控制器还可以在同一存取交易过程对多个数据库系统或数据文件(如XML)进行操作,客户端并不需要理解数据操作的各个具体环节,这样,系统的模块化比较容易保证;传统的事务处理控制器采用低级语言(COBOL)编程,这样并不是很方便,因此,应用服务器和消息服务器成为更广泛应用的中间层,当Web系统中间层复杂度提高时,往往又称之为多层结构。

 采用应用服务器的多层结构主要是在服务器端提供了程序主体运行的软件平台。程序员编的程序在这个平台上运行(并不是直接在操作系统上运行),这个平台具有基本的数据处理控制功能(包括事务处理控制器功能)和其他支持功能;平台本身并不控制用户界面如何显示,它主要是能够合理共享业务逻辑(business logic)(指特定的程序功能,该概念在后文有详细解释)、计算资源和数据。这种结构使在客户端的程序大大简化,主要程序都在能保证正常运行的服务器端运行;因此,系统会更安全可靠,也更容易扩充和移植。

 另一种是采用消息服务器的多层结构。消息(message)由客户传向服务器并被排序处理,跟远程调用不同的是消息采用异步传输,客户发出消息后不要求服务器马上进行响应,消息服务器和数据库管理系统连接并根据消息要求对数据库进行操作,与事务处理控制器不同的是消息服务器结构依赖消息本身提供额外的控制信息。

图4多层结构Web程序

多层结构(N-tier architecture)对三层结构的中间层进行细分,如上图4所示。网络信息系统被分为多层,自上而下分别是用户界面层(user interface tier)、表示逻辑层(presentation logic tier)、业务层(business tier)、数据访问层(data access tier)和数据层(data tier)。其中对在两头的界面层及数据层的定义和三层结构中的基本相同。表示逻辑层包括标准化的动态网页生成程序(如JSP、ASP、CGI文件),以及能控制用户界面的程序(如Windows的表单、菜单等),它是终端用户和系统程序的接口;通过与业务层互动,表示逻辑层将用户需要的信息以适当的格式输出,这一层和界面层的区别主要有两点;首先,在Web程序中,表示逻辑层主要在服务器端工作而用户界面通过浏览器在客户端工作,它们中间通过Web通信;其次,表示逻辑层着重对于信息的格式处理而用户界面主要是方便人的理解和操作。比如JSP文件在服务器端编译运行,它主要从数据库获取信息并传递给客户,而JSP传出的HTML文件在客户的Internet Explorer上显示,在这种情况中,JSP文件是在表示逻辑层,HTML文件是用户界面。

当然,两者是密切联系的,表示逻辑层内部又可细分为分布的逻辑层(distributed logic tier)和代理层(proxy tier),这两层分别在客户端和服务器端来实现分布式计算。例如,CORBA、RMI、DCOM、SOAP等技术提供了在客户机连接和调用服务器端操作的方法。一般是在客户端决定如何使用远程方法(即分布逻辑),而在服务器端由代理对象来完成操作。业务层(或操作层)就像Web程序的大脑,它主要是对数据进行分析和计算,同时控制整个程序的运作。比如,在购物网站中,业务层对定单进行处理,它不需要考虑HTML,也不需要直接用SQL到数据库读写数据,这一层主要对定单进行分析,决定如何检查用户信用卡,如何改动产品数据等等,它依靠其下层进行具体而复杂的数据操作(如改动数据库表中的行列)。引人业务层的好处是它对程序的功能进行了简化和封装,在编程时需要考虑的问题更简单明确。

分布式企业体系结构(distributed/collaborative enterprise architecture)的概念在20世纪90年代中期被提出,这种结构基于对象要求代理(object request broker)技术,例如CORBA(Common Object Request Broker Architecture)技术、COM/DCOM(Component Object Model)技术。CORBA主要实现了软件跨机器和跨语言的交互协作(如在Java和C++的程序之间相互调用函数),分布式企业体系结构比CORBA更进一步,它的基本特点是能共享和可重复使用信息系统的特定功能(即业务模型(business Models)),能为信息系统提供标准化和分布的业务功能;一台机器可以自由灵活地调用网络内其他机器的程序从而使用其特定功能。这样,信息系统就更加方便高效,分布式企业体系结构主要定义了系统各模块之间的协作方式,多层结构定义了客户机和服务器之间的操作模式,这两者之间并不矛盾。例如,一个Web程序可以采用三层结构作为基本模式,同时,在中间层可以用分布结构同时使用多个服务器的资源。

三、Java Web编程技术的特点

在理解了Web程序的结构和发展状况之后,读者会问到底什么语言和技术比较适合现代的Web编程。目前,很多公司都提供了自己的Web编程语言和工具,最出名的有Sun公司的J2EE技术和Sun One软件环境,Microsoft公司的C#和.Net技术,Oracle公司的以数据库为主的Web平台等,这些技术都提供了支持“客户-服务器结构”的Web编程语言;在Web编程技术中,Java技术之所以最受欢迎并得到广泛应用,主要是由于以下特点:

  • 跨平台:从设计之初,Java就将跨平台作为首要目标之一。当众多企业的信息系统在不同的操作系统上运行时,使用独立于机器的编程语言省掉了不少麻烦;Java程序依靠虚拟机器运行,真正实现了“一次编程,任何地方通用”,在Web程序中,由于各种程序常常在不同平台运行(如Windows的客户和Unix的服务器),这种特性大大方便了程序之间的交互和集成。
  • 安全性:Java语言提供了严密的安全机制,尤其是针对Web程序,Java使用了多重安全保障机制。相比之下,使用Java语言和Unix操作系统的网站不易被攻击,而用Windows和ASP的网站则存在不少安全漏洞。
  • 易用性:由于Java在多种技术中使用风格一致的API(应用程序接口),编程者一般掌握了基本的概念,就很容易理解和使用新的编程技术,而其他技术并没有这个特点。例如,使用.Net技术,需要理解C#,SOAP,ASP,Visual Basic等技术,每一种都要重新学习和练习。
  • 模块化和可扩展性:Java程序具有很强的“构件”概念。程序由相互连接的构件组成,构件之间可以通过导入类(import class)或远程调用来连接,构件的编译和执行都相对简单。同时,由于构件之间便于组合,Java程序有很强的可复用性。Java企业版进一步增强了构件的概念,J2EE的“客户-服务器”程序将不同功能的程序分成模块,每种模块都有标准的设置方法(如Java Server Page,Enterprise Java Bean)。这样使程序结构更清晰,程序的扩展也更方便。
  • 丰富的资源:很多程序开发软件(如IBM的Websphere,微软的Visual Studio)价格非常昂贵,而Java的软件产品大多是免费甚至开放源代码。许多被程序开发者津津乐道的软件产品都是采用志愿开发方式在网上免费供用户下载,这对于中国中小企业和个人的程序开发是非常适合的。

总之,J2EE提供了简单、实用、标准化、分布式的Web编程方法,有效掌握这些方法会使程序开发者事半功倍。

 

四、J2EE1.4的多层Web框架技术

J2EE为多层Web应用系统提供了容器平台。在这里,容器概念实际是指应用服务器提供的特定功能的软件模块,用户所开发的程序构件要在容器内运行,构件和容器的关系有些像计算机插件和主板的关系;程序构件在部署时被安装在容器里,容器是能提供基本功能的底层平台,它们之间通过接口进行通信;一般Web程序开发者只要开发出满足其需要的程序构件并能安装在容器中就够了,程序构件的安装过程包括设置各个构件在J2EE应用服务器中的参数以及设置J2EE应用服务器本身。这些设置决定了在底层由J2EE服务器提供的多种服务(譬如安全、交易管理、JNDI查寻和远程调用等)。

J2EE应用框架使同样的程序构件在一个Web程序之内能够根据其部署的方式实现不同的功能。例如,同样的Enterprise JavaBean可以采用不同等级的数据库数据存取安全设置,J2EE容器还负责管理某些基本的服务,譬如构件的生命周期、数据库连接资源共享、数据持久性(data persistency)。

图5 多层次结构Web程序框架

 

正如图5所描述的,J2EE 1.4应用平台由以下几种类型的程序容器(container)组成:

Enterprise JavaBeans(EJB)容器负责所有EJB的运行,EJB根据功能可以分为session bean(通常称为会话bean,称之为会话期间bean更确切),entity bean(实体 bean),message-drivenbean(消息驱动bean)。这一层主要负责数据处理以及和数据库或其他Java程序的通信,它对应多层结构的业务层和数据访问层,Web容器管理所有JSP,JSTL和servlet等Web构件的运行,这些构件主要负责程序和Web的通信,这一层对应多层结构中的表示层。

应用客户端容器负责所有Web程序在客户端构件的运行;Applet容器可以看作特殊的应用客户端容器。它负责在Web浏览器和Java插件(Java Plug-in)上运行Java Applet程序(Applet是一种简化并具有安全保护的Java小程序),应用客户端容器和Applet程序容器基本对应多层结构中的用户接口层;每种容器内都使用相关的各种Java Web编程技术,这些技术包括三类:

  • J2EE各种不同的应用构件(如Servlet,JSP,EJB),它们构成了应用的主体。
  • J2EE平台提供的应用服务(如JDBC,JTS,JNDI),这些服务保证并促进构件的良好运行。
  • J2EE的应用通信技术(如RMI,JMS,JavaMail)在平台底层实现机器和程序之间的信息传递。

    初学者对于诸多技术往往感到难以分辨和掌握,其实,最主要是理清这些技术在整个多层Web程序中的作用和它们之间的关系;有些技术,编程者并不需要非常熟练地掌握,当读者基本上了解了这些技术的作用之后,对照J2EE应用框架图,就容易有一个宏观的认识,以后逐步学习和理解。

1、构件技术

“构件”这一概念是指在应用程序中能发挥特定功能的软件单位。简单地说,就是几种特定的Java程序,这些程序有固定的格式和编写方法,它们的功能和使用方式在一定程度上被标准化了;最基本的Java构件是在Java标准版(Java 2 Standard Edition)中的JavaBean,它是按照特定格式编写的Java类文件。JavaBeans包括实例变量(Instance Variable()和get(),set()的方法来访问实例变量的数据。这种格式大大简化了程序设计。J2EE的构件在JavaBeans基础上进行了拓展。由于Web编程比较复杂,J2EE提供了更多应用构件,主要包括三类:客户端的Applet和程序客户;Web容器内的JSP,Servlet,JSTL等构件;企业Java Beans容器内的EJB构件和资源连接构件。

1)J2EE的客户

J2EE Web应用可以和多种客户端程序连接。这些客户主要包括以下部分:

Web客户端包括动态生成的网页(包含各种各样的类型标注语,如HTML,XML等),以及在客户机上运行的Web浏览器。Web浏览器(如Internet Explorer,Netscape)以标准格式显示从服务器传递来的网页。不管J2EE应用服务器早怎样生成这些网页的,它们被传递给浏览器时已经是HTML或XML格式,浏览器只是正确地显示给用户。所以,有时Web客户端被称为“瘦客户”,瘦客户不承担复杂的数据检索和计算任务,这些复杂而耗时的操作在J2EE服务器端Web容器和EJB容器内进行。这样保证了“客户-服务器”结构的优势,降低了Web流量。

  Applet是基于Java的小型客户端构件。它一般在Web浏览器上运行,通过HTTP协议和服务器进行通信。从服务器传给浏览器的网页可能包括嵌入的Applet程序;这些Applet程序在浏览器所安装的Java虚拟机(Java virtual machine)上执行。这要求客户机的浏览器事先安装Java Plug-in和有关安全许可文件。

Web客户端程序和Applet各有优点。Web客户程序(就是用网页)更简单和普遍,因为它不需要安装Java Plug-In,也无须操心客户程序运行的安全问题。并且,Web客户程序使编程和网页设计分离,这样保证了程序设计的模块化。会作漂亮的网页的人员因而不需要了解Java编程语法。Applet更适合复杂的客户界面。

由于Applet更接近Java编程,许多专业人员更擅长利用Java丰富的功能(API)来进行客户端编程。如果使用得法,Applet界面会更快速和灵活。比如,美国一家非常受欢迎的股票交易公司Datek就推出了使用Applet为界面的网上股票交易工具,无须用户点击图标和按键,它能够随时更新股票的交易分析数据和曲线。

客户应用程序是指在客户机上运行的J2EE程序。它为用户提供了丰富的界面(如JavaSwing,AWT)和复杂的操作。客户应用程序直接访问在服务器EJB容器内的EJB程序。当然,J2EE客户应用程序也可像Applet客户那样以HTTP连接和服务器的Servlet通信。与Applet不同的是,客户应用程序一般需要在客户端进行安装,而Applet是在Web上下载,无须专门安装。一般来说,客户应用程序适合在企业内部网中使用,Applet适合在WWW上使用。

Java Web Start客户是基于JFC/Swing API的,适合J2EE程序使用的客户应用,它基于比较新的Java Web Start技术。这种技术主要提供了网上的快捷程序下载和安装方式。Java Web Start兼有Applet和客户应用程序的优点,但设置起来有些复杂。

无线客户基于移动信息设备定型技术(Mobile Information Device Profile)。Java微型版(Java 2 Micro Edition)提供了MIDP的API和有限连接设备配置(Connected Limited Device Configuration)技术。这些技术可以使无线设备(如手机,PDA)同J2EE程序进行通信。

2)Web构件

Web构件是在J2EE Web容器上运行的软件程序。Web容器主要支持多层结构的表示层。它的功能是在HTTP协议上对Web请求(request)进行响应(response)。这些所谓响应其实就是动态生成的网页。用户每在浏览器上点击一个链接或图标,实际上是通过Web向服务器发出请求。J2EE平台的Web构件对这些请求进行处理后回复给客户相应的HTML或XML文件。

J2EE Web构件包括servlet,Java Server Page(JSP)和Java Server Pages Standard Tag Library(JSTL)。

Servlet是Java动态处理HTTP请求和生成网页的类(class)。每个servlet就是一个在J2EE应用服务器Web容器(又称Web服务器)里的程序构件。这种构件有效地利用了Web服务器的HTTP通信功能。Web服务器负责将Web请求传递给servlet。

Web服务器内部根据用户要求的统一资源定位器(URL,即通常所说的网址)查找到对应的servlet,然后将servlet处理生成的HTML或XML文件以HTTP形式反馈给客户。Web程序开发人员主要编写servlet类程序无须关心Web服务器的运作细节,编写servlet的程序员用servlet API进行以下工作:

  • 初始化和结束servlet;
  • 连接servlet的运行环境;
  • 接收或传递Web请求,发送Web反应;
  • 维护和管理客户会话(session);
  • 和其他Web构件协同工作;
  • 使用过滤器对Web请求和响应进行处理;
  • 实现Web安全管理。

JSP可以说是servlet的变形,它像是文本格式的servlet,它的写法有些像写网页,这样就为应用开发者(特别是不熟悉Java语言的)提供了方便,JSP在Web容器内会被自动编译为servlet,编写JSP比编写servlet程序更简洁;一个JSP文件包括两类成分:生成HTML或XML模板和处理动态内容的JSP元素。JSP开发者如果只改变网页外观,他们只要对JSP内的模板进行编辑而不用改动JSP元素。JSP元素主要用于生成动态内容或调用底层EJB构件,Servlet编程将二者混在一起,而JSP就清楚多了,JSTL将常用的JSP功能封装成为简单的标签(tag)。熟悉HTML网页编程的人知道,网页是由各种有标签的文字组成的,各种标签(如表格、字体)的写法基本固定。JSTL采用了相似的概念设计JSP。例如,设计者不必自己用JSP写一个能连接数据库的JSP文件,可以用现成的JSTL标签来进行数据库连接。这种JSTL标签是最优化和标准化的,任何种类的Web服务器都会支持,这样就省去了不少JSP的麻烦;JSTL目前提供基本的JSP功能,仍在不断扩充中。

3)企业JavaBeans(EJB)构件

EJB容器用于实现企业业务操作的程序,它在多层结构中处于业务层和数据访问层。这里我们引入“业务逻辑”这个概念。在J2EE编程中,业务逻辑指特殊企业领域对数据的处理需求,譬如银行业务、零售或财务等,简单说就是企业程序中的数据结构和算法。业务逻辑因企业的业务性质而异,它由EJB构件在J2EE Web程序中实现,EJB构件能够从客户端或Web容器中收到数据并将处理过的数据传送到企业信息系统来存储,EJB还能够从数据库检索数据并送回到客户端;由于EJB依赖J2EE容器进行底层操作,使用EJB构件编写的程序具有良好的扩展性和安全性。

J2EE 1.4版有三种EJB构件:session bean(会话bean),entity bean(实体bean)和message-drivenbean(消息驱动bean)。

会话bean主要用来描述程序的业务逻辑。一个会话bean代表Web应用程序和客户的一次会话过程(一次“会话”)。在程序运行过程中,当Web应用的客户(如网上购物的消费者,银行系统使用者)执行完操作之后,会话bean和它所使用的数据会被删除(即不在数据库保存)。会话bean主要是为客户进行与业务逻辑相关的数据操作,如计算交易金额、存取数据等。会话bean可以是无状态的(stateless)或有状态的(stateful)。无状态是指不管任何用户每次调用其方法,会话bean都作同样响应。有状态是指会话bean需要维护和记录不同方法之间的构件状态,这种分类主要适用不同的数据操作。

    实体bean是用于表示和维护Web应用的数据实体的构件。简单地说,数据实体就是程序所使用的数据库中的数据对象。一个实体bean代表存放在数据库的一类数据对象。它是数据库内数据在EJB容器里的翻版。实体bean与会话bean不同,如果一个客户终止使用服务或J2EE应用服务器被关闭,EJB容器会保证实体bean的数据保存到数据库内。这就是所谓数据持久性(data persistence)。实体bean根据其实现数据持久性的方法分为bean-managed persistence和container-managed persistence两类。Bean-managed persistence指实体bean本身管理对数据库的访问,这要求编程者自己写一些数据库操作指令(如SQL)。Container-managed persistence指对数据库的访问由EJB容器负责;编程者只要定义相关设置,而不需要写数据库操作指令。虽然  container-managed persistence更简单,但是有些复杂的数据操作还是需要bean-managed persistence来完成。

    消息驱动bean实现了客户和服务器更松散的方法调用,利用消息服务器有其特定的优势,一个消息驱动bean能让客户和服务器之间进行异步(asynchronous)通信,服务器并不要求立刻响应;当Java消息服务器(Java message server)收到从客户端发来的消息时,消息驱动bean被激活,客户并不像使用会话bean那样直接调用消息驱动bean,这样客户不必要知道消息驱动bean中具体有什么方法可以调用。

2、服务技术

J2EE Web程序服务器提供了方便编程的各种服务技术,这些技术是一般Web应用需要用到但Web编程者不需要自己开发的,例如命名服务(naming service)、部署服务(deployment service)、数据连接(JDBC)、数据事务(data transaction)、安全服务(security service)和连接框架(connector architecture),在Web应用中一般通过调用现成的API来使用这些技术。

1)命名技术(JNDI)

    J2EE命名服务提供应用构件(包括客户、EJBbeans、servlet、JSP等)程序命名环境。在传统的面向对象编程中,如果一个类A要调用另一个类B,A需要知道B的源程序然后在其中new一个B的实例。当一方程序改变时,就要重新编译,而且类之间的连接比较混乱。Java Naming and Directory Interface(JNDI)(命名和目录接口)简化了高级Web程序类之间的查找调用。它提供了应用的命名环境(naming environment)。这就像一个公用电话簿,Web构件在命名环境注册登记,并且通过命名环境查找所需其他构件。

    JNDI API提供了Web构件进行标准目录操作的方法,譬如将对象属性和Java对象联系在一起,或者通过对象属性来查找Java对象。由于JNDI已经被标准化,程序可以通过使用JNDI来访问其他通用的命名服务,包括常用的Web命名协议LDAP,NDS,DNS和NIS。这促进了J2EE Web程序与其他平台系统的整合。

2)数据连接技术(JDBC)

Java Data-Base Connection(JDBC)API使J2EE平台和各种关系数据库之间连接起来。JDBC技术提供Java程序和数据库服务器之间的连接服务,同时它能保证数据事务的正常进行。另外,JDBC提供了从Java程序内调用SQL数据检索语言的功能;J2EE平台使用JDBC 2.0以上的API以及JDBC 2.0拓展API,这些API提供了高级的数据连接功能。

3)数据事务技术

数据事务(data transaction)用于保证数据读写时不会出乱。当程序进行数据库操作时,要么成功完成,要么一点也不改变数据库数据。最怕的是把数据改了一半程序出错,那样程序和数据就会出错。所以,数据事务有一个“不可分微粒”的概念,就是指一次数据事务过程不能间断,J2EE的数据事务服务保证应用程序的数据读写进程互相不干扰。

如果一个数据操作能整个完成,它就会被批准;否则,应用程序服务器就当什么都没做。 应用程序开发者不用自己实现这些功能,这样使数据操作简化了,数据事务技术使用JTA的API,它可以在EJB层或Web层实现。

4)安全技术

J2EE提供了严密的安全措施,它用于保证程序资源只能由获准的用户来使用。这一般分为两步。首先是验证(authentication),即个体必须由验证确定其身分。典型的做法是使用者提供验证数据(譬如用户名和密码)。我们称能被验证的个体为“本体”(principal),本体可能是个人用户或其他程序。第二步是授权(authorization)。当一位被验证通过的本体设法访问程序资源时,系统要根据安全策略确定是否该本体有权限进行这样的操作。

J2EE的容器提供两种安全方法:声明性(declarative)和程序性(programmatic)。声明性安全技术指在程序之外设定安全机制的参数。也就是编程者在程序配置描述文件里指定如何使用安全技术。相以地程序性安全技术在程序内用指令设定安全机制。这一般是指在Web构件或EJB构件的程序里调用Java的安全技术API。由于声明性安全设定不需要改动程序源代码,在J2EE程序中,一般使用声明性安全技术比较简单。

5)连接框架技术

J2EE连接框架技术(connector architecture)是一组用于连接J2EE平台到企业信息系统(EIS)的标准API。企业信息系统是一个广义的概念,它指企业处理和存储信息数据的程序系统,譬如企业资源计划(ERP)、大型机数据事务处理以及数据库系统等。由于很多系统已经使用多年,它们不一定是标准的数据库或Java程序。这些现有的信息系统又称为遗产系统(legacy systems),例如SAP、CICS和非关系数据库等系统。J2EE连接框架技术解决了现有企业信息系统与EJB容器和构件的集成,为此,J2EE连接框架技术定义一套扩展性强、安全的数据交互机制。这使J2EE Web程序能和其他类型的系统进行通话。这种技术主要是规定了J2EE程序服务器和遗留系统之间的资源适配器,这样使两者能够相互读懂对方的数据。

6)Web服务技术

Web服务技术是通过互联网进行远程应用服务和计算的新技术,被称为新一代的Web应用技术。在1.4版本之后,它已经成为J2EE平台的一部分,Web服务通过基于XML的开放标准使企业之间进行信息连接,企业使用基于XML的Web服务描述语言(WSDL)来描述他们的Web服务(比如银行转账、价格查询等);通过互联网,系统之间可以使用Web服务注册(如UDDI)来查找被登记的服务目录,这样实现了真正在Internet上的信息查询和交换。Java的Web服务主要提供系列于XML和Web服务协议有关的API(如JAXM,JAXP,JAXR,JAXRPC)等;在最新的J2EE 1.4平台内,Sun将引进部分Web服务的功能。

3、通信技术

J2EE的通信技术提供了客户和服务器之间及在不同服务器程序构件之间的通信机制,它包括在因特网(Internet)和内部网(Intranet)中的不同的通信协议。J2EE平台支持几种典型的通信技术:Internet协议,远程方法调用协议(RMI),对象管理群协议(OMGP),消息技术(messaging),数据格式。

1) Web协议

J2EE平台能够采用通用的Web协议(internet protocol)实现客户-服务器和Web应用之间的远程网际Web通信。

TCP/IP(Transport Control Protocolover Internet Protocol,即在互联协议之上的传输控制协议)是Internet在传输层和Web层的核心通信协议。作为Internet的基本协议,IP协议提供了寻址技术使数据在Web计算机之间传递。但是IP协议不能保证数据包(packet)是否能及时、准确和按序地传递,这些由TCP协议来保证。

HTTP 1.1是在互联网传送超文本文件的协议。HTTP消息包括从客户端到服务器的请求和从服务器到客户端的响应,HTTP协议和Web浏览器称为Internet最普及和最常用的功能。大多数Web机器都提供HTTP端口和互联网进行通信,在HTTP之上的SOAP协议成为正受到广泛关注的Web服务基础协议。

SSL 3.0(Secure Socket Layer)是Web的安全协议。它在TCP/IP之上对客户和服务器之间的Web通信信息进行加密而不被窃听,它可以和HTTP共同使用(即HTTPS)。服务器可以通过SSL对客户进行验证。

2)远程方法调用

远程方法调用(RMI)是Java的一组用于开发分布式应用程序的API。RMI使用Java语言接口定义了远程对象(在不同机器操作系统的程序对象),它结合了Java序列化(Java serialization)和Java远程方法协议(Java Remote Method Protocol)。简单地说,这样使原先的程序在同一操作系统的方法调用,变成了不同操作系统之间程序的方法调用。

由于J2EE是分布式程序平台,它以RMI机制实现程序构件在不同操作系统之间的通信。比如,一个EJB可以通过RMI调用Web上另一台机器上的EJB远程方法。

3)对象管理组协议

对象管理组(Object Management Group,OMG)协议允许在J2EE平台上的对象通过CORBA技术和远程对象通信。CORBA对象以IDL(接口定义语言)定义,程序对象以IDL编译器使对象和ORB(Object Request Broker,对象请求中介)连接;ORB就像是程序对象之间的介绍人,它帮助程序对象相互查找和通信,ORB使用IIOP(Internet Inter-ORBProtocol)协议和对象进行通信;OMG是一个广义的概念,J2EE平台要使用java IDL和RMI-IIOP来实现OMG。

4)Java通信服务技术

J2EE结合使用RMI和OMG来提供构件间的通信服务。Java IDL允许Java客户通过CORBA调用使用IDL定义了的远程对象,它属于Java标准版的技术,它提供的编译器可以根据CORBA对象生成桩(stub,Java客户端接口);Java客户连接stub并以CORBA API访问CORBA对象,编写Java RMI和CORBA的程序比较复杂,J2EE应用服务器的好处是它将这个过程进行了简化,编程者可以不必考虑很多多层RMI和CORBA的细节,只要理解其基本概念和使用方法就够了。

5)Java消息技术和邮件技术

Java消息服务(Java Message Service,JMS)API允许J2EE应用程序访问企业消息统,例如IBM MQ系列和TIBCO Rendezvous。JMS消息包含能描述具体企业活动的信息。企业可以通过这些消息交换跟踪企业活动进展。JMS API支持点对点和发布—订阅消息的形式。点对点消息方式类似E-mail,客户将消息发送给客户的消息序列,而发布—订阅消息方式类似讨论区,消息以主体分类管理。消息传递和接收方相对独立,依靠消息题目作为中介。在J2EE平台上,消息服务依靠消息EJB来实现。

Java邮件(JavaMail)API提供能进行电子邮件通信的一套抽象类和接口。它们支持多种电子邮件格式和传递方式。Java传讯可以通过这些类和接口收发电子邮件,也可以对其进行扩充。JavaMail使用JavaBeans激活框架(JavaBeans Activation Framework,JAF)API来读取和编辑电子邮件内的MIME数据。

五、J2EE Web技术的应用

20世纪末,互联网得到了广泛的应用,从而使人们的生活产生了巨变。目前的Web信息系统已经在社会的各个方面发挥重要作用。

最常见的Web信息系统就是商业网站(Web site)。这些网站为公司向消费者提供产品和服务(business-to-consumer),大量商业网站以廉价的商品和轻松的购物方式吸引了许多消费者;B2C之所以能进行主要由于Web是交互性的,消费者可以选择满意的商品然后输入信用卡号和地址,整个过程不需要人的干预;但是,当许多Web公司蜂拥而上推出网站时,由于市场规模有限,B2C并非都能赚钱。这就导致了美国在网站热潮之后的泡沫化经济。由于“客户-服务器”机制采用集散式结构,它比较适合B2C的商业模型。目前,只有市场占有量很大的商业网站有机会利用B2C模式盈利(如Amazon.com以网上购书为主要业务,Ebay.com的Web拍卖,expedia.com网上定票)。

B2B的概念指公司之间通过Web进行贸易和提供服务。B2B可以简化企业之间复杂的定单和账单传递方式。同时,当企业将大量的商业信息公布在网上时,会增加很多商机;因此,B2B成为在B2C之后Web经济的新增长点;Web B2B服务可以依赖商务实体之间的Web服务来实现。在每个公司的信息系统可以采用“客户-服务器”结构,它们之间通过特定服务协议进行通信。

P2P(pier-to-pier)Web是最近几年提出的新的Web系统应用模型,它的基本特点是Web中的计算机可根据使用状态实现客户机或服务器的功能。也就是说一台联网的机器既是服务器又是客户终端,P2P结构提供了传统“客户-服务器”所不具有的功能,它在一定程度上增加了Web资源共享的机会,降低了Web交通阻塞的几率。但是,目前P2P的使用和技术还不是非常成熟,程序开发者对其技术的理解存在差异。一般认为,P2P结构有两种形式:混合模式和单纯模式。混合模式指计算机之间通信依靠某些路由器终端(router-terminal)来连接对等的机器;单纯结构是指所有机器之间都是对等的,每台机器根据Web访问情况变化为客户机、服务器或路由器。在P2P结构中,由于机器之间连接更为紧密和混乱,Web安全成为最需要解决的问题之一。

参考资料:

《Java 2 Web开发认证学习指南》 Natalie Levi      电子工业出版社

《实用J2EE设计模式编程指南》 Craig A.Berry       电子工业出版社

《J2EE Web应用高级编程》    Greg Barish          清华大学出版社

《J2EE宝典》               Justin Couch          电子工业出版社


作者:务实,多年从事J2EE网站及应用系统项目的开发和应用


 

版权所有:UML软件工程组织