袁宏杰 石爽 康彥叢 劉也暢
摘要:Struts 2是一個(gè)用來(lái)快速生成Model 2 應(yīng)用程序的框架,而Model 2 是基于MVC 模式的。用Struts 可簡(jiǎn)化Web 應(yīng)用的開(kāi)發(fā),增加了軟件重用率,解決了信息系統(tǒng)中開(kāi)發(fā)效率、降低成本、可擴(kuò)展性、靈活性等問(wèn)題。
關(guān)鍵詞: Struts2; MVC; Hibernate信息系統(tǒng)
基于Struts框架開(kāi)發(fā)出來(lái)的Web 應(yīng)用,越來(lái)越成熟,系統(tǒng)更靈活,并利用后期維護(hù)和管理。Struts2開(kāi)發(fā)更適合于團(tuán)隊(duì)協(xié)作開(kāi)發(fā),開(kāi)發(fā)成員可以按層開(kāi)發(fā),分工更加合理。
1 實(shí)驗(yàn)室管理信息系統(tǒng)的總體需求
實(shí)驗(yàn)室管理信息系統(tǒng)的總體需求,能夠?qū)崿F(xiàn)排課管理、實(shí)驗(yàn)室日常運(yùn)行管理、實(shí)驗(yàn)室設(shè)備管理、實(shí)驗(yàn)室人員管理、實(shí)驗(yàn)室耗材管理。整體功能結(jié)構(gòu)圖如下:
2 實(shí)驗(yàn)室管理信息系統(tǒng)的技術(shù)架構(gòu)
實(shí)驗(yàn)室管理信息系統(tǒng)系統(tǒng)基于Struts2和Hibernate提供了開(kāi)發(fā)基于 MVC 應(yīng)用模式的開(kāi)源框架進(jìn)行設(shè)計(jì),Struts實(shí)現(xiàn)了 MVC 的各項(xiàng)特性,并將其應(yīng)用于 Web 應(yīng)用開(kāi)發(fā)中。 Struts 提供的組件由 3 個(gè)部分,包括模型層、視圖層和控制器,在模型層與Hibernate框架耦合,實(shí)現(xiàn)對(duì)數(shù)據(jù)的松耦合和持久化訪問(wèn)。實(shí)驗(yàn)室管理信息系統(tǒng)的技術(shù)架構(gòu)如下圖所示
3 實(shí)驗(yàn)室管理信息系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)
數(shù)據(jù)庫(kù)設(shè)計(jì)是指根據(jù)用戶的需求,構(gòu)造最優(yōu)的數(shù)據(jù)庫(kù)模式,最終設(shè)計(jì)出數(shù)據(jù)庫(kù)的結(jié)構(gòu)和建立數(shù)據(jù)庫(kù)及其應(yīng)用系統(tǒng)的過(guò)程。根據(jù)功能模塊的劃分,系統(tǒng)功能設(shè)計(jì)的要求,本系統(tǒng)采用 My SQL 設(shè)計(jì)。
4 實(shí)驗(yàn)室管理信息系統(tǒng)技術(shù)實(shí)現(xiàn)
系統(tǒng)設(shè)計(jì)成四架構(gòu)模式,表示層(Viewer),控制層(Controller), 服 務(wù) 層(DAO) 和 數(shù) 據(jù) 持 久 層(DataPersistence)。下面分別介紹它們的實(shí)現(xiàn)方式。
4.1 表示層技術(shù)實(shí)現(xiàn)
表示層主要采用Ajax(Asynchronous JavascriptAnd XML,異步 JavaScript 和 XML)和標(biāo)簽庫(kù)。首先客戶端初始化請(qǐng)求參數(shù)后轉(zhuǎn)發(fā)給業(yè)務(wù)邏輯層,最后將處理結(jié)果返回至客戶端。系統(tǒng)采用 Struts2 標(biāo)簽庫(kù)(Strutstags)和 ONGL 表達(dá)式來(lái)實(shí)現(xiàn)表示層的開(kāi)發(fā),在 JSP 文件中通過(guò) <%@ taglibprefix=“s” uri=“/Struts=tags”%> 引入標(biāo)簽庫(kù)。
4.2 控制層的實(shí)現(xiàn)
控 制 層 是 Struts2 框 架 的 核 心 組 件, 主 要由 Action 類 文 件 組 成。Struts2 控 制 器 有 兩 部 分,StrutsPrepareAndExecuteFilter 和業(yè)務(wù)控制器 Action。
排課模塊控制類為PaikeAction.java。實(shí)驗(yàn)室管理員點(diǎn)擊JSP視圖頁(yè)面的排課請(qǐng)求后,系統(tǒng)首先通過(guò) Request 對(duì)象到達(dá)系統(tǒng)的業(yè)務(wù)邏輯層,最終轉(zhuǎn)交給在 Struts.xml 文件中配置的paike.Action,一旦返回該Action,則會(huì)在配置文件中查找相應(yīng)的 Result。這些頁(yè)面和ActionMapper 一起通過(guò) Response 對(duì)象返回給排課請(qǐng)求的 URL。本模塊的控制層過(guò)程如下圖:
4.3 業(yè)務(wù)邏輯層的實(shí)現(xiàn)
在業(yè)務(wù)邏輯層,每個(gè)業(yè)務(wù)涉及到的持久層對(duì)象和數(shù)據(jù)訪問(wèn)對(duì)象(DAO)。業(yè)務(wù)邏輯層被設(shè)計(jì)在DAO 層之上,系統(tǒng)中會(huì)存在多個(gè)DAO 類,而業(yè)務(wù)邏輯類只有一個(gè),在本系統(tǒng)被設(shè)計(jì)成了一個(gè)接口,通過(guò)實(shí)現(xiàn)該接口來(lái)用于視圖組件與控制組件之間傳遞數(shù)據(jù)。業(yè)務(wù)邏輯層有兩個(gè)文件,ExamService.java 及其實(shí)現(xiàn)類ExamServiceImpl.java。如圖所示:
4.4 數(shù)據(jù)持久層的實(shí)現(xiàn)
實(shí)驗(yàn)室管理信息系統(tǒng)的DAO層實(shí)現(xiàn)是通過(guò)Hibernate API 來(lái)實(shí)現(xiàn)公共的 DAO 接口 , 首先取得當(dāng)前進(jìn)程的 Session 對(duì)象,利用Session對(duì)象開(kāi)始一個(gè)事務(wù)得到持久化對(duì)象,最后提交事務(wù),關(guān)閉Session。DAO 層調(diào)用 Hibernate提供的各種方法,用于實(shí)現(xiàn)系統(tǒng)業(yè)務(wù)邏輯時(shí),將數(shù)據(jù)(對(duì)象)進(jìn)行持久化操作。
本系統(tǒng)通過(guò)DAO與ORACLE數(shù)據(jù)庫(kù)相連,所有配置及連接參數(shù)保存到hibernate.cfg.xml文件中。
5 系統(tǒng)實(shí)現(xiàn)的關(guān)鍵開(kāi)發(fā)策略
(1)為了提高系統(tǒng)的運(yùn)行效率,減少客戶端與應(yīng)用服務(wù)器的頻繁交互,將一些校驗(yàn)放到了頁(yè)面上進(jìn)行校驗(yàn),校驗(yàn)完成后,如果有錯(cuò)誤立即反饋給用戶,否則再提交服務(wù)器完成后續(xù)流程。
(2)系統(tǒng)采用插件實(shí)現(xiàn)異步提交的數(shù)據(jù),減少了因部分頁(yè)面修改要刷新全部頁(yè)面的操作,減輕了CPU的競(jìng)爭(zhēng)。
(3)改變了一個(gè)HTTP表單、ACTION、ActionForm一一對(duì)應(yīng)的關(guān)系,利用多個(gè)HTTP表單對(duì)應(yīng)一個(gè)ActionForm和Action,將不同的業(yè)務(wù)數(shù)據(jù),調(diào)用同一個(gè)Action的不同方法實(shí)現(xiàn),使程序流程更加清晰簡(jiǎn)練,便于后期維護(hù)管理。
6 結(jié)語(yǔ)
本研究?jī)?nèi)容是一個(gè)基于 MVC 模式的 B/S 架構(gòu)在實(shí)驗(yàn)室管理系統(tǒng)的設(shè)計(jì)方法及具體實(shí)現(xiàn)過(guò)程,該系統(tǒng)采用 Java EE 主流框架 Struts2 與Hibernate 作為技術(shù)路線,同時(shí)采用了開(kāi)源插件,實(shí)現(xiàn)了應(yīng)用數(shù)據(jù)在各層之間的低耦合高內(nèi)聚,提高了系統(tǒng)的可用性和可擴(kuò)展性。
參考文獻(xiàn):
[1]范新?tīng)N.基于 Struts、Hibernate、Spring 架構(gòu)的 Web應(yīng)用開(kāi)發(fā)[M].北京:電子工業(yè)出版社,2014.09.
[2]李剛.輕量級(jí) Java EE 企業(yè)應(yīng)用實(shí)戰(zhàn)[M].北京:電子工業(yè)出版社,2014.10.
[3]梁勝彬,喬保軍,李小麗,王金科,渠慎明,史蕊,王龍葛.Java Web應(yīng)用開(kāi)發(fā)與實(shí)踐[M].北京:清華大學(xué)出版社,2016.09.