摘要:Struts與Hibernate 是兩個(gè)軟件設(shè)計(jì)的框架,利用它們進(jìn)行軟件的開發(fā),可以大大提高軟件開發(fā)的效率。該文在深入地分析了這兩種框架的基礎(chǔ)上,把它們引入到網(wǎng)絡(luò)購物系統(tǒng)的實(shí)際開發(fā)當(dāng)中。并以部分模塊為例詳細(xì)介紹這兩種框架相結(jié)合在web開發(fā)中的應(yīng)用。
關(guān)鍵詞:Struts; Hibernate;網(wǎng)絡(luò)購物系統(tǒng)
中圖分類號(hào):TP393文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2010)01-98-03
Design and Realization of the System of Shopping at Network Based on Struts AND Hibernate Framework
CUI Yue-hai
(College of Computer Science and Technology, Wuhan University of Technology Wuhan, Wuhan 430063, China)
Abstract: Struts and hibernate are two frameworks of software design. Drawing on them to design software, it can provide efficiency of software design very well. On analysis in depth the two frameworks in this text, we introduce them to the practical development of the system of shopping at network. Besides, we introduce in detail the application of the integration of the two frameworks in Web development in the example of one model in the system.
Key words: Struts; Hibernate; system of shopping at network
作為軟件開發(fā)框架的Struts和Hibernate,可以看作是一種半成品的軟件,利用現(xiàn)成的框架進(jìn)行軟件開發(fā)可以起到事半功倍的作用[1]。因此把他們引用到實(shí)際的Web開發(fā)中,將使得軟件開發(fā)變得更加高效,開發(fā)出的軟件具有低耦合,高內(nèi)聚的特性。本文就是將Struts和Hibernate相結(jié)合,利用Struts框架可以很好的完成視圖部分和控制器部分分離的特性,Hibernate 框架可以很好的完成模型部分的數(shù)據(jù)持久化的特性, 以Struts框架為總體設(shè)計(jì)架構(gòu),以Hibernate作為處理數(shù)據(jù)持久化的工具,二者有機(jī)結(jié)合,共同來開發(fā)網(wǎng)絡(luò)購物系統(tǒng)。
1 Struts框架及其工作原理
Struts是一個(gè)基于Java EE平臺(tái)、實(shí)現(xiàn)MVC設(shè)計(jì)模式的Web應(yīng)用開發(fā)框架,它提供了多種組件分別來實(shí)現(xiàn)MVC中的視圖、模型和控制器的功能[2]。其體系結(jié)構(gòu)如圖1所示。
它主要由3個(gè)部分組成:View(視圖部分)Controller (控制器部分),Model(模型部分)。
1)View(視圖部分)
視圖部分實(shí)際上就是一組JSP頁面。這些JSP頁面由Html文本或者是Struts的自定義標(biāo)記庫來顯示完成。Html文本只能靜態(tài)地顯示JSP頁面,而由自定義標(biāo)記庫組成的頁面卻能和Model部分進(jìn)行交互。
2)Controller控制器部分
Struts中的Controller 控制器部分是由ActionServlet和Action來實(shí)現(xiàn)的。ActionServlet實(shí)例的作用是接收客戶端瀏覽器的請(qǐng)求,然后選擇執(zhí)行相應(yīng)的業(yè)務(wù)邏輯,再把相應(yīng)結(jié)果送回到客戶端。Action對(duì)象是開發(fā)者定義的類的實(shí)例,在繼承該類的過程中,開發(fā)者可以加入具體業(yè)務(wù)邏輯或調(diào)用業(yè)務(wù)邏輯模塊。Action對(duì)象在進(jìn)行了業(yè)務(wù)邏輯的處理以后會(huì)將應(yīng)用程序流程轉(zhuǎn)到合適的View組件,最終將響應(yīng)回送到瀏覽器客戶端。
3)Model模型部分
模型的構(gòu)成分為兩個(gè)部分:系統(tǒng)的內(nèi)部狀態(tài)和改變系統(tǒng)狀態(tài)的動(dòng)作。Struts中的Model部分一般由Java Bean或EJB(即企業(yè)級(jí)Java Bean)組成。Struts的工作原理時(shí)序圖如圖2所示。
Struts 的工作流程如下:
1)ActionServlet接收客戶端Http請(qǐng)求,使用ActionForm Bean自動(dòng)接收請(qǐng)求表單信息,然后將請(qǐng)求分發(fā)給相應(yīng)的Action對(duì)象。
2) Action對(duì)象調(diào)用Execute()方法處理請(qǐng)求,期間能夠使用先前的ActionForm Bean實(shí)現(xiàn)業(yè)務(wù)邏輯,然后回送ActionForward 對(duì)象給ActionServlet。
3) 根據(jù)ActionForward對(duì)象封裝的信息,ActionServlet將Http請(qǐng)求再次轉(zhuǎn)發(fā)給其它頁面,最終發(fā)送響應(yīng)回客戶端。
2 Hibernate框架及其工作原理
Hibernate 是一個(gè)面向Java開發(fā)環(huán)境的對(duì)象/關(guān)系數(shù)據(jù)映射框架。它對(duì)JDBC進(jìn)行了輕量級(jí)的對(duì)象封裝,使得Java程序員可以使用對(duì)象編程思維來操縱數(shù)據(jù)庫[3]。 Hibernate的工作原理示意圖如圖3所示。
Hibernate在Java程序與數(shù)據(jù)庫之間進(jìn)行轉(zhuǎn)換,Java程序設(shè)計(jì)人員只要事先定義好對(duì)象與數(shù)據(jù)庫表格之間的對(duì)應(yīng)(具體體現(xiàn)在model.hbm.xml中屬性名與數(shù)據(jù)庫中字段名對(duì)應(yīng)上)此后Java程序設(shè)計(jì)人員就可以使用熟悉的面向?qū)ο蟪绦蛟O(shè)計(jì)方法編寫程序,而不再需要進(jìn)行特定的與SQL之間的轉(zhuǎn)換,所有SQL的轉(zhuǎn)換交由Hibernate 進(jìn)行處理,即Hibernate 中提供了數(shù)據(jù)查詢和獲取數(shù)據(jù)的方法,從而大幅度減少了開發(fā)時(shí)人工使用SQL和JDBC處理數(shù)據(jù)的時(shí)間。
3 應(yīng)用實(shí)例
3.1 系統(tǒng)簡(jiǎn)介
網(wǎng)絡(luò)購物系統(tǒng)主要包括用戶注冊(cè)登陸管理,產(chǎn)品檢索查詢,購物管理,后臺(tái)信息管理,后臺(tái)訂單管理,后臺(tái)用戶信息管理等6個(gè)管理模塊。其中用戶注冊(cè)登陸管理模塊包括用戶在線注冊(cè);用戶登錄管理;用戶資料修改;向會(huì)員提供在線服務(wù)等功能。產(chǎn)品檢索模塊,包括商品信息的按廠家分類檢索;產(chǎn)品信息的關(guān)鍵字檢索;熱銷商品的排行榜顯示等功能。購物管理模塊提供以下功能:客戶可以隨時(shí)查看當(dāng)前購物車中的訂購情況,并可以隨時(shí)對(duì)其進(jìn)行修改;客戶可在線填寫訂單,自由選擇預(yù)定產(chǎn)品,并管理預(yù)定;注冊(cè)的客戶在通過會(huì)員驗(yàn)證后可以查詢以往詳細(xì)的訂單內(nèi)容;后臺(tái)產(chǎn)品信息管理模塊提供產(chǎn)品分類管理,產(chǎn)品資料管理等功能。后臺(tái)訂單管理模塊提供最新訂單信息管理,查看客戶訂單;訂單處理,對(duì)客戶所下訂單進(jìn)行有效處理;訂單跟蹤與分配,管理員對(duì)客戶所下訂單進(jìn)行分配至業(yè)務(wù)員。后臺(tái)用戶信息管理模塊用于實(shí)現(xiàn)對(duì)網(wǎng)站后臺(tái)維護(hù)管理用戶的增加,刪除及修改。
本系統(tǒng)采用Struts框架實(shí)現(xiàn)MVC架構(gòu)模式,并采用Hibernate實(shí)現(xiàn)持久化層,從而形成一個(gè)多層次的體系結(jié)構(gòu),如圖4所示,圖中的箭頭表示調(diào)用關(guān)系[4]。系統(tǒng)體系結(jié)構(gòu)如圖4所示。
視圖層:負(fù)責(zé)與用戶交互,包括JSP、HTML頁面,ActionForm。
控制層:進(jìn)行業(yè)務(wù)調(diào)度,負(fù)責(zé)視圖層和模型層的交互。由Struts Action類實(shí)現(xiàn)。
業(yè)務(wù)邏輯層:包含具體的業(yè)務(wù)邏輯,使用JavaBean實(shí)現(xiàn)。
持久層:使用開源持久層軟件包Hibernate,提供O/R關(guān)系映射和數(shù)據(jù)庫訪問的支持。
數(shù)據(jù)庫:使用 MySQL數(shù)據(jù)庫管理系統(tǒng)。
3.2 模塊示例
本節(jié)以用戶登錄模塊為例,重點(diǎn)闡述Struts和Hibernate 如何相結(jié)合在系統(tǒng)中實(shí)現(xiàn)系統(tǒng)的功能,其它模塊實(shí)現(xiàn)方式與此相似。
在本模塊中,視圖組件包括:
1)left.jsp:該頁面提供系統(tǒng)用戶的登錄注冊(cè)功能,本節(jié)以登錄為主,進(jìn)行簡(jiǎn)單的介紹。
2)LoginForm(DynaValidatorForm):用于處理left.jsp頁面中用戶表單登錄時(shí)提交的數(shù)據(jù)。
控制器組件包括:
Login Action:接收從LoginForm傳來的數(shù)據(jù)。調(diào)用DbOperate.java( 模型組件)中的方法,驗(yàn)證用戶信息成功后,轉(zhuǎn)向toSuccess.否則,轉(zhuǎn)向toWrong.
模型組件: Dboperate調(diào)用持久化類member進(jìn)行與數(shù)據(jù)庫方面的操作。
持久化類:member對(duì)應(yīng)數(shù)據(jù)庫中的表member。
映射文件:model.hbm.xml。
配置文件:
1)Struts-config.xml
該文件是整個(gè)Struts架構(gòu)的核心,在Struts架構(gòu)中,開發(fā)者通過它來組裝各個(gè)組件,建立應(yīng)用程序的總體脈絡(luò)。可以說該文件的作用相當(dāng)于一個(gè)大型項(xiàng)目開發(fā)運(yùn)行過程中的控制調(diào)配中心。其部分源碼如下所示:
//①定義FormBean
type=\"org.apache.struts.validator.DynaValidatorForm\"> //②聲明全局轉(zhuǎn)發(fā) //③定義ActionBean 2)Hibernate.cfg.xml 在該文件中主要是進(jìn)行SessionFactory配置(可以理解成建立與數(shù)據(jù)庫之間連接的配置),在Hibernate中,既可以使用XML文件,也可以使用屬性文件來進(jìn)行配置,這里介紹使用XML文件配置方式,這也是Hibernate 所建議的配置方式,對(duì)應(yīng)的文件名是“Hibernate.cfg.xml”,該文件核心程序代碼及相關(guān)解釋如下: …… 屬性定義部分(從 connection.driver_class:定義MySQL的JDBC數(shù)據(jù)庫驅(qū)動(dòng)程序; connection.url:數(shù)據(jù)庫連接地址,包括數(shù)據(jù)庫名稱; connection.username:數(shù)據(jù)庫連接用戶名; connection.password:數(shù)據(jù)庫連接密碼; connection.pool_size:數(shù)據(jù)庫連接池的個(gè)數(shù); show_sql:用于配置是否在控制臺(tái)顯示SQL語句,方便程序調(diào)試[5]; dialect:定義MySQL為Hibernate 數(shù)據(jù)庫操作語法的方言。 映射文件定義部分(從開始)設(shè)置持久化類和數(shù)據(jù)表的映射文件。 4 結(jié)束語 本文將作為軟件開發(fā)架構(gòu)的兩種架構(gòu):Struts和Hibernate相結(jié)合運(yùn)用到網(wǎng)絡(luò)購物系統(tǒng)中,實(shí)現(xiàn)了此系統(tǒng)。通過實(shí)際應(yīng)用闡明了Struts和Hibernate相結(jié)合進(jìn)行web設(shè)計(jì)。實(shí)踐表明,基于這兩種框架設(shè)計(jì)的Web程序具有很好的可維護(hù)性和可擴(kuò)展性。 參考文獻(xiàn): [1] 歐陽宏基,弋改珍,戈萌.基于框架技術(shù)的生產(chǎn)統(tǒng)計(jì)管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].微計(jì)算機(jī)應(yīng)用,2009,30(9):75-80. [2] 劉志強(qiáng),潘郁.基于MVC模式的Struts框架研究[J].微處理機(jī),2008(4):68-70. [3] 高昂.基于Hibernate與Struts框架的數(shù)據(jù)持久化應(yīng)用研究[J].計(jì)算機(jī)應(yīng)用,2005,25(12),2817. [4] 王莉,郝克剛,葛瑋.基于Struts和hibernate的缺陷管理及度量系統(tǒng)[J].計(jì)算機(jī)應(yīng)用與軟件,2009,26(2):122-124. [5] 夏赟,李志蜀.基于Hibernate框架的數(shù)據(jù)持久化層的研究及應(yīng)用[J].計(jì)算機(jī)應(yīng)用,2008,28(9):2446-2447.