《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 其他 > 業(yè)界動(dòng)態(tài) > 基于J2EE的WAF框架在電子商務(wù)系統(tǒng)中的應(yīng)用與擴(kuò)展

基于J2EE的WAF框架在電子商務(wù)系統(tǒng)中的應(yīng)用與擴(kuò)展

2009-01-05
作者:楊文軍,謝飛,王克宏

引言
WAF框架是Web Application Framework的簡(jiǎn)稱,是在Sun Microsystems公司的J2EE藍(lán)皮書(shū)中提出的一個(gè)J2EE應(yīng)用框架。該框架演示了在J2EE的技術(shù)架構(gòu)下如何進(jìn)行MVC的設(shè)計(jì),以及如何充分組合使用J2EE中的各種設(shè)計(jì)模式。同時(shí)在Sun Microsystems公司的網(wǎng)站上還給出了架構(gòu)于WAF框架之上的網(wǎng)上寵物商店的演示例子。在本文筆者將首先介紹WAF框架的主要特點(diǎn)以及J2EE的設(shè)計(jì)模式在該框架內(nèi)的應(yīng)用;然后將結(jié)合具體的電子商務(wù)系統(tǒng)開(kāi)發(fā)的經(jīng)驗(yàn)討論WAF框架的擴(kuò)展。

WAF框架
WAF框架是一個(gè)包括視圖層、控制層和數(shù)據(jù)層的綜合性框架,該框架在Web層和EJ B層使用了較多的設(shè)計(jì)模式來(lái)降低各個(gè)模塊之間的耦合性以及增加系統(tǒng)的擴(kuò)展性。WAF框架的主要特點(diǎn)可以歸納如下:
1.?采用集中控制的方式處理請(qǐng)求
?目前對(duì)于客戶端的請(qǐng)求,可以采用多個(gè)Servlet進(jìn)行分散的請(qǐng)求處理,也可以通過(guò)少數(shù)幾個(gè)Servlet進(jìn)行集中的控制。前一種方式在進(jìn)行一些系統(tǒng)通用的事務(wù)處理(比如登錄驗(yàn)證,權(quán)限認(rèn)證,編碼轉(zhuǎn)換等)時(shí),會(huì)造成代碼的重復(fù),從而增加了調(diào)試和維護(hù)的難度。而在WAF框架中通過(guò)集中的控制方式,可以對(duì)于系統(tǒng)的通用事務(wù)進(jìn)行統(tǒng)一的處理,然后分發(fā)到各個(gè)模塊進(jìn)行特定的處理。
2.?外部配置頁(yè)面流程
?在WAF框架中,請(qǐng)求處理之后的頁(yè)面流程都是通過(guò)外部文件來(lái)設(shè)定的,使開(kāi)發(fā)者可以根據(jù)客戶的不同需要很方便地更改頁(yè)面的流程跳轉(zhuǎn),提高了系統(tǒng)的擴(kuò)展性和維護(hù)性。
3.?統(tǒng)一邏輯調(diào)用接口
?系統(tǒng)的邏輯處理分布在若干個(gè)EJB中,如果Web層直接去調(diào)用每一個(gè)EJB,會(huì)增加Web層和EJB層的耦合度,從而增加系統(tǒng)的維護(hù)的難度。而在WAF框架中,采用統(tǒng)一的邏輯調(diào)用接口,Web層的每一次請(qǐng)求都會(huì)通過(guò)這個(gè)邏輯調(diào)用接口再轉(zhuǎn)到具體的某個(gè)EJB來(lái)處理。
4.?動(dòng)態(tài)合成頁(yè)面
?WAF框架把一個(gè)完整頁(yè)面分為幾個(gè)特定的區(qū)域(banner區(qū)域,left-bar區(qū)域,body區(qū)域,right-bar區(qū)域和footer區(qū)域),每一個(gè)區(qū)域可以任意配置一個(gè)子頁(yè)面,而整個(gè)頁(yè)面就是由這些子頁(yè)面配合構(gòu)成。用戶可以通過(guò)外部配置文件任意配置頁(yè)面,子頁(yè)面也可以得到很大的重用。
?整個(gè)框架的流程如圖【1】所示,WAF框架可以簡(jiǎn)單的劃分為WEB層和EJB層。
?WEB層的作用主要是從數(shù)據(jù)層獲取數(shù)據(jù)(通過(guò)EJB或者JavaBean的方式提供)顯示給用戶,同時(shí)收集用戶的請(qǐng)求信息,包裝成數(shù)據(jù)對(duì)象后傳遞給數(shù)據(jù)層處理。
?在WEB層,該框架使用Servlet2.3給出的過(guò)濾器機(jī)制來(lái)進(jìn)行身份驗(yàn)證和安全控制。通過(guò)外部配置文件來(lái)指定不同角色的用戶能夠?yàn)g覽的頁(yè)面以及能夠提交的請(qǐng)求,這樣系統(tǒng)能夠很方便管理用戶角色以及控制用戶權(quán)限,增加了系統(tǒng)的擴(kuò)展性。
Web層定義了兩個(gè)Servlet,其中的一個(gè)Servlet就是采用集中化的方式處理客戶端的邏輯操作的請(qǐng)求(圖【1】中標(biāo)明的Front Control),而另外一個(gè)Servlet則處理客戶端的頁(yè)面請(qǐng)求(圖【1】中標(biāo)明的Template Servlet)。Front Control根護(hù)客戶端的請(qǐng)求參數(shù)委托一個(gè)HTMLAction子對(duì)象構(gòu)造一個(gè)針對(duì)該請(qǐng)求的數(shù)據(jù)傳輸對(duì)象(Event子類),然后傳遞請(qǐng)求給負(fù)責(zé)邏輯處理的EJB層,EJB層的處理結(jié)果將封裝成EventResponse對(duì)象返回到WEB層, Front Control會(huì)根據(jù)返回的結(jié)果來(lái)決定提供給客戶端的顯示頁(yè)面。從請(qǐng)求的類型到具體的HTMLAction對(duì)象的映射,以及從請(qǐng)求的類型和邏輯處理的返回結(jié)果到顯示頁(yè)面的映射,都是通過(guò)外部配置文件來(lái)指定的。系統(tǒng)能夠把不同的請(qǐng)求映射到同一個(gè)HTMLAction對(duì)象進(jìn)行處理,使HTMLAction對(duì)象得到復(fù)用,同時(shí)系統(tǒng)也可以很方便地為某個(gè)請(qǐng)求改變結(jié)果頁(yè)面,使頁(yè)面流程的控制能夠靈活配置。
EJB層是真正進(jìn)行邏輯處理和數(shù)據(jù)持久化的地方,Pet Store這個(gè)WAF框架的演示例子給出了通過(guò)實(shí)體Bean以及DAO的方式進(jìn)行數(shù)據(jù)存取的方式。如果采用實(shí)體Bean的方式來(lái)獲取大數(shù)據(jù)量的只讀數(shù)據(jù)會(huì)因?yàn)闃?gòu)造過(guò)多的實(shí)體Bean對(duì)象而造成時(shí)間和空間上的浪費(fèi),而采用JDBC API直接從數(shù)據(jù)庫(kù)獲取大量的只讀數(shù)據(jù)能夠加快存取速度,同時(shí)減少內(nèi)存中EJB對(duì)象的數(shù)目。在EJB層,WAF框架使用Session Fa?ade的設(shè)計(jì)模式,使所有Web層的請(qǐng)求都通過(guò)一個(gè)EJB Controller這個(gè)Session Bean來(lái)進(jìn)行分發(fā)處理,這樣使Web層與EJB之間的耦合度達(dá)到最小。

??????????????????????????????????圖【1】 WAF框架流程控制

WAF框架在旅游電子商務(wù)系統(tǒng)中的擴(kuò)展
筆者最近參與了一個(gè)電子商務(wù)系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā),該系統(tǒng)就是基于WAF框架之上開(kāi)發(fā)的。在整個(gè)設(shè)計(jì)過(guò)程中,我們發(fā)現(xiàn)為了迎合具體的電子商務(wù)系統(tǒng)的需求,我們需要對(duì)WAF框架進(jìn)行一些改造和擴(kuò)展,使其能夠更好的滿足這個(gè)電子商務(wù)系統(tǒng)的需求。
該電子商務(wù)系統(tǒng)對(duì)WAF框架的擴(kuò)展主要表現(xiàn)在下面幾個(gè)方面:
登錄驗(yàn)證模塊的擴(kuò)展
在WAF框架中通過(guò)Servlet2.3的新特性Filter機(jī)制來(lái)實(shí)現(xiàn)用戶身份的驗(yàn)證。如圖【2】所示,在SignOnFilter里對(duì)用戶請(qǐng)求進(jìn)行過(guò)濾,該請(qǐng)求可以是一個(gè)頁(yè)面請(qǐng)求也可以是一個(gè)邏輯操作的請(qǐng)求。如果是登錄請(qǐng)求,則系統(tǒng)轉(zhuǎn)到登錄處理流程;而對(duì)于其他的請(qǐng)求,如果用戶已經(jīng)登錄,則直接轉(zhuǎn)到下一個(gè)Filter進(jìn)行過(guò)濾,而如果用戶未登錄,則比較外部登錄驗(yàn)證配置文件,驗(yàn)證用戶請(qǐng)求是否屬于受保護(hù)的請(qǐng)求(即只有已登錄的用戶發(fā)送該請(qǐng)求才能被系統(tǒng)處理),未通過(guò)驗(yàn)證系統(tǒng)將跳轉(zhuǎn)到登錄頁(yè)面提示用戶登錄。
WAF框架中,只要是登錄的用戶就可以通過(guò)請(qǐng)求驗(yàn)證,而實(shí)際的電子商務(wù)系統(tǒng)都往往說(shuō),當(dāng)用戶登錄后還需要驗(yàn)證用戶是否有權(quán)限提交該請(qǐng)求(如圖【3】所示)。而外部配置文件也需要根據(jù)不同的角色分別列出該角色能夠提交的請(qǐng)求列表。

圖【2】WAF框架的驗(yàn)證模塊流程圖

圖【3】實(shí)際應(yīng)用系統(tǒng)的驗(yàn)證模塊流程圖

控制流程的擴(kuò)展
在WAF框架中,用途提交的頁(yè)面請(qǐng)求(URI后綴為“.screen”)將被提交到Template Sevlet來(lái)進(jìn)行處理,而如果用戶提交的是操作請(qǐng)求(URI后綴為“.do”),那么該請(qǐng)求將通過(guò)前臺(tái)控制器在HTMLAction子對(duì)象里包裝成Event子對(duì)象,然后再把Event子對(duì)象提交到EJB層進(jìn)行處理。這個(gè)處理過(guò)程有很大的一部分時(shí)間是用在來(lái)回的通訊上。而在實(shí)際系統(tǒng)中,并非所有的操作請(qǐng)求都需要通過(guò)EJB層進(jìn)行處理,對(duì)于一些簡(jiǎn)單的請(qǐng)求在HTMLAction子對(duì)象里就可以完成。所以我們?cè)趯?shí)際系統(tǒng)中對(duì)WAF框架進(jìn)行了改造,對(duì)于能夠在HTMLAction子對(duì)象中進(jìn)行處理的操作請(qǐng)求,則該子對(duì)象返回空的Event對(duì)象;而在前臺(tái)控制器增加對(duì)返回的Event對(duì)象的判斷,只有Event對(duì)象不為空才轉(zhuǎn)到EJB層進(jìn)行處理,否則直接跳轉(zhuǎn)到下一個(gè)頁(yè)面。
通過(guò)改變請(qǐng)求的處理流程,我們可以減輕EJB層邏輯處理的壓力,同時(shí)降低了請(qǐng)求響應(yīng)的時(shí)間,使WAF框架的效率得到提高。

頁(yè)面流程模塊的擴(kuò)展
在實(shí)際系統(tǒng)中,我們希望成功處理一個(gè)用戶的操作請(qǐng)求后,首先顯示一個(gè)操作成功的提示頁(yè)面,然后從這個(gè)提示頁(yè)面自動(dòng)轉(zhuǎn)到一個(gè)指定的頁(yè)面。我們希望這個(gè)提示頁(yè)面能夠得到復(fù)用,任何一個(gè)操作請(qǐng)求得到成功處理都能夠使用該提示頁(yè)面。而在WAF框架中,一個(gè)操作請(qǐng)求成功完成后就直接轉(zhuǎn)到指定的頁(yè)面,這個(gè)是通過(guò)外部配置文件mapping.xml來(lái)完成的?,F(xiàn)在我們?cè)谶@個(gè)外部配置文件中增加一個(gè)可選的中間過(guò)渡頁(yè)面的設(shè)定,如果用戶設(shè)定了這個(gè)中間過(guò)渡的頁(yè)面,那么擴(kuò)展WAF框架的系統(tǒng)能夠把指定的后一個(gè)頁(yè)面作為參數(shù)傳給中間過(guò)渡頁(yè)面,這樣在這個(gè)過(guò)渡頁(yè)面利用腳本語(yǔ)言經(jīng)過(guò)一段間隔后就能夠自動(dòng)轉(zhuǎn)到下一個(gè)指定的頁(yè)面里。下面是mapping.xml的一個(gè)片斷,粗體是增加的一個(gè)過(guò)渡頁(yè)面的設(shè)定
?????? ?com.xxx.j2ee.xxx.controller.web.actions.CancelOfferHTMLAction


總結(jié)與展望
?WAF框架是一個(gè)覆蓋WEB層和EJB層的綜合性的框架,提供了很好的擴(kuò)展性,因此能夠滿足對(duì)擴(kuò)展性要求較高的商業(yè)系統(tǒng)的應(yīng)用。隨著J2EE1.4規(guī)范的推出,相信WAF框架也將把更先進(jìn)的思想和設(shè)計(jì)理念融入其中,使其不僅是學(xué)習(xí)J2EE的很好的例子,同時(shí)在商業(yè)上得到更好的應(yīng)用。

參考文獻(xiàn):
1.?http://java.sun.com/blueprints/code/jps131/docs/index.html
2.?Inderjeet Singh, Beth Stearns, Mark Johnson, and the Enterprise Team?“Designing Enterprise Applications with the J2EETM Platform, Second Edition”
3.?Java? 2 Platform Enterprise Edition Specification, v1.3

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