[摘要]本文提出了基于輕量級(jí)Web 框架——Struts + Spring + Hibernate的系統(tǒng)結(jié)構(gòu), 介紹了Struts 的MVC結(jié)構(gòu)、Spring 的基本組成和結(jié)構(gòu)以及Hibernate的基本對(duì)象,并將三種框架技術(shù)整合起來應(yīng)用到系統(tǒng)中, 給出一個(gè)具體的實(shí)例配置,前端采用Struts 的MVC框架,中間層采用Spring,后臺(tái)采用Hibernate,提高了項(xiàng)目代碼的可重用性和開發(fā)效率。
[關(guān)鍵詞]MVC STRUTS SPRING HIBERNATE J2EE
面對(duì)日益復(fù)雜的軟件規(guī)模,人們深刻地認(rèn)識(shí)到,選擇良好的開發(fā)框架對(duì)保證系統(tǒng)的成功至關(guān)重要。成熟的框架會(huì)減少重復(fù)開發(fā)工作量、縮短開發(fā)時(shí)間、降低開發(fā)成本, 增強(qiáng)程序的維護(hù)型和可擴(kuò)展性。J2EE多層分布式應(yīng)用體系結(jié)構(gòu)的出現(xiàn)促進(jìn)了軟件業(yè)的巨大改變,但J2EE龐大的體系顯得有些臃腫,因此J2EE輕量級(jí)架構(gòu)——Struts +Spring+Hibernate目前已經(jīng)成為開發(fā)Web應(yīng)用的主流。
一、開源框架Struts 、Spring 、Hibernate
1.Web 框架Struts。Struts 框架是由Apache 軟件組織提供的一項(xiàng)開源項(xiàng)目,一個(gè)基于模型(Model)——視圖(View)——控制器(Controller)(MVC)模式的應(yīng)用架構(gòu)的開源框架??蚣芊譃槿糠? 模型、視窗和控制器。
模型:從概念上模型分為兩類:系統(tǒng)的內(nèi)部狀態(tài)和改變系統(tǒng)狀態(tài)的動(dòng)作。模型是所有的商業(yè)邏輯代碼片段所在。一個(gè)模型能為多個(gè)視圖提供數(shù)據(jù),因此提高了應(yīng)用的可重用性。
視窗:與控制器Servlet配合工作的一整套JSP定制標(biāo)簽庫構(gòu)成,利用它可以快速建立應(yīng)用系統(tǒng)的界面。
控制器: 控制器可以理解為模型與視圖間溝通的橋梁,它可以分派用戶的請(qǐng)求并選擇適當(dāng)?shù)囊晥D用于顯示。其本質(zhì)上是一個(gè)Servlet,將客戶端請(qǐng)求轉(zhuǎn)發(fā)到相應(yīng)的Action類。
MVC模式的使用,減弱了業(yè)務(wù)邏輯接口和數(shù)據(jù)接口之間的耦合,使視圖層更富于變化。
2.Spring框架。Spring是一個(gè)開源項(xiàng)目,為簡(jiǎn)化企業(yè)級(jí)系統(tǒng)開發(fā)而誕生的輕量級(jí)解決方案,可建立“快裝式企業(yè)應(yīng)用”。在此基礎(chǔ)上,還提供了包括聲明式事務(wù)處理,RMI或Web Services遠(yuǎn)程訪問業(yè)務(wù)邏輯,以及可以多種方法進(jìn)行的持久化數(shù)據(jù)庫的解決方案。
Spring可以看作是一個(gè)標(biāo)準(zhǔn)開發(fā)組件,根據(jù)自己的需要,只取用它的部分組件使用而無須涉及其他。Spring的框架基礎(chǔ)是JavaBean屬性的Inversion of Control 容器。
3.Hibernate框架。Hibernate是一個(gè)免費(fèi)的開源Java包,一個(gè)面向Java 環(huán)境的對(duì)象或關(guān)系數(shù)據(jù)庫映射工具。它使得與關(guān)系數(shù)據(jù)庫打交道變得十分輕松,就像您的數(shù)據(jù)庫中包含每天使用的普通Java對(duì)象一樣,更不必考慮如何把它們從神秘的數(shù)據(jù)庫表中取出或放回。
工作方式:它不會(huì)強(qiáng)迫您修改對(duì)象的行為方式,也不需要實(shí)現(xiàn)任何不可思議的接口以便能夠持續(xù)存在。惟一需要做的就是創(chuàng)建一份XML“映射文檔”,告訴Hibernate您希望能夠保存在數(shù)據(jù)庫中的類,以及它們?nèi)绾侮P(guān)聯(lián)到該數(shù)據(jù)庫中的表和列,然后就可以要求它以對(duì)象的形式獲取數(shù)據(jù),或者把對(duì)象保存為數(shù)據(jù)。
二、基于SSH的J2EE架構(gòu)的應(yīng)用
開發(fā)實(shí)踐中可將這三種框架整合起來應(yīng)用到我們的Web項(xiàng)目中不同層,制作一個(gè)員工信息管理系統(tǒng)。
1.以管理信息系統(tǒng)中用戶日志管理的登錄為例, 簡(jiǎn)單介紹如何在配置文件中將Struts、Spring 和Hibernate 三者有機(jī)地結(jié)合起來。
Spring 整合Struts的配置的web.xml,在WEB服務(wù)器起動(dòng)后加載所有的配置,其配置如下所示:
在Struts 的配置文件中有相應(yīng)的代碼:
type=”com.examsystem.examdb.web.LoginAndLogoutAction”>
以上兩段代碼完成用戶登錄動(dòng)作, 下面由相應(yīng)的action 來處理具體的業(yè)務(wù)邏輯, 如從數(shù)據(jù)庫中提取數(shù)據(jù)來驗(yàn)證用戶的合法性等。對(duì)數(shù)據(jù)庫的操作由Hibernate 來完成,Spring 配置文件中有如下語句:
相應(yīng)的Employee.hbm.xml 文件內(nèi)容如下:
2.架構(gòu)的結(jié)構(gòu)流程(如圖所示)
圖構(gòu)架的結(jié)構(gòu)
WEB服務(wù)器啟動(dòng)后,將加載WEB應(yīng)用,并把STRUTS和SPRING同時(shí)也加載到SERVLET容器中,當(dāng)有一客戶請(qǐng)求到達(dá)服務(wù)器時(shí),ACTION SERVLET將查找ACTION匹配請(qǐng)求的ACTION,然后委托到指定的ACTION。在該ACTION中,調(diào)用Business service方法來處理相應(yīng)的業(yè)務(wù)邏輯。這一過程中,Hibernate處在DAO層,用于處理所有與數(shù)據(jù)庫的操作。這里也體現(xiàn)了三層架構(gòu):第一層,表現(xiàn)層(STRUTS),它有一個(gè)總的控制器ActionServlet,從客戶端傳來的動(dòng)作都會(huì)由這個(gè)控制來處理,或者轉(zhuǎn)發(fā)到真正的ACTION那里來處理,當(dāng)這個(gè)請(qǐng)求處理完之后,再返回到ActionServlet,找到要呈現(xiàn)給客戶端的頁面;第二層,業(yè)務(wù)邏輯層,處理相關(guān)的商業(yè)邏輯,并且使他們的處理都處在同一個(gè)事務(wù)中,這樣當(dāng)有某一個(gè)操作出現(xiàn)錯(cuò)誤時(shí),保證數(shù)據(jù)庫能恢復(fù)到最初狀態(tài),從而保證數(shù)據(jù)的完整性;第三層,持久層(Hibernate 和 DB數(shù)據(jù)庫),Hibernate把最原始的JDBC封裝了起來,Hibernate的好處在于我們不用直接寫SQL語句,可用對(duì)象或HSQL來取得所需數(shù)據(jù)。
三、結(jié)束語
Struts+Spring+Hibernate 是目前國內(nèi)外眾多知名軟件企業(yè)最主流的應(yīng)用技術(shù), 也是J2EE 未來發(fā)展的趨勢(shì), 在項(xiàng)目開發(fā)實(shí)踐中應(yīng)用該構(gòu)架,降低了程序的復(fù)雜度, 易于調(diào)試, 減輕了程序員的負(fù)擔(dān), 具有很強(qiáng)的擴(kuò)展性,該結(jié)合框架一定具有美好的前景。
參考文獻(xiàn):
[1]Hibernate 官方網(wǎng)站:http://www.hibernate.org.
[2]Struts 官方網(wǎng)站:http://Jakarta.apache.org/struts/index.html
[3]Spring 網(wǎng)站:http://www.springframework.org/
[4]黃煙波張紅宇:基于Struts和Hibernate的J2EE構(gòu)架 計(jì)算機(jī)時(shí)代.2004年第10期
[5]胡曉丹魏長(zhǎng)軍:基于Struts + Spring + Hibernate 架構(gòu)的能源管理系統(tǒng)的研究.計(jì)算機(jī)與現(xiàn)代化.2006年第12期
注:本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文。