鄭志剛 董亞洲
摘 要:基于j2ee體系架構(gòu),充分利用了j2ee體系架構(gòu)的優(yōu)勢(shì),描述了j2ee分布式應(yīng)用體系結(jié)構(gòu)的特點(diǎn),講解了該系統(tǒng)的整體架構(gòu)設(shè)計(jì)。這些架構(gòu)的應(yīng)用,不僅降低了軟件開(kāi)發(fā)的成本,同時(shí)也保證了Web應(yīng)用系統(tǒng)的質(zhì)量。
關(guān)鍵詞:J2EE平臺(tái);Web應(yīng)用;JSP
1 J2EE技術(shù)分析
J2EE(Java 2 Platform Enterprise Edition)是SUN公司領(lǐng)導(dǎo),多家公司共同參與制定的一個(gè)分布式企業(yè)級(jí)應(yīng)用的規(guī)范。它提供了基于組件的,以服務(wù)器為中心的多層應(yīng)用體系結(jié)構(gòu)。這種多層結(jié)構(gòu)的設(shè)計(jì)極大的簡(jiǎn)化了開(kāi)發(fā)、配置和維護(hù)企業(yè)應(yīng)用的過(guò)程。
目前Java 2平臺(tái)有三個(gè)版本,它們是適用于小型設(shè)備和智能卡的Java2平臺(tái)Micro版(Java 2 Platform Micro Edition J2ME)、適用于桌面系統(tǒng)的Java 2平臺(tái)標(biāo)準(zhǔn)版(Java 2 Platform Stand Edition J2SE)、適用于創(chuàng)建服務(wù)器應(yīng)用程序和服務(wù)的Java 2平臺(tái)企業(yè)版(Java 2 Platform MicroEdition J2EE)。J2EE是一種利用Java 2平臺(tái)來(lái)簡(jiǎn)化企業(yè)解決方案的開(kāi)發(fā)、部署和管理相關(guān)的復(fù)雜問(wèn)題的體系結(jié)構(gòu)。J2EE鞏固了標(biāo)準(zhǔn)版中的許多優(yōu)點(diǎn),例如“編寫(xiě)一次、到處運(yùn)行”的特性,方便存取數(shù)據(jù)庫(kù)的JDBCAPI,CORBA技術(shù)以及能夠在Internet應(yīng)用中保護(hù)數(shù)據(jù)的安全模式等等,同時(shí)還提供了對(duì)EJB(Enterprise Java Beans),Java ServletsAPI,JSP(Java Server Pages)以及XML技術(shù)的全面支持。其最終目的就是成為一個(gè)能夠使企業(yè)開(kāi)發(fā)者大幅縮短應(yīng)用投放市場(chǎng)時(shí)間的體系結(jié)構(gòu)。
2 J2EE的組件與容器
J2EE是一個(gè)支持基于組件的分布式應(yīng)用程序的完整平臺(tái),對(duì)J2EE平臺(tái)體系結(jié)構(gòu)的支持通過(guò)兩個(gè)基本的部分實(shí)現(xiàn):組件和容器。容器可以支持組件,簡(jiǎn)單的說(shuō)就一句話(huà):容器為組件提供了一個(gè)工作環(huán)境。容器提供了一種把服務(wù)插入到組件操作中的方法,不需要組件開(kāi)發(fā)人員編寫(xiě)特殊的編碼。
組件表示的是開(kāi)發(fā)和發(fā)布的單元,設(shè)計(jì)成比其他模式可以更簡(jiǎn)單地進(jìn)行構(gòu)建。組件提供了標(biāo)準(zhǔn)化的功能,具有定義完善的應(yīng)用程序接口,并對(duì)于特定的商業(yè)目的能夠容易地開(kāi)發(fā)和發(fā)布。支持組件的容器表示的是可靠的標(biāo)準(zhǔn)化服務(wù)。通過(guò)容器這個(gè)機(jī)制J2EE支持Java編程語(yǔ)言的“編寫(xiě)一次,隨處運(yùn)行”的承諾。這兩個(gè)新名詞當(dāng)中以支持組件的容器尤為重要。
2.1 J2EE容器
J2EE將組成一個(gè)完整企業(yè)級(jí)應(yīng)用的不同部分納入不同的容器(Container),每個(gè)容器中都包含若干組件(這些組件是需要部署在相應(yīng)容器中的),同時(shí)各種組件都能使用各種J2EE Service/API. J2EE容器包括:
2.1.1 Web容器
服務(wù)器端容器,包括兩種組件JSP和Servlet, JSP和Servlet都是Web服務(wù)器的功能擴(kuò)展,接受Web請(qǐng)求,返回動(dòng)態(tài)的Web頁(yè)面。Web容器中的組件可使用EJB容器中的組件完成復(fù)雜的商務(wù)邏輯。
2.1.2 EJB容器
服務(wù)器端容器,包含的組件為EJB(Enterprise Java Beans),它是J2EE的核心之一,主要用于服務(wù)器端的商業(yè)邏輯的實(shí)現(xiàn)。EJB規(guī)范定義了一個(gè)開(kāi)發(fā)和部署分布式商業(yè)邏輯的框架,以簡(jiǎn)化企業(yè)級(jí)應(yīng)用的開(kāi)發(fā),使其較容易地具備可伸縮性、可移植性、分布式事務(wù)處理、多用戶(hù)和安全性等。
2.1.3 Applet容器
客戶(hù)端容器,包含的組件為Applet.Applet是嵌在瀏覽器中的一種輕量級(jí)客戶(hù)端,一般而言,僅當(dāng)使用Web頁(yè)面無(wú)法充分地表現(xiàn)數(shù)據(jù)或應(yīng)用界面的時(shí)候,才使用它。Applet是一種替代Web頁(yè)面的手段,我們能夠使用J2SE開(kāi)發(fā)Applet, Applet無(wú)法使用J2EE的各種Service和API,這是為了安全性的考慮。
2.1.4 Application Client容器
客戶(hù)端容器,包含的組件為Application Client Application Client相對(duì)Applet而言是一種較重量級(jí)的客戶(hù)端,它育游使用J2EE的大多數(shù)Service和API.基于J2EE和工作流技術(shù)的校園OA系統(tǒng)建模分析及研究
通過(guò)這四個(gè)容器,J2EE能夠靈活地實(shí)現(xiàn)企業(yè)級(jí)應(yīng)用的架構(gòu)。J2EE提供了三種手段:Web容器中的JSP(或Servlet), Applet和Application Client,分別實(shí)現(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。
2.2 J2EE的核心API與組件
J2EE平臺(tái)由一整套服務(wù)(Services)、應(yīng)用程序接口(APIs)與協(xié)議構(gòu)成,它對(duì)開(kāi)發(fā)基于Web的多層應(yīng)用提供了支持。下面具體分析一下J2EE的各種組件、服務(wù)和API,以便根據(jù)各自需求和目標(biāo)的不同,靈活選擇并組合不同的組件和服務(wù)。
2.2.1 Servlet
Servlet是Java平臺(tái)上的CGI技術(shù)。Servlet在服務(wù)器端運(yùn)行,動(dòng)態(tài)地生成Web頁(yè)面。與傳統(tǒng)的CG工和許多其它粼以CGI的技術(shù)相比,Java Servlet具有更高的效率并更容易使用。對(duì)于Servlet,重復(fù)的請(qǐng)求不會(huì)導(dǎo)致同一程序的多次轉(zhuǎn)載,它是依靠線(xiàn)程的方式來(lái)支持并發(fā)訪問(wèn)的。
2.1.2 JSP
JSP(Java Server Page)是一種實(shí)現(xiàn)普通靜態(tài)HTML和動(dòng)態(tài)頁(yè)面輸出混合編碼的技術(shù)。從這一點(diǎn)來(lái)看,非常類(lèi)似Microsoft ASP, PHP等技術(shù)。借助形式上的內(nèi)容和外觀表現(xiàn)的分離,Web頁(yè)面制作的任務(wù)可以比較方便地劃分給頁(yè)面設(shè)計(jì)人員和程序員,并方便地通過(guò)JSP來(lái)合成。在運(yùn)行時(shí)態(tài),JSP將會(huì)被首先轉(zhuǎn)換成Servlet,并以Servlet的形態(tài)編譯運(yùn)行,因此它的效率和功能與Servlet相比沒(méi)有差別,一樣具有很高的效率。
2.1.3 JDBC
JDBC(Java Database Connectivity, Java數(shù)據(jù)庫(kù)連接)API是一個(gè)標(biāo)準(zhǔn)。一些應(yīng)用程序可以使用JDBC應(yīng)用程序接口來(lái)訪問(wèn)關(guān)系數(shù)據(jù)庫(kù)中的數(shù)據(jù),JDBC負(fù)責(zé)一般的持久性數(shù)據(jù)訪問(wèn)和管理。在J2EE應(yīng)用程序中,JDBC中可以嵌入SQL語(yǔ)句,用以訪問(wèn)關(guān)系型數(shù)據(jù)庫(kù),當(dāng)然根據(jù)數(shù)據(jù)庫(kù)類(lèi)型的不同,SQL語(yǔ)句的詞法和語(yǔ)法也會(huì)有所不同;需要說(shuō)明的是,當(dāng)數(shù)據(jù)存儲(chǔ)格式不同的時(shí)候,數(shù)據(jù)訪問(wèn)邏輯的區(qū)別就更加明顯了。SQL (Structured Query Language,結(jié)構(gòu)化查詢(xún)語(yǔ)言)數(shù)據(jù)庫(kù)訪問(wèn)接口,它使數(shù)據(jù)庫(kù)開(kāi)發(fā)人員能夠用標(biāo)準(zhǔn)Java API編寫(xiě)數(shù)據(jù)庫(kù)應(yīng)用程序。JDBC API主要用來(lái)連接數(shù)據(jù)庫(kù)和直接調(diào)用SQL命令執(zhí)行各種SQL語(yǔ)句。利用JDBC API可以執(zhí)行一般的SQL語(yǔ)句、動(dòng)態(tài)SQL語(yǔ)句及帶IN和OUT參數(shù)的存儲(chǔ)過(guò)程。Java中的JDBC相當(dāng)于Microsoft平臺(tái)中的ODBC(Open Database Connectivity)。
3 J2EE體系結(jié)構(gòu)的優(yōu)點(diǎn)
J2EE體系結(jié)構(gòu)的優(yōu)點(diǎn)在于:⑴可移植性強(qiáng)。J2EE計(jì)算平臺(tái)支持java語(yǔ)言,使得基于J2EE標(biāo)準(zhǔn)開(kāi)發(fā)的應(yīng)用具有java語(yǔ)言所特有的與平臺(tái)無(wú)關(guān)性,一套程序可以適用于多種平臺(tái),保證了系統(tǒng)可以跨平臺(tái)的移植。除了Java語(yǔ)言固有的可移植性外,EJB體系結(jié)構(gòu)在Bean和支持該Bean的容器之間提供了一套標(biāo)準(zhǔn)化的應(yīng)用程序編程接口,這使開(kāi)發(fā)人員能夠?qū)ean從一種操作環(huán)境移植到另一種操作環(huán)境,而無(wú)需重新編寫(xiě)其源代碼。⑵可維護(hù)性強(qiáng)。在J2EE的這種體系結(jié)構(gòu)下,事務(wù)處理邏輯組件集中放置在應(yīng)用功能服務(wù)器上,這將使系統(tǒng)維護(hù)變得簡(jiǎn)單、容易。當(dāng)系統(tǒng)的事務(wù)處理邏輯發(fā)生變化時(shí),只需更新應(yīng)用功能及務(wù)器上的事務(wù)處理邏輯組件即可,而與客戶(hù)機(jī)端無(wú)關(guān),避免了客戶(hù)端應(yīng)用榴字的版本控制和更新的困難?;诮M件的設(shè)計(jì)簡(jiǎn)化了應(yīng)用程序的維護(hù)。⑶安全性強(qiáng)。由于在客戶(hù)機(jī)和數(shù)據(jù)庫(kù)服務(wù)器之間插入了應(yīng)用功能服務(wù)器,使兩者不直接相聯(lián)系,并且系統(tǒng)的事務(wù)處理邏輯組件在應(yīng)用功能服務(wù)器上,便于集中控制,這樣既防止了非法侵入數(shù)據(jù)庫(kù),同時(shí)又防止了用戶(hù)對(duì)系統(tǒng)的破壞。⑷靈活性強(qiáng)。J2EE體系結(jié)構(gòu)各層次之間保持相對(duì)獨(dú)立,當(dāng)其中某一層因需要作出修改時(shí),其他各層不受影響,這種軟件獨(dú)立性使得系統(tǒng)的改進(jìn)、升級(jí)變得極為靈活。⑸簡(jiǎn)化開(kāi)發(fā)。J2EE體系結(jié)構(gòu)各層次之間在邏輯上保持相對(duì)獨(dú)立,在系統(tǒng)開(kāi)發(fā)期間,各層的開(kāi)發(fā)可以并行進(jìn)行,又由于J2EE采用了構(gòu)件技術(shù),許多模塊可以被重用,這樣大大節(jié)約了開(kāi)發(fā)時(shí)間,縮短了系統(tǒng)的開(kāi)發(fā)周期,提高了效率。
4 J2EE平臺(tái)下Web開(kāi)發(fā)框架
框架(framework)不同于類(lèi)庫(kù)(library)??蚣芴峁┑牟皇且唤M功能性的組件,而是一個(gè)軟件結(jié)構(gòu),一種業(yè)務(wù)流程,以及Hollywood法則(“Dont call us,well call you”)。選擇框架,意味著Web應(yīng)用開(kāi)發(fā)人員只需且只能在框架限制的范圍內(nèi)編寫(xiě)業(yè)務(wù)組件和顯示組件,由框架管理這些組件之間的協(xié)作。這能得到結(jié)構(gòu)更加良好,質(zhì)量更加可靠的Web應(yīng)用軟件?,F(xiàn)在,常用的J2EE平臺(tái)下Web應(yīng)用框架包括Struts、spring、JSF、WebWork等。
5 展望Web應(yīng)用開(kāi)發(fā)
縱觀Web應(yīng)用的發(fā)展過(guò)程,有兩個(gè)現(xiàn)象值得注意。首先,底層功能的完善會(huì)優(yōu)化上層功能,上層功能的推廣對(duì)底層功能提出更高的要求。當(dāng)Web硬件能提供高速度的帶寬時(shí),軟件公司才能開(kāi)發(fā)出滿(mǎn)足用戶(hù)需要的程序。Web系統(tǒng)被大量使用往往使現(xiàn)有系統(tǒng)不能滿(mǎn)足要求。這就要求開(kāi)發(fā)出新的硬件和軟件系統(tǒng)。在此背景下,Web應(yīng)用技術(shù)在整個(gè)人類(lèi)的生活中開(kāi)始占據(jù)重要的位置,隨著Web應(yīng)用平臺(tái)和框架的增多,如何快速有效的進(jìn)行Web應(yīng)用開(kāi)發(fā),而且如何盡可能的使前期開(kāi)發(fā)可以為多個(gè)Web框架應(yīng)用,成為IT業(yè)界的研究方向。
6 結(jié)束語(yǔ)
J2EE平臺(tái)在當(dāng)前的Web應(yīng)用開(kāi)發(fā)中占有重要的地位,熟知J2EE下多個(gè)框架如:Struts、spring、JSF、WebWork的內(nèi)部結(jié)構(gòu),發(fā)掘其內(nèi)部共性,對(duì)于后期的J2EE下的模型開(kāi)發(fā)以及模型映射具有重要的意義。
[參考文獻(xiàn)]
[1]計(jì)算機(jī)軟件產(chǎn)品開(kāi)發(fā)文件編制指南.中華人民共和國(guó)國(guó)家標(biāo)準(zhǔn).8567-88.
[2]博嘉科技組,編,Donny,編著.JSP與網(wǎng)站開(kāi)發(fā)編程實(shí)戰(zhàn).科學(xué)出版社.2001.
[3]Subrahmanyam Allamaraju,等,著.《J2EE服務(wù)器端高級(jí)編程》.機(jī)械工業(yè)出版社.