《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 其他 > 業(yè)界動(dòng)態(tài) > 基于J2EE的Web 應(yīng)用的建模

基于J2EE的Web 應(yīng)用的建模

2008-12-20
作者:萬賢福,宋碧蓮,孫莉

1、引 言?

??? 隨著全球化市場競爭的加劇,傳統(tǒng)的Web 應(yīng)用系統(tǒng)" title="應(yīng)用系統(tǒng)">應(yīng)用系統(tǒng)已經(jīng)不適應(yīng)企業(yè)業(yè)務(wù)不斷擴(kuò)展,流程不斷變化,存儲(chǔ)數(shù)據(jù)分布處理,企業(yè)之間橫向聯(lián)系的要求。如何使得企業(yè)應(yīng)用系統(tǒng)在激烈的市場競爭中能夠迅速地反映企業(yè)的變化,加強(qiáng)伙伴企業(yè)之間應(yīng)用服務(wù)的快速發(fā)現(xiàn),企業(yè)之間業(yè)務(wù)數(shù)據(jù)的無縫集成,對于提高企業(yè)Web 應(yīng)用的市場競爭力具有非常重要的意義。J2EE正是在這種背景下產(chǎn)生的,它是解決企業(yè)級(jí)應(yīng)用棘手問題的理想平臺(tái)。由此基于J2EE開發(fā)Web 應(yīng)用成為了當(dāng)前的熱點(diǎn)。然而由于J2EE體系結(jié)構(gòu)的特殊性,基于J2EE開發(fā)Web 應(yīng)用有其自身的特點(diǎn)。于是如何對利用J2EE開發(fā)的Web 應(yīng)用進(jìn)行建模,成為擺在我們面前的問題。

本文在充分分析J2EE體系結(jié)構(gòu)以及基于J2EE的web應(yīng)用的基礎(chǔ)之上,得出基于J2EE的Web 應(yīng)用的建模任務(wù),接著通過實(shí)例講解基于J2EE的Web 應(yīng)用的建模具體步驟,最后總結(jié)出建模原則。

2、J2EE?

??? J2EE是一種利用Java 2平臺(tái)來簡化與多級(jí)企業(yè)解決方案的開發(fā)、部署和管理相關(guān)的復(fù)雜問題的體系結(jié)構(gòu);它提供了一個(gè)企業(yè)級(jí)的計(jì)算模型和運(yùn)行環(huán)境用于開發(fā)和部署多層體系結(jié)構(gòu)的應(yīng)用。通過提供企業(yè)計(jì)算環(huán)境所必需的各種服務(wù),使得部署在J2EE平臺(tái)上的多層應(yīng)用可以實(shí)現(xiàn)高可用性、安全性、可擴(kuò)展性和可靠性。

J2EE的體系結(jié)構(gòu)可以分為4層,如圖1所示。

.客戶端" title="客戶端">客戶端層 這一層直接與用戶交互,J2EE支持多種客戶端,它既可以是通過Internet訪問的Web瀏覽器客戶端,也可以是通過企業(yè)Intranet運(yùn)行的瘦客戶端。

.Web層  這一層是為基于Web的應(yīng)用程序服務(wù)的,J2EE中的JavaServer Page和Java Servlet技術(shù)可以訪問封裝有商務(wù)邏輯的組件,并負(fù)責(zé)響應(yīng)Web客戶端的請求。

.EJB層  EJB(Enterprise Java Bean)封裝了商務(wù)邏輯,完成企業(yè)計(jì)算。EJB1.1規(guī)范中EJB包括兩種:會(huì)話Bean和實(shí)體Bean。會(huì)話Bean代表商業(yè)過程,而實(shí)體Bean代表永久性的商務(wù)數(shù)據(jù)。

.EIS層  EIS(Enterprise Information System)企業(yè)信息系統(tǒng)層包括企業(yè)已有系統(tǒng)(如ERP系統(tǒng))、數(shù)據(jù)庫系統(tǒng)、文件系統(tǒng)等。J2EE提供了多種技術(shù)來訪問這些系統(tǒng),如利用JDBC技術(shù)來訪問數(shù)據(jù)庫。

3、基于J2EE的Web 應(yīng)用
3.1 Web 應(yīng)用實(shí)例簡介

??? 在此舉一個(gè)簡單的Web應(yīng)用實(shí)例,以闡述如何對基于J2EE開發(fā)的Web應(yīng)用進(jìn)行建模。它僅包括一個(gè)顧客登錄用例" title="用例">用例,此用例為:顧客在瀏覽器中輸入用戶名和密碼,點(diǎn)擊“登錄”之后,系統(tǒng)驗(yàn)證顧客,如果驗(yàn)證通過,頁面顯示“歡迎您!”信息,如果失敗,則顯示“登錄失?。 ?。舉此例旨在后續(xù)闡述問題時(shí)做到清晰,故而盡量簡化。
3.2 基于J2EE的Web 應(yīng)用的體系結(jié)構(gòu)
??? 基于J2EE的Web 應(yīng)用大多采用MVC體系結(jié)構(gòu)。MVC模式即模型-視圖-控制器模型。模型指實(shí)現(xiàn)應(yīng)用數(shù)據(jù)和商業(yè)邏輯的對象。視圖負(fù)責(zé)格式化應(yīng)用系統(tǒng)的結(jié)果和動(dòng)態(tài)頁面構(gòu)建??刂破髫?fù)責(zé)接收客戶請求,調(diào)用適當(dāng)?shù)纳虡I(yè)邏輯,并且基于結(jié)果選擇適當(dāng)?shù)囊晥D顯示給用戶。
??? 圖2顯示了一種典型的基于J2EE的Web 應(yīng)用的體系結(jié)構(gòu)。
??? 其工作原理如下:首先,①客戶端瀏覽器向控制器發(fā)出請求事件,控制器(servlet)接收到請求事件之后,②向JavaBean代理發(fā)出處理請求,接著③JavaBean代理調(diào)用EJB進(jìn)行業(yè)務(wù)邏輯處理并④獲得結(jié)果,置入到其屬性中,此時(shí)⑤控制器觸發(fā)響應(yīng),將控制權(quán)傳給相應(yīng)的視圖(JSP),⑥視圖(JSP)從JavaBean代理中讀取屬性值,⑦獲得處理結(jié)果,⑧生成客戶端顯示代碼傳給客戶端瀏覽器。
3.3 基于J2EE的Web 應(yīng)用的建模任務(wù)
??? 由上述體系結(jié)構(gòu)的分析,我們可以得出基于J2EE的Web 應(yīng)用的各組成部分的建模任務(wù)(以圖2所示結(jié)構(gòu)為例):
.業(yè)務(wù)處理部分??此部分負(fù)責(zé)Web 應(yīng)用的數(shù)據(jù)與業(yè)務(wù)邏輯,是Web 應(yīng)用的核心,由EJB來實(shí)現(xiàn),故這部分的建模任務(wù)是分析出Web 應(yīng)用的業(yè)務(wù)邏輯并設(shè)計(jì)出相應(yīng)的EJB以實(shí)現(xiàn)分析出的業(yè)務(wù)邏輯。
.控制器部分??此部分負(fù)責(zé)接收HTTP事件請求,調(diào)度相應(yīng)的JavaBean代理并將控制轉(zhuǎn)移給相應(yīng)的JSP頁面。所以這部分的建模任務(wù)是:設(shè)計(jì)出若干控制器,要求分析出每個(gè)控制器接受哪些HTTP請求,針對每個(gè)HTTP請求需分析出它調(diào)度哪些JavaBean代理和轉(zhuǎn)移至哪些JSP頁面。
.JavaBean代理部分?此部分負(fù)責(zé)調(diào)度EJB,得出JSP頁面所需顯示的數(shù)據(jù),并將這些數(shù)據(jù)賦值給其自身相應(yīng)的屬性。它的建模任務(wù)是根據(jù)JSP頁面所需,設(shè)計(jì)出相應(yīng)的JavaBean代理,每個(gè)JavaBean代理需分析出它組織哪些EJB和怎樣組織這些EJB,還有就是它有哪些屬性以及怎樣獲得屬性值的。
.JSP頁面部分???在Web服務(wù)器上,負(fù)責(zé)從JavaBean代理中取出客戶端所需顯示的屬性值,生成客戶端顯示代碼;在瀏覽器上生成顯示界面,通過顯示界面向控制器發(fā)出HTTP請求事件。因此JSP頁面的建模任務(wù)是設(shè)計(jì)若干JSP頁面,分析出每個(gè)JSP頁面所需獲取的JavaBean代理的屬性,并且分析出JSP頁面生成的客戶端代碼可以觸發(fā)的HTTP請求事件。
4. 基于J2EE的Web 應(yīng)用的建模具體步驟
?? ?基于J2EE的Web 應(yīng)用建模具體步驟如下(在此我們采用RUP建模過程來對前述應(yīng)用實(shí)例進(jìn)行UML建模,假設(shè)以圖2所示體系結(jié)構(gòu)實(shí)現(xiàn)此例):

(1)? 分析用例中所涉及的持久性數(shù)據(jù)與業(yè)務(wù)邏輯,確定用來滿足用例的EJB類。本用例涉及顧客信息,這是持久性數(shù)據(jù),設(shè)計(jì)由CustomerBean實(shí)體EJB來封裝顧客信息。此外本用例還涉及到對顧客信息的驗(yàn)證,這是業(yè)務(wù)邏輯,我們設(shè)計(jì)LoginVerifyBean無狀態(tài)會(huì)話EJB來驗(yàn)證密碼是否正確。

(2)?? 粗略設(shè)計(jì)此用例中所涉及的體系結(jié)構(gòu)中各元素,并將它們放入到順序圖中。我們設(shè)計(jì)客戶端頁面為Login.jsp,服務(wù)器端頁面為LoginResult.jsp,控制器為LoginServlet,JavaBean代理為LoginAgent。將它們與第一步設(shè)計(jì)的EJB一同放入到順序圖的適當(dāng)位置。

(3)?? 分析用例流程,畫出對象之間交互的消息。本用例中,①首先顧客在瀏覽器Login.jsp頁面中填入用戶名和密碼,點(diǎn)擊“登錄”,向控制器LoginServlet發(fā)出登錄事件,②控制器接收到登錄事件后向LoginAgent發(fā)出Login消息,接著③ LoginAgent對LoginverifyBean發(fā)出LoginVerify消息,④ LoginVerifyBean通過UserName獲取到此用戶名的CustomerBean實(shí)體EJB對象,⑤LoginVerifyBean對CustomerBean發(fā)出getPassword消息獲取出密碼,⑥LoginVerifyBean進(jìn)行密碼對比,得出驗(yàn)證結(jié)果返回給LoginAgent,⑦ LoginAgent從后臺(tái)獲得驗(yàn)證結(jié)果后,根據(jù)結(jié)果給LoginResultInf屬性賦值(若驗(yàn)證通過,賦值“歡迎您!”,否則賦值“登錄失??!”),⑧LoginServlet將控制轉(zhuǎn)給LoginResult.jsp頁面,⑨ LoginResult.jsp頁面向LoginAgent發(fā)出getLoginResultInf消息,獲得LoginAgent的LoginResultInf屬性值,之后生成顯示頁面?zhèn)髦量蛻舳?。至此順序圖完成,如圖3。

(4)? 將順序圖中的消息映射為操作,將消息中傳遞的數(shù)據(jù)封裝" title="數(shù)據(jù)封裝">數(shù)據(jù)封裝到適當(dāng)?shù)念愔?,至此類圖可以完成,如圖4。

??? 經(jīng)過以上建模,體系結(jié)構(gòu)中涉及登錄用例的各組成部分都得到足夠詳盡的分析;順序圖清晰地展示出體系結(jié)構(gòu)中各組成部分的相互協(xié)作的流程;建模過程簡潔、清晰、明了;涉及數(shù)據(jù)和業(yè)務(wù)邏輯的類非常容易轉(zhuǎn)化為EJB。建模效果比較理想。

5.基于J2EE的Web 應(yīng)用的建模原則總結(jié)?

??? 根據(jù)上面的建模過程,結(jié)合前人與作者本人的研究,下面列出基于J2EE的Web 應(yīng)用的建模的幾點(diǎn)原則:

(1)? 在體系結(jié)構(gòu)基礎(chǔ)上進(jìn)行建模,將體系結(jié)構(gòu)納入并貫穿到整個(gè)建模過程中。將體系結(jié)構(gòu)貫穿整個(gè)建模過程,從而指導(dǎo)建模者按照體系結(jié)構(gòu)中各部分職能進(jìn)行劃分與設(shè)計(jì)系統(tǒng),由此所建的模型能夠很好實(shí)現(xiàn)體系結(jié)構(gòu),并且各組成部分也能較好地完成前面提出的建模任務(wù)。

(2)? 對于涉及到數(shù)據(jù)與業(yè)務(wù)邏輯的類應(yīng)該根據(jù)EJB的特殊性來進(jìn)行設(shè)計(jì)。由于這些類最終要轉(zhuǎn)化為EJB,所以首先要確定該類將來由哪種EJB來實(shí)現(xiàn),如果該類涉及到持久性數(shù)據(jù)封裝,則應(yīng)該設(shè)計(jì)成實(shí)體EJB類,若涉及到業(yè)務(wù)邏輯則應(yīng)設(shè)計(jì)成會(huì)話EJB類,特別值得注意的是實(shí)體EJB僅僅負(fù)責(zé)對于持久性數(shù)據(jù)的簡單查詢存取操作,所以如果某個(gè)類既涉及到持久性數(shù)據(jù)封裝又包括對這些數(shù)據(jù)的復(fù)雜操作,則該類應(yīng)該拆成實(shí)體EJB類和會(huì)話EJB類。這是和一般面向?qū)ο笤O(shè)計(jì)的不同之處。狀態(tài)會(huì)話EJB也可以封裝業(yè)務(wù)數(shù)據(jù),但這些業(yè)務(wù)數(shù)據(jù)必須是會(huì)話客戶狀態(tài)數(shù)據(jù),而不能是持久性數(shù)據(jù)。無狀態(tài)會(huì)話EJB只能負(fù)責(zé)業(yè)務(wù)邏輯處理,不封裝業(yè)務(wù)數(shù)據(jù)。需要申明的是上述都是針對EJB1.1規(guī)范而言的。

(3)??適當(dāng)設(shè)計(jì)一些會(huì)話Bean,這些會(huì)話Bean代替EJB客戶端執(zhí)行對一些EJB的批量調(diào)用,并將最終結(jié)果返回給EJB客戶端,這樣做的目的是為了減少EJB客戶端與EJB層的數(shù)據(jù)傳輸量,從而改善系統(tǒng)性能。

6.結(jié)? 語?

??? 本文針對基于J2EE的Web 應(yīng)用的特點(diǎn),得出基于J2EE的Web 應(yīng)用的建模任務(wù),接著結(jié)合作者與前人的研究成果,最后總結(jié)出基于J2EE的Web 應(yīng)用的建模原則與方法,經(jīng)上海市十五重大科研基金項(xiàng)目上海市服裝設(shè)計(jì)和加工公共服務(wù)平臺(tái)(2S10716)驗(yàn)證,效果理想,遂撰此文,望能起到拋磚引玉的作用。

參考文獻(xiàn)

[1] Simon Brown,《JSP編程指南》,2002.10,電子工業(yè)" title="電子工業(yè)">電子工業(yè)出版社。?

[2]陳華軍,《J2EE構(gòu)建企業(yè)級(jí)應(yīng)用解決方案》,2002.3,人民郵電出版社。?

[3] Khawar Zaman Ahmed,Cary E.Umrysh等,《用J2EE和UML開發(fā)Java企業(yè)級(jí)應(yīng)用程序》,2002.7,清華大學(xué)出版社。?

[4]Ed Roman,《精通EJB》,2002.1,電子工業(yè)出版社。?

[5] Grady Boock,James Rumbaugh等,《UML用戶指南》,2001.6,機(jī)械工業(yè)出版社。?

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。