摘要:目前WEB服務(wù)體系架構(gòu)存在標(biāo)準(zhǔn)限制且需要支持多種類型的客戶端的問題,因而使得WEB服務(wù)的開發(fā)極具挑戰(zhàn)。文章通過基于J2EE的WEB應(yīng)用開發(fā)的所需的J2EE規(guī)范中的基本組件和容器進(jìn)行了分析,說明了如何利用現(xiàn)有的技術(shù)來應(yīng)對(duì)WEB應(yīng)用開發(fā)所面臨的問題,并對(duì)一些基本的機(jī)制作了說明。在此基礎(chǔ)上,提出了一種基于標(biāo)準(zhǔn)、新的體系架構(gòu),滿足企業(yè)的WEB應(yīng)用開發(fā)。
關(guān)鍵詞:WEB服務(wù);體系結(jié)構(gòu);JSP;組件;中間件
中圖分類號(hào):TP312文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2008)33-1402-04
Analysis and Research of WEB Applicational Development Based of the Middlware J2EE
YUAN Jian-qiu1, ZHOU Jia-ji1, LI Jun2, CHU Yuan1
(1.School of Information Engineering, Chengdu University of Technology, Chengdu 610059, China; 2.College of Communication and Engineering Technology, Agriculture University of Sichuan, Ya'an 625014, China)
Abstract: The current WEB services architecture have standard limits and must supply to the multi-type client ends.How to improve the WEB services become very difficult.With the reference to core-components and container of the J2EE,this thesis explains how to use the existing technology to solve of the WEB Applicational Development and it indicates the base mechanisms tha how to act in the WEB services environment.Based on this ,it analyses how to meet enterprise’s require under the direction of the current WEB Applicational Development.
Key words: WEB services; architecture; jsp; component; middleware
1 引言
計(jì)算機(jī)技術(shù)迅速發(fā)展。從硬件技術(shù)看,CPU速度越來越高,處理能力越來越強(qiáng);從軟件技術(shù)看,應(yīng)用程序的規(guī)模不斷擴(kuò)大,特別是Internet及WWW的出現(xiàn),使計(jì)算機(jī)的應(yīng)用范圍更為廣闊,許多應(yīng)用程序需在網(wǎng)絡(luò)環(huán)境的異構(gòu)平臺(tái)上運(yùn)行。這一切都對(duì)新一代的軟件開發(fā)提出了新的需求。在這種分布異構(gòu)環(huán)境中,通常存在多種硬件系統(tǒng)平臺(tái)(如PC,工作站,小型機(jī)等),在這些硬件平臺(tái)上又存在各種各樣的系統(tǒng)軟件(如不同的操作系統(tǒng)、數(shù)據(jù)庫、語言編譯器等),以及多種風(fēng)格各異的用戶界面,這些硬件系統(tǒng)平臺(tái)還可能采用不同的網(wǎng)絡(luò)協(xié)議和網(wǎng)絡(luò)體系結(jié)構(gòu)連接。如何把這些系統(tǒng)集成起來并開發(fā)新的應(yīng)用是一個(gè)非?,F(xiàn)實(shí)而困難的問題。
為解決分布異構(gòu)問題,人們提出了中間件(middleware)的概念。中間件是位于平臺(tái)(硬件和操作系統(tǒng))和應(yīng)用之間的通用服務(wù),如圖1所示,這些服務(wù)具有標(biāo)準(zhǔn)的程序接口和協(xié)議。針對(duì)不同的操作系統(tǒng)和硬件平臺(tái),它們可以有符合接口和協(xié)議規(guī)范的多種實(shí)現(xiàn)。當(dāng)前中間件技術(shù)的兩大陣營J2EE和.Net。IDC給出的一個(gè)定義:中間件是一種獨(dú)立的系統(tǒng)軟件或服務(wù)程序,分布式應(yīng)用軟件借助這種軟件在不同的技術(shù)之間共享資源,中間件位于客戶機(jī)服務(wù)器的操作系統(tǒng)之上,管理計(jì)算資源和網(wǎng)絡(luò)通信什么是J2EE?它和普通的Java有什么不同?J2EE全稱為Java2 Platform Enterprise Edition。 “J2EE平臺(tái)本質(zhì)上是一個(gè)分布式的服務(wù)器應(yīng)用程序設(shè)計(jì)環(huán)境——一個(gè)Java環(huán)境,它提供了:1) 宿主應(yīng)用的一個(gè)運(yùn)行基礎(chǔ)框架環(huán)境。2) 一套用來創(chuàng)建應(yīng)用的Java擴(kuò)展API[1]?!睆恼w上講,J2EE是使用Java技術(shù)開發(fā)企業(yè)級(jí)應(yīng)用的一種事實(shí)上的工業(yè)標(biāo)準(zhǔn)(Sun公司出于其自身利益的考慮,至今沒有將Java及其相關(guān)技術(shù)納入標(biāo)準(zhǔn)化組織的體系),它是Java技術(shù)不斷適應(yīng)和促進(jìn)企業(yè)級(jí)應(yīng)用過程中的產(chǎn)物。目前,Java平臺(tái)有三個(gè)版本:適用于小型設(shè)備和智能卡的J2ME(Java 2 Platform Micro Edition)、適用于桌面系統(tǒng)的J2SE和適用于企業(yè)級(jí)應(yīng)用的J2EE。Sun推出J2EE的目的是為了克服傳統(tǒng)Client/Server模式的弊病,迎合Browser/Server架構(gòu)的潮流,為應(yīng)用Java技術(shù)開發(fā)服務(wù)器端應(yīng)用提供一個(gè)平臺(tái)獨(dú)立的、可移植的、多用戶的、安全的和基于標(biāo)準(zhǔn)的企業(yè)級(jí)平臺(tái),從而簡化企業(yè)應(yīng)用的開發(fā)、管理和部署。J2EE是一個(gè)標(biāo)準(zhǔn),而不是一個(gè)現(xiàn)成的產(chǎn)品。各個(gè)平臺(tái)開發(fā)商按照J(rèn)2EE規(guī)范分別開發(fā)了不同的J2EE應(yīng)用服務(wù)器,J2EE應(yīng)用服務(wù)器是J2EE企業(yè)級(jí)應(yīng)用的部署平臺(tái)。由于它們都遵循了J2EE規(guī)范,因此,使用J2EE技術(shù)開發(fā)的企業(yè)級(jí)應(yīng)用可以部署在各種J2EE應(yīng)用服務(wù)器上。J2EE是很多技術(shù)的集合體,并且還在成長中。 你會(huì)遇到很多專有名詞:比如(X)HTML,Servlet/JSP,JDBC,JMS,JNDI,EJB,XML,Web Service……。尤其是XML和Web Service正在快速成長。大體上J2EE可以分成3個(gè)主要應(yīng)用:Servlet/JSP,EJB,XML/Web Service 和一些支撐技術(shù)例如JDBC和JNDI。
2 J2EE Blueprints設(shè)計(jì)模型
為了推廣并規(guī)范化使用J2EE架構(gòu)企業(yè)級(jí)應(yīng)用的體系架構(gòu),Sun同時(shí)給出了一個(gè)建議性的J2EE應(yīng)用設(shè)計(jì)模型:J2EE Blueprints。J2EE Blueprints提供了實(shí)施J2EE企業(yè)級(jí)應(yīng)用的體系架構(gòu)、設(shè)計(jì)模式和相關(guān)的代碼,通過應(yīng)用J2EE Blueprints所描述的體系模型,能夠部分簡化架構(gòu)企業(yè)級(jí)應(yīng)用這項(xiàng)復(fù)雜的工作。J2EE Blueprints是開發(fā)人員設(shè)計(jì)和優(yōu)化J2EE組件的基本原則,同時(shí)為圍繞開發(fā)工作進(jìn)行職能分工給出了指導(dǎo)性策略,以幫助應(yīng)用開發(fā)設(shè)計(jì)人員合理地分配技術(shù)資源。

圖1 中間件

圖2 J2EE服務(wù)器和容器(Container)
2.1 J2EE容器
下面我們參照J(rèn)2EE Blueprints,結(jié)合最新版的J2EE規(guī)范(J2EE 1.4),從整體上闡述如何使用J2EE架構(gòu)企業(yè)級(jí)應(yīng)用。容器(Container)是組件和支持組件功能的底層特定平臺(tái)(如數(shù)據(jù)庫)之間的接口。在運(yùn)行Web組件、企業(yè)Bean或者J2EE應(yīng)用程序客戶端之前,你必須將它們裝配到一個(gè)J2EE應(yīng)用程序中,并部署它們到容器中。
圖2給出了使用J2EE架構(gòu)企業(yè)級(jí)應(yīng)用的體系架構(gòu)。J2EE將組成一個(gè)完整企業(yè)級(jí)應(yīng)用的不同部分納入不同的容器(Container),每個(gè)容器中都包含若干組件(這些組件是需要部署在相應(yīng)容器中的),同時(shí)各種組件都能使用各種J2EE Service/API。J2EE容器包括如下內(nèi)容:
2.1.1 Web容器服務(wù)器端容器
Web容器服務(wù)器端容器包括兩種組件JSP和Servlet,JSP和Servlet都是Web服務(wù)器的功能擴(kuò)展,接受Web請(qǐng)求,返回動(dòng)態(tài)的Web頁面。Web容器中的組件可使用EJB容器中的組件完成復(fù)雜的商務(wù)邏輯。
2.1.2 EJB容器服務(wù)器端容器
EJB容器服務(wù)器端容器,包含的組件為EJB(Enterprise JavaBeans),它是J2EE的核心之一,主要用于服務(wù)器端的商業(yè)邏輯的實(shí)現(xiàn)。EJB規(guī)范定義了一個(gè)開發(fā)和部署分布式商業(yè)邏輯的框架,以簡化企業(yè)級(jí)應(yīng)用的開發(fā),使其較容易地具備可伸縮性、可移植性、分布式事務(wù)處理、多用戶和安全性等。
2.1.3 Applet容器客戶端容器
Applet容器客戶端容器包含的組件為Applet。Applet是嵌在瀏覽器中的一種輕量級(jí)客戶端,一般而言,僅當(dāng)使用Web頁面無法充分地表現(xiàn)數(shù)據(jù)或應(yīng)用界面的時(shí)候,才使用它。Applet是一種替代Web頁面的手段,我們僅能夠使用J2SE開發(fā)Applet,Applet無法使用J2EE的各種Service和API,這是為了安全性的考慮。
2.1.4 Application Client容器
Application Client容器(客戶端容器),包含的組件為Application Client。Application Client相對(duì)Applet而言是一種較重量級(jí)的客戶端,它能夠使用J2EE的大多數(shù)Service和API。
通過以上這四個(gè)容器,J2EE能夠靈活地實(shí)現(xiàn)前面描述的企業(yè)級(jí)應(yīng)用的架構(gòu)。在View部分,J2EE提供了三種手段:Web容器中的JSP(或Servlet)、Applet和Application Client,分別能夠?qū)崿F(xiàn)面向?yàn)g覽器的數(shù)據(jù)表現(xiàn)和面向桌面應(yīng)用的數(shù)據(jù)表現(xiàn)。Web容器中的Servlet是實(shí)現(xiàn)Controller部分業(yè)務(wù)流程控制的主要手段;而EJB則主要針對(duì)Model部分的業(yè)務(wù)邏輯實(shí)現(xiàn)。至于與各種企業(yè)資源和企業(yè)級(jí)應(yīng)用相連接,則是依靠J2EE的各種服務(wù)和API。
在J2EE的各種服務(wù)和API中,JDBC和JCA用于企業(yè)資源(各種企業(yè)信息系統(tǒng)和數(shù)據(jù)庫等)的連接,JAX-RPC、JAXR和SAAJ則是實(shí)現(xiàn)Web Services和Web Services連接的基本支持J2EE的各種組件。

圖3 JSP+Servlet形式
3 J2EE的各種組件、服務(wù)和API
我們就J2EE的各種組件、服務(wù)和API,進(jìn)行更加詳細(xì)的闡述,看看在開發(fā)不同類型的企業(yè)級(jí)應(yīng)用時(shí),根據(jù)各自需求和目標(biāo)的不同,應(yīng)當(dāng)如何靈活使用并組合不同的組件和服務(wù)。
3.1 Servlet
Servlet是Java平臺(tái)上的CGI技術(shù)。Servlet在服務(wù)器端運(yùn)行,動(dòng)態(tài)地生成Web頁面。與傳統(tǒng)的CGI和許多其它類似CGI的技術(shù)相比,Java Servlet具有更高的效率并更容易使用。對(duì)于Servlet,重復(fù)的請(qǐng)求不會(huì)導(dǎo)致同一程序的多次轉(zhuǎn)載,它是依靠線程的方式來支持并發(fā)訪問的。
一個(gè)Servlet是一個(gè)Java類。它處理Http(s)請(qǐng)求并作出響應(yīng),包括返回一個(gè)HTML頁面或轉(zhuǎn)交給其他URL處理。 Servlet必須運(yùn)行在一個(gè)Web Container例如Tomcat中。 Servlet必須是javax.servlet.http.Http Servlet的子類, 你可以繼承doGet()或者doPost()方法,兩者分別對(duì)應(yīng)于Http(s)中的Get請(qǐng)求和Post請(qǐng)求。 11 我怎么獲得Http請(qǐng)求里的參數(shù)? 答:HttpRequest的getParameter()方法。例如:String paramValue = request.getParameter(\"paramName\"); 12 我怎么返回結(jié)果? 答:你可以利用相關(guān)API打開一個(gè)輸出流,并向流中直接寫入一個(gè)HTML頁面。 但是作者完全不贊成這樣做。一方面這樣做會(huì)很羅嗦。 另一方面從Model-View-Controller模式(在《J2EE核心模式》中被歸為Front Controller模式)的觀點(diǎn)來看, 你應(yīng)當(dāng)提供一些HTML或者JSP作為視圖(view),而Servlet則根據(jù)請(qǐng)求參數(shù)決定轉(zhuǎn)到哪一個(gè)視圖。 你可以利用response.sendRedirect(...)方法或request.getDispatcher(...).forward()方法來實(shí)現(xiàn)。
3.2 JSP
JSP(Java Server Page)是一種實(shí)現(xiàn)普通靜態(tài)HTML和動(dòng)態(tài)頁面輸出混合編碼的技術(shù)。從這一點(diǎn)來看,非常類似Microsoft ASP、PHP等技術(shù)。借助形式上的內(nèi)容和外觀表現(xiàn)的分離,Web頁面制作的任務(wù)可以比較方便地劃分給頁面設(shè)計(jì)人員和程序員,并方便地通過JSP來合成。在運(yùn)行時(shí)態(tài),JSP將會(huì)被首先轉(zhuǎn)換成Servlet,并以Servlet的形態(tài)編譯運(yùn)行,因此它的效率和功能與Servlet相比沒有差別,一樣具有很高的效率。
3.3 EJB
EJB定義了一組可重用的組件:Enterprise Beans。開發(fā)人員可以利用這些組件,像搭積木一樣建立分布式應(yīng)用。在裝配組件時(shí),所有的Enterprise Beans都需要配置到EJB服務(wù)器(一般的Weblogic、WebSphere等J2EE應(yīng)用服務(wù)器都是EJB服務(wù)器)中。EJB服務(wù)器作為容器和低層平臺(tái)的橋梁管理著EJB容器,并向該容器提供訪問系統(tǒng)服務(wù)的能力。所有的EJB實(shí)例都運(yùn)行在EJB容器中。EJB容器提供了系統(tǒng)級(jí)的服務(wù),控制了EJB的生命周期。EJB容器為它的開發(fā)人員代管了諸如安全性、遠(yuǎn)程連接、生命周期管理及事務(wù)管理等技術(shù)環(huán)節(jié),簡化了商業(yè)邏輯的開發(fā)。EJB中定義了三種Enterprise Beans:
1) Session Beans;
2) Entity Beans;
3) Message-driven Beans。
3.4 JDBC
JDBC(Java Database Connectivity,Java數(shù)據(jù)庫連接)API是一個(gè)標(biāo)準(zhǔn)SQL(Structured Query Language,結(jié)構(gòu)化查詢語言)數(shù)據(jù)庫訪問接口,它使數(shù)據(jù)庫開發(fā)人員能夠用標(biāo)準(zhǔn)Java API編寫數(shù)據(jù)庫應(yīng)用程序。JDBC API主要用來連接數(shù)據(jù)庫和直接調(diào)用SQL命令執(zhí)行各種SQL語句。利用JDBC API可以執(zhí)行一般的SQL語句、動(dòng)態(tài)SQL語句及帶IN和OUT參數(shù)的存儲(chǔ)過程。Java中的JDBC相當(dāng)與Microsoft平臺(tái)中的ODBC(Open Database Connectivity)。
3.5 JMS
JMS(Java Message Service,Java消息服務(wù))是一組Java應(yīng)用接口,它提供創(chuàng)建、發(fā)送、接收、讀取消息的服務(wù)。JMS API定義了一組公共的應(yīng)用程序接口和相應(yīng)語法,使得Java應(yīng)用能夠和各種消息中間件進(jìn)行通信,這些消息中間件包括IBM MQ-Series、Microsoft MSMQ及純Java的SonicMQ。通過使用JMS API,開發(fā)人員無需掌握不同消息產(chǎn)品的使用方法,也可以使用統(tǒng)一的JMS API來操縱各種消息中間件。通過使用JMS,能夠最大限度地提升消息應(yīng)用的可移植性。 JMS既支持點(diǎn)對(duì)點(diǎn)的消息通信,也支持發(fā)布/訂閱式的消息通信。
3.6 JNDI
由于J2EE應(yīng)用程序組件一般分布在不同的機(jī)器上,所以需要一種機(jī)制以便于組件客戶使用者查找和引用組件及資源。在J2EE體系中,使用JNDI(Java Naming and Directory Interface)定位各種對(duì)象,這些對(duì)象包括EJB、數(shù)據(jù)庫驅(qū)動(dòng)、JDBC數(shù)據(jù)源及消息連接等。JNDI API為應(yīng)用程序提供了一個(gè)統(tǒng)一的接口來完成標(biāo)準(zhǔn)的目錄操作,如通過對(duì)象屬性來查找和定位該對(duì)象。由于JNDI是獨(dú)立于目錄協(xié)議的,應(yīng)用還可以使用JNDI訪問各種特定的目錄服務(wù),如LDAP、NDS和DNS等。
3.7 JTA
JTA(Java Transaction API)提供了J2EE中處理事務(wù)的標(biāo)準(zhǔn)接口,它支持事務(wù)的開始、回滾和提交。同時(shí)在一般的J2EE平臺(tái)上,總提供一個(gè)JTS(Java Transaction Service)作為標(biāo)準(zhǔn)的事務(wù)處理服務(wù),開發(fā)人員可以使用JTA來使用JTS。
3.8 JCA
JCA(J2EE Connector Architecture)是J2EE體系架構(gòu)的一部分,為開發(fā)人員提供了一套連接各種企業(yè)信息系統(tǒng)(EIS,包括ERP、SCM、CRM等)的體系架構(gòu),對(duì)于EIS開發(fā)商而言,它們只需要開發(fā)一套基于JCA的EIS連接適配器,開發(fā)人員就能夠在任何的J2EE應(yīng)用服務(wù)器中連接并使用它?;贘CA的連接適配器的實(shí)現(xiàn),需要涉及J2EE中的事務(wù)管理、安全管理及連接管理等服務(wù)組件。
3.9 JMX
JMX(Java Management Extensions)的前身是JMAPI。JMX致力于解決分布式系統(tǒng)管理的問題。JMX是一種應(yīng)用編程接口、可擴(kuò)展對(duì)象和方法的集合體,可以跨越各種異構(gòu)操作系統(tǒng)平臺(tái)、系統(tǒng)體系結(jié)構(gòu)和網(wǎng)絡(luò)傳輸協(xié)議,開發(fā)無縫集成的面向系統(tǒng)、網(wǎng)絡(luò)和服務(wù)的管理應(yīng)用。JMX是一個(gè)完整的網(wǎng)絡(luò)管理應(yīng)用程序開發(fā)環(huán)境,它同時(shí)提供了廠商需要收集的完整的特性清單、可生成資源清單表格、圖形化的用戶接口;訪問SNMP的網(wǎng)絡(luò)API;主機(jī)間遠(yuǎn)程過程調(diào)用;數(shù)據(jù)庫訪問方法等。
3.10 JAAS
JAAS(Java Authentication and Authorization Service)實(shí)現(xiàn)了一個(gè)Java版本的標(biāo)準(zhǔn)Pluggable Authentication Module(PAM)的框架。JAAS可用來進(jìn)行用戶身份的鑒定,從而能夠可靠并安全地確定誰在執(zhí)行Java代碼。同時(shí)JAAS還能通過對(duì)用戶進(jìn)行授權(quán),實(shí)現(xiàn)基于用戶的訪問控制。
3.11 JACC
JACC(Java Authorization Service Provider Contract for Containers)在J2EE應(yīng)用服務(wù)器和特定的授權(quán)認(rèn)證服務(wù)器之間定義了一個(gè)連接的協(xié)約,以便將各種授權(quán)認(rèn)證服務(wù)器插入到J2EE產(chǎn)品中去。
3.12 JAX-RPC
通過使用JAX-RPC(Java API for XML-based RPC),已有的Java類或Java應(yīng)用都能夠被重新包裝,并以Web Services的形式發(fā)布。JAX-RPC提供了將RPC參數(shù)(in/out)編碼和解碼的API,使開發(fā)人員可以方便地使用SOAP消息來完成RPC調(diào)用。同樣,對(duì)于那些使用EJB(Enterprise JavaBeans)的商業(yè)應(yīng)用而言,同樣可以使用JAX-RPC來包裝成Web服務(wù),而這個(gè)Web Servoce的WSDL界面是與原先的EJB的方法是對(duì)應(yīng)一致的。JAX-RPC為用戶包裝了Web服務(wù)的部署和實(shí)現(xiàn),對(duì)Web服務(wù)的開發(fā)人員而言,SOAP/WSDL變得透明,這有利于加速Web服務(wù)的開發(fā)周期。
3.13 JAXR
JAXR(Java API for XML Registries)提供了與多種類型注冊(cè)服務(wù)進(jìn)行交互的API。JAXR運(yùn)行客戶端訪問與JAXR規(guī)范相兼容的Web Servcices,這里的Web Services即為注冊(cè)服務(wù)。一般來說,注冊(cè)服務(wù)總是以Web Services的形式運(yùn)行的。JAXR支持三種注冊(cè)服務(wù)類型:JAXR Pluggable Provider、Registry-specific JAXR Provider、JAXR Bridge Provider(支持UDDI Registry和ebXML Registry/Repository等)。
3.14 SAAJ
SAAJ(SOAP with Attachemnts API for Java)是JAX-RPC的一個(gè)增強(qiáng),為進(jìn)行低層次的SOAP消息操縱提供了支持。
4 基于Java技術(shù)的Web應(yīng)用體系結(jié)構(gòu)
下面我們通過假設(shè)一個(gè)企業(yè)應(yīng)用的J2EE實(shí)現(xiàn),來了解各種組件和服務(wù)的應(yīng)用。假設(shè)應(yīng)用對(duì)象是計(jì)算機(jī)產(chǎn)品的生產(chǎn)商/零售商的銷售系統(tǒng),這個(gè)銷售系統(tǒng)能夠通過自己的網(wǎng)站發(fā)布產(chǎn)品信息,同時(shí)也能將產(chǎn)品目錄傳送給計(jì)算機(jī)產(chǎn)品交易市場。銷售系統(tǒng)能夠在線接受訂單(來自自己的Web網(wǎng)站或者來自計(jì)算機(jī)產(chǎn)品交易市場),并隨后轉(zhuǎn)入內(nèi)部企業(yè)管理系統(tǒng)進(jìn)行相關(guān)的后續(xù)處理。
企業(yè)應(yīng)用可以這種方式架構(gòu)。該企業(yè)應(yīng)用的核心是產(chǎn)品目錄管理和產(chǎn)品定購管理這兩個(gè)業(yè)務(wù)邏輯,使用EJB加以實(shí)現(xiàn),并部署在EJB容器中。由于產(chǎn)品目錄和定購信息都需要持久化,因此使用JDBC連接數(shù)據(jù)庫,并使用JTA來完成數(shù)據(jù)庫存取事務(wù)。
整個(gè)網(wǎng)站系統(tǒng)采用Browser/Web/DataBase的三層體系結(jié)構(gòu)。Web服務(wù)器接受請(qǐng)求,通過應(yīng)用程序服務(wù)器執(zhí)行一個(gè)Java服務(wù)器端小程序Servlet并返回其輸出,從而實(shí)現(xiàn)與客戶機(jī)進(jìn)行信息資源的交互。數(shù)據(jù)庫服務(wù)器用來存儲(chǔ)管理信息系統(tǒng)中所用到的各種數(shù)據(jù),數(shù)據(jù)由數(shù)據(jù)庫管理程序直接錄入。系統(tǒng)的客戶端只需要一個(gè)瀏覽器即可。相關(guān)人員通過瀏覽器來查詢、增加、修改、刪除數(shù)據(jù),對(duì)信息進(jìn)行管理。
4.1 用JSP開發(fā)Web網(wǎng)站的應(yīng)用實(shí)例
JSP作為J2EE的一部分,既可以用于開發(fā)小型的Web站點(diǎn)、也可以用于開發(fā)大型的、企業(yè)級(jí)的應(yīng)用程序,下面給出使用JSP進(jìn)行開發(fā)的不同方式:1) 直接使用JSP(以頁面為中心Page-Centric方式);2) JSP + JavaBeans或者JSP+Servlet的兩層的開發(fā)結(jié)構(gòu)(JSP Model 1);3) JSP + JavaBeans + Servlet的MVC的三層開發(fā)結(jié)構(gòu)(JSP Model 2)
4.2 三種不同的JSP開發(fā)J2EE WEB應(yīng)用服務(wù)器的異同點(diǎn):
4.2.1 它們之間的基本相同之處
它們都是用一組特性創(chuàng)建,以執(zhí)行其特定任務(wù)的對(duì)象或組件;它們還有從當(dāng)前所駐留服務(wù)器上的容器獲得其它特性的能力;都是與平臺(tái)無關(guān)的。
4.2.3 它們之間的基本不同之處
EJB 是部署在服務(wù)器上的可執(zhí)行組件或商業(yè)對(duì)象,有一個(gè)協(xié)議允許對(duì)其進(jìn)行遠(yuǎn)程訪問或在特定服務(wù)器上安裝或部署它們。有一系列機(jī)制允許它們將服務(wù)安全性、事務(wù)行為、并發(fā)性(由多個(gè)客戶機(jī)同時(shí)訪問的能力)和持久性(其狀態(tài)可以保存多久)的主要方面授權(quán)給EJB 服務(wù)器上其所在的容器;EJB 是設(shè)計(jì)成運(yùn)行在服務(wù)器上,并由客戶機(jī)調(diào)用的非可視遠(yuǎn)程對(duì)象??赏ㄟ^多個(gè)非可視JavaBean構(gòu)建EJB。
5 結(jié)束語
Java 2 Enterprise Edition(JAVA2企業(yè)版),使用Java進(jìn)行企業(yè)開發(fā)的一套擴(kuò)展標(biāo)準(zhǔn),必須基于J2SE,提供一個(gè)基于組件設(shè)計(jì)、 開發(fā)、集合、展開企業(yè)應(yīng)用的途徑。J2EE平臺(tái)提供了多層、分布式的應(yīng)用模型,重新利用組件的能力,統(tǒng)一安全的模式以及靈活的處理控制能力。J2EE包括EJB, JTA, JDBC, JCA, JMX, JNDI, JMS,
JavaMail, Servlet, JSP等規(guī)范。實(shí)質(zhì)上,J2EE應(yīng)用只是特定于企業(yè)的軟件程序,它基于控制組織的一般規(guī)則中的某一部分來提供某種形式的功能。J2EE平臺(tái)可管理軟件基礎(chǔ)結(jié)構(gòu)和支持WEB服務(wù),這使得開發(fā)人員可以創(chuàng)建安全的、分布式的級(jí)及可互操作的企業(yè)應(yīng)用。因?yàn)橛蒍2EE構(gòu)建的應(yīng)用具有分式的、多層的和基于組件的結(jié)構(gòu),所以,J2EE促進(jìn)了可伸縮應(yīng)用的開發(fā)。多層結(jié)構(gòu)是J2EE核心,在組成應(yīng)用的各種組件在邏輯上是分離的或者是分布式的,跨越網(wǎng)絡(luò)計(jì)算環(huán)境的各個(gè)級(jí)別或各層(這種結(jié)構(gòu)也稱為N層結(jié)構(gòu))。

圖4 企業(yè)WEB服務(wù)器三層架構(gòu)
采用JSP/Servlet來實(shí)現(xiàn)應(yīng)用的Web表現(xiàn):在線產(chǎn)品目錄瀏覽和在線定購。為了將產(chǎn)品目錄發(fā)送給特定的交易市場,使用JMS實(shí)現(xiàn)異步的基于消息的產(chǎn)品目錄傳輸。為了使得更多的其它外部交易市場能夠集成產(chǎn)品目錄和定購業(yè)務(wù),需要使用Web Services技術(shù)包裝商業(yè)邏輯的實(shí)現(xiàn)。由于產(chǎn)品定購管理需要由公司內(nèi)部雇員進(jìn)行處理,因此需要集成公司內(nèi)部的用戶系統(tǒng)和訪問控制服務(wù)以方便雇員的使用,使用JACC集成內(nèi)部的訪問控制服務(wù),使用JNDI集成內(nèi)部的用戶目錄,并使用JAAS進(jìn)行訪問控制。由于產(chǎn)品訂購事務(wù)會(huì)觸發(fā)后續(xù)的企業(yè)ERP系統(tǒng)的相關(guān)操作(包括倉儲(chǔ)、財(cái)務(wù)、生產(chǎn)等),需要使用JCA連接企業(yè)ERP。
最后為了將應(yīng)用納入到企業(yè)整體的系統(tǒng)管理體系中去,使用Application Client架構(gòu)了一個(gè)管理客戶端(與其它企業(yè)應(yīng)用管理應(yīng)用部署在一臺(tái)機(jī)器上),并通過JMX管理這個(gè)企業(yè)應(yīng)用。在企業(yè)級(jí)的Web應(yīng)用中,通常包含Web瀏覽器(表示)、中間層(業(yè)務(wù))和后臺(tái)數(shù)據(jù)庫服務(wù)器三個(gè)層次。Web瀏覽器:Web瀏覽器是三層結(jié)構(gòu)中的第一個(gè)層次,利用Web瀏覽器作為客戶端,使客戶面對(duì)一個(gè)統(tǒng)一的應(yīng)用界面??梢圆捎肑SP頁面來顯示由中間層所返回的數(shù)據(jù)。Servlet或者JavaBean中間層:中間層是指運(yùn)行在服務(wù)器中的,聯(lián)系Web瀏覽器與后臺(tái)數(shù)據(jù)庫服務(wù)器的軟件。對(duì)基于Java技術(shù)的Web應(yīng)用,一般可以采用Servlet或者JavaBean來實(shí)現(xiàn)中間層。中間層在瀏覽器和數(shù)據(jù)庫服務(wù)器之間完成“粘合”作用。后臺(tái)數(shù)據(jù)庫服務(wù)器是用戶存放數(shù)據(jù)信息的地方,中間層可以通過JDBC來訪問后臺(tái)數(shù)據(jù)庫。對(duì)于采用何種類型的數(shù)據(jù)庫系統(tǒng),取決于具體的應(yīng)用。
參考文獻(xiàn):
[1] 沃爾什.J2EE 1.4基礎(chǔ)教程[M].李化,瀟東,譯.北京:清華大學(xué)出版社,2003.
[2] 陳華軍.J2EE構(gòu)建企業(yè)級(jí)應(yīng)用解決方案[M].北京:人民郵電出版社,2002.
[3] 劉特.J2EE EJB應(yīng)用編程實(shí)例[M].北京:清華大學(xué)出版社,2003.
[4] http://www.cnitgate.com/data/2006/0813/article_405.htm[EB/OL].
[5] http://blog.sina.com.cn/u/49a0783b010003si[EB/OL].
[6] http://java.sun.com/blueprints[EB/OL].
[7] http://java.sun.com/blueprints/enterprise[EB/OL].
[8] http://java.sun.com/blueprints/patterns[EB/OL].
[9] http://www.soudie.net/top_67287_cat_8 [EB/OL].