劉 明
[摘要]要開發(fā)現(xiàn)實(shí)世界的應(yīng)用程序,特別是大規(guī)模的企業(yè)Web應(yīng)用程序,開發(fā)人員必然會發(fā)現(xiàn)他們必須創(chuàng)建某種框架。J2EE提供針對Web的基本平臺,在經(jīng)典的J2EE四層體系結(jié)構(gòu)的基礎(chǔ)上增加數(shù)據(jù)持久層,提出基于J2EB五層體系結(jié)構(gòu)的web開發(fā)框架;分析基于Struts框架的J2EE架構(gòu)中實(shí)現(xiàn)對象持久性的局限性,從中分離出對象持久層,并將Hibernate這個面向?qū)ο蟮妮p量級對象持久性技術(shù)集成到該架構(gòu)。
[關(guān)鍵詞]struts hibernate web j2EE
中圖分類號:TP3文獻(xiàn)標(biāo)識碼:A文章編號:1571—7597(2009)0210063-01
一、集成Struts框架與Hibernate框架實(shí)現(xiàn)MVC設(shè)計模式
Struts作為基于模型視圖控制器模式的應(yīng)用架構(gòu),具有組件的模塊化、靈活性和重用性的優(yōu)點(diǎn)。但是Struts框架主要是針對表示層設(shè)計的,對于后端的業(yè)務(wù)邏輯層支持不是很強(qiáng),在進(jìn)行項(xiàng)目開發(fā)中存在以下局限:
1.只能橫向分工,按模塊來劃分工作,軟件開發(fā)成本相應(yīng)較高:
2.需要花很多時間在數(shù)據(jù)層的包裝以及不同模塊之間進(jìn)行協(xié)調(diào)和溝通,導(dǎo)致開發(fā)時間的增加:
3.項(xiàng)目移植性相對較差,可能需要為不同數(shù)據(jù)庫編寫不同的SQL語句;
4.項(xiàng)目擴(kuò)展性相對較差,適應(yīng)新的需求或變更時要修改數(shù)據(jù)庫表結(jié)構(gòu)、重新編寫SOL語句、備份數(shù)據(jù)庫等,對人員要求也相應(yīng)較高;
5.由于開發(fā)人員數(shù)據(jù)庫操作水平參差不齊,開發(fā)經(jīng)驗(yàn)也不盡相同,導(dǎo)致系統(tǒng)性能可能會相對較差。
Hibernate是一個開放源代碼的O/R mapping(對象/關(guān)系映射)框架,它對JDBc進(jìn)行了輕量級的對象封裝,以面向?qū)ο髾C(jī)制來處理數(shù)據(jù)庫操作。Hibernate不僅管理Java類到數(shù)據(jù)庫表的映射,還提供數(shù)據(jù)查詢和獲取數(shù)據(jù)的方法,大幅度減少開發(fā)時人工使用SQL和JDBC處理數(shù)據(jù)的時間。因此可以將Struts中的模型層分成兩部分:一部分負(fù)責(zé)業(yè)務(wù)邏輯;另一部分使用Hibernate實(shí)現(xiàn)對象持久性處理。同時分離出具體業(yè)務(wù)邏輯,新建一個業(yè)務(wù)邏輯層,專門負(fù)責(zé)用Hibernate來實(shí)現(xiàn)業(yè)務(wù)邏輯和持久性對象的交互。圖3顯示了集成Struts和Hibernate的MVC模型。Struts和Hibernate框架的整合實(shí)現(xiàn)了控制流、業(yè)務(wù)調(diào)用、表示這三者的分離,使系統(tǒng)在開發(fā)效率、可維護(hù)性、可擴(kuò)展性方面均有良好的改進(jìn)。
二、集成Struts和Hibe rnate實(shí)現(xiàn)J2EE分層架構(gòu)
根據(jù)前面的分析,將Struts與Hibernate框架進(jìn)行集成,構(gòu)成了一個新的Web應(yīng)用的開發(fā)框架,實(shí)現(xiàn)了J2EE應(yīng)用系統(tǒng)的多層架構(gòu)。該框架一方面繼承Struts框架在表示層的優(yōu)點(diǎn),提供完善的標(biāo)記庫,負(fù)責(zé)頁面請求的接收和轉(zhuǎn)發(fā),實(shí)現(xiàn)了表示邏輯和業(yè)務(wù)邏輯的分離;另一方面在數(shù)據(jù)持久層等方面發(fā)揮Hibernate框架的特點(diǎn),由Hibernate框架實(shí)現(xiàn)持久層和事務(wù)的封裝,使業(yè)務(wù)邏輯與數(shù)據(jù)庫訪問分開。這樣有利于開發(fā)人員將注意力集中在業(yè)務(wù)邏輯的實(shí)現(xiàn)上,有利于系統(tǒng)的可維護(hù)性等。
集成Struts和Hibernate實(shí)現(xiàn)J2EE分層架構(gòu)如圖2所示。系統(tǒng)采用的五層結(jié)構(gòu)設(shè)計由客戶層、Web層、業(yè)務(wù)邏輯層、數(shù)據(jù)持久層、數(shù)據(jù)庫層組成??蛻魧舆\(yùn)行在用戶計算機(jī)的Web瀏覽器中;Web層運(yùn)行在Web服務(wù)器中,它使用Struts框架技術(shù)實(shí)現(xiàn),提供了接收/響應(yīng)客戶端請求,控制整個系統(tǒng)工作流程,與業(yè)務(wù)邏輯層交互以及格式化業(yè)務(wù)數(shù)據(jù)并動態(tài)生成Web頁面等功能;業(yè)務(wù)邏輯層負(fù)責(zé)實(shí)現(xiàn)整個系統(tǒng)的核心業(yè)務(wù)邏輯,由JavaBeans或EJB來實(shí)現(xiàn);數(shù)據(jù)持久層使用Hibernate框架技術(shù)實(shí)現(xiàn),完成對象和關(guān)系的映射,負(fù)責(zé)對數(shù)據(jù)庫進(jìn)行操作。
下面根據(jù)圖4對系統(tǒng)的各分層功能進(jìn)行簡單分析:
1.客戶層。它是用戶用瀏覽器看到并直接與系統(tǒng)交互的層,主要是由HTML語言形成的網(wǎng)頁界面。
2.Web層。它從客戶層獲得客戶的輸入,傳遞給業(yè)務(wù)邏輯層的組件,再將從業(yè)務(wù)邏輯層獲得的處理結(jié)果以HTML文件的形式輸出到客戶端,形成網(wǎng)頁界面。Web層由Servlet和JSP程序組成,封裝在Web容器中。業(yè)務(wù)流程控制一般均由控制器Servlet來開發(fā),響應(yīng)用戶的查詢等請求并調(diào)用業(yè)務(wù)邏輯層的JavaBean來實(shí)現(xiàn)復(fù)雜的商務(wù)邏輯。
3.業(yè)務(wù)邏輯層。處理表示邏輯層傳遞過來的用戶響應(yīng),并將結(jié)果返回給客戶層。業(yè)務(wù)邏輯層封裝了系統(tǒng)提供給用戶的接口,是直接處理用戶請求的中心。這一層主要由JavaBean來實(shí)現(xiàn)。JavaBean的主要任務(wù)是處理商務(wù)邏輯,與客戶端交互,返回給它相應(yīng)的操作結(jié)果等。
4.?dāng)?shù)據(jù)持久層。它完成持久對象到關(guān)系數(shù)據(jù)庫的映射,并對持久對象進(jìn)行操作。業(yè)務(wù)邏輯模塊由Hibernate通過O/R映射文件實(shí)現(xiàn)對具體數(shù)據(jù)源的操作(即穿過持久層映射到具體的某個數(shù)據(jù)表),完成對數(shù)據(jù)庫的操作。對于小型的項(xiàng)目來說,這種實(shí)現(xiàn)確實(shí)是很高效且低成本的。
5.?dāng)?shù)據(jù)庫層。對象持久性的具體實(shí)現(xiàn),可以是關(guān)系數(shù)據(jù)庫管理系統(tǒng)、文件存儲和對象數(shù)據(jù)庫存儲管理系統(tǒng)。
三、結(jié)束語
本文在傳統(tǒng)的J2EE框架中引入面向?qū)ο髾C(jī)制的數(shù)據(jù)持久層,使業(yè)務(wù)邏輯處理層有效地分離和隱藏了數(shù)據(jù)讀取和操縱中的所有數(shù)據(jù)訪問代碼細(xì)節(jié),將客戶應(yīng)用程序和底層存儲機(jī)制隔離開,完全抽象出開發(fā)應(yīng)用程序時使用的數(shù)據(jù)物理細(xì)節(jié),構(gòu)建了更為有效的松耦合多層次web開發(fā)模型。
作者簡介:
劉明,女,漢族,遼寧省朝陽市人,大連交通大學(xué)軟件工程在讀碩士,朝陽師范高等??茖W(xué)校數(shù)計系助教,研究方向:javaweb開發(fā)。