齊 峰,趙建軍,孔 兵
(河南大學 計算機與信息工程學院,河南 開封 475001)
隨著社會的進步,計算機語言的快速發(fā)展,計算機技術(shù)給我們的生活帶來了很多便利。Java EE是最優(yōu)秀的企業(yè)級應(yīng)用解決方案,目前已成為電信、金融、電子商務(wù)、保險、證券等各行業(yè)的大型應(yīng)用系統(tǒng)的首選開發(fā)平臺。在Java EE的主流應(yīng)用開發(fā)中,Java Web應(yīng)用開發(fā)技術(shù)是主體,這即歸功于Java 語言與生俱來的的網(wǎng)絡(luò)應(yīng)用開發(fā)優(yōu)勢,也離不開Java開源社區(qū)琳瑯滿目的優(yōu)秀免費資源。本文的醫(yī)療信息管理系統(tǒng)便基于Web 技術(shù)開發(fā),由Struts、spring和hibernate 共同建構(gòu)基于MVC 模式的輕量級J2EE 集成框架,由于具有較高的開發(fā)效率和易配置性,因此在系統(tǒng)開發(fā)中占據(jù)很重要的地位。
MVC 思想將一個應(yīng)用分成三個基本部分:Mode(模型)、View(視圖)和Controller(控制器),這三個部分以最少的耦合協(xié)同工作。這樣的劃分給應(yīng)用程序帶來的好處很多,包括:高可靠性,高重用和適應(yīng)性,較低的生命周期成本,快速的部署,可維護性。而Java EE的JSP Mode2 問世使得MVC模式的應(yīng)用更加廣泛了起來。它用JSP 技術(shù)實現(xiàn)視圖的功能,用Servlet 技術(shù)實現(xiàn)控制器的功能,用JavaBean 技術(shù)實現(xiàn)模型的功能。隨后的開源框架spring 中的MVC 模式也得到了廣泛的應(yīng)用,如圖1所示。
圖1 MVC 請求處理流程
Spring的MVC 框架是圍繞DispatcherServlet 這個核心展開的。核心控制器的作用就是截獲請求,并將其分發(fā)到對應(yīng)的業(yè)務(wù)控制器中,由業(yè)務(wù)控制器調(diào)用業(yè)務(wù)處理的對象處理業(yè)務(wù)邏輯,然后由業(yè)務(wù)處理返回一個模型和視圖對象,核心控制器根據(jù)此對象找到實例顯示出結(jié)果。
1.2.1 Struts
Struts2是從WebWork的基礎(chǔ)上發(fā)展起來的,吸收了Struts1和WebWork的精華,在穩(wěn)定性、性能等方面都有了很好的保證。Struts2 也是面向?qū)ο蟮目蚣?,從而將MVC 模式“分離顯示邏輯和業(yè)務(wù)邏輯”的能力完美發(fā)揮。Struts2 主要由充當中央控制器的核心過濾器StrutsExecuteFilter、充當線程清潔工的StrutsPrepareFilter 過濾器、決定是否需要調(diào)用自定義業(yè)務(wù)控制器Action的Action 控制器等組成。
1.2.2 Spring
Spring 降低企業(yè)開發(fā)應(yīng)用程序的復(fù)雜性,簡化了企業(yè)應(yīng)用的開發(fā)過程,降低了開發(fā)成本,能夠整合各種流行框架。它以IoC(控制反轉(zhuǎn))和AOP(面向切面編程)兩種先進的技術(shù)為基礎(chǔ),完美地簡化了企業(yè)級開發(fā)的復(fù)雜度。Spring 框架主要由7個模塊組成,而且每個模塊都可以單獨使用,也可以和其他模塊組合使用,靈活且方便的部署可以使開發(fā)的程序更加簡潔靈活。
Spring的核心控制器只是負責攔截用戶請求,但無法完成業(yè)務(wù)操作。因此,還需要業(yè)務(wù)控制器的幫助。業(yè)務(wù)控制器是由用戶來定義的,用戶定義的業(yè)務(wù)控制器只要實現(xiàn)org.springframework.mvc.Controller 接口即可。Controller 接口的源代碼如下:
在該接口中定義了一個handleRequest方法來處理用戶的請求,并返回一個ModelAndView 對象。如圖2所示,Spring MVC 通過實現(xiàn)Controller 接口已經(jīng)提供了豐富的控制器功能。越是底端的控制器,功能越強大,以便完成復(fù)雜的業(yè)務(wù)流程。
圖2 Controller 控制器結(jié)構(gòu)圖
1.2.3 Hibernate
ORM(Object Relational Mapping)是對象到關(guān)系的映射,是一種解決實體對象與關(guān)系型數(shù)據(jù)庫相互匹配的技術(shù),其實現(xiàn)思想就是將數(shù)據(jù)庫中的數(shù)據(jù)表映射為對象,對關(guān)系型數(shù)據(jù)以對象的形式進行操作。在實際的開發(fā)中,對象和關(guān)系數(shù)據(jù)是業(yè)務(wù)實體的兩種表現(xiàn)形式,ORM 通過使用描述對象和數(shù)據(jù)庫之間映射的元數(shù)據(jù),將對象自動持久化到關(guān)系數(shù)據(jù)庫中。因此,ORM 在業(yè)務(wù)邏輯層與數(shù)據(jù)庫層之間充當橋梁的作用。
Hibernate是一個成熟的ORM 組件,將ORM的思想進行了完美的體現(xiàn)。Hibernate 主要通過持久化類、Hibernate映射文件及Hibernate 配置文件與數(shù)據(jù)庫進行交互。其中,持久化類是操作對象,用于描述數(shù)據(jù)表的結(jié)構(gòu);映射文件指定持久化類與數(shù)據(jù)表之間的映射關(guān)系;配置文件用于指定Hibernate的屬性信息等。
本開發(fā)主要用于醫(yī)院的信息管理系統(tǒng),幫助護理人員提高工作效率,方便病人信息的管理。在B/S 模式與C/S 模式,即browser/server 與client/server結(jié)構(gòu)中,本系統(tǒng)采用當前比較流行的B/S 模式進行開發(fā)。B/S 體系相比C/S 體系結(jié)構(gòu)具備很多的優(yōu)點,主要是利用了不斷成熟的瀏覽器技術(shù),結(jié)合瀏覽器的多種script 語言,實現(xiàn)了以前用軟件才能實現(xiàn)的功能,并節(jié)約了開發(fā)的成本。在本系統(tǒng)中我們采用了Struts+Spring+Hibernate 三種主流框架相結(jié)合的技術(shù),使整個系統(tǒng)框架結(jié)構(gòu)清晰明了,縮減了開發(fā)周期和工作量,方便了后期的系統(tǒng)維護。數(shù)據(jù)庫則采用已經(jīng)成熟而且精簡的MySQL,完全滿足了病人信息數(shù)據(jù)方面的存儲需求,因而降低了在系統(tǒng)運行時對硬件的要求。系統(tǒng)的功能流程圖如圖3所示。
圖3 醫(yī)療信息系統(tǒng)的功能圖
系統(tǒng)中遵循Java 面向接口對象設(shè)計的原則,從而降低系統(tǒng)的耦合性。由于我們在接口中只定義了方法,但并沒有實現(xiàn)。所以我們就可以按照我們定義的方法去實現(xiàn)接口的實例,如果某個實例不符合我們定義的方法,那么我們可以直接更換實例,而不會影響到我們在上層代碼的設(shè)計,這樣就降低了系統(tǒng)的耦合性,提高了代碼的復(fù)用效率。
我們采用這種在面向接口設(shè)計的好處在于,接口層與層之間的聯(lián)系是向下兼容的,底層對于上層的內(nèi)容一無所知,改變上層的設(shè)計對底層不造成影響,這是一個理想的降低系統(tǒng)耦合性的一個分層式系統(tǒng)結(jié)構(gòu)。因此,本系統(tǒng)基于以上架構(gòu)建立,系統(tǒng)的擴展性和維護性得到了充分的保證。
本系統(tǒng)的控制層是由Struts2 來實現(xiàn)的,我們需要將Struts2的相關(guān)類包放入項目源代碼的lib 文件夾中,同時再對web.xml和action 進行相關(guān)的配置,如下所示:
業(yè)務(wù)層在表示層與持久層之間,在數(shù)據(jù)交換中起到了承上啟下的作用,是系統(tǒng)架構(gòu)中最有核心價值的部分。系統(tǒng)中業(yè)務(wù)層將采用與控制層相同的方式,將實現(xiàn)對象交給Spring框架來托管,并且通過注入持久層對象,實現(xiàn)與數(shù)據(jù)庫間的交互。此系統(tǒng)的持久層對象同樣交給Spring 框架托管。相關(guān)代碼如下例示:
在上述代碼中,通過set和get方法來注入和獲取IUserInfoDAO 接口的實現(xiàn)類,同時配置Spring 中的application-Context.xml 文件。通過property 屬性來完成注入,方便在使用時直接調(diào)用。
從業(yè)務(wù)邏輯層中分離出持久層能夠極大地提高程序的可擴展性及可維護性,降低程序之間的各種業(yè)務(wù)的耦合性,使得程序更加健壯和易于維護。Hibernate 封裝了數(shù)據(jù)庫訪問的細節(jié),并一直維護著實體類與關(guān)系型數(shù)據(jù)庫中數(shù)據(jù)表之間的映射關(guān)系,業(yè)務(wù)處理可以通過Hibernate 提供的API 接口進行數(shù)據(jù)庫操作。接口內(nèi)定義了一些不同功能的數(shù)據(jù)管理方法,而這些方法的具體實現(xiàn)是通過其子包中的實現(xiàn)類來實現(xiàn)的。相關(guān)的配置如下:
本文系統(tǒng)采用基于JavaWeb 技術(shù)和MVC 思想,采用了Struts2+Spring+ Hibernate的SSH 框架來進行該系統(tǒng)的開發(fā)。系統(tǒng)的框架模式為4 層結(jié)構(gòu)模式,分別為表示層、業(yè)務(wù)邏輯層、持久層和數(shù)據(jù)層。這樣的設(shè)計與實現(xiàn)使得該系統(tǒng)具備速度快、通用、方便、靈活等特點,并具有較高的可維護性、可重用性以及可擴展性。在此項目的基礎(chǔ)上進行擴展開發(fā)可提高之后項目的開發(fā)效率,節(jié)約開發(fā)和維護的成本。經(jīng)過實踐證明,取得了良好的效果。
[1]陳丹丹,盧瀚,等.學通Java Web的24 堂課[M].北京:清華大學出版社,2011.
[2]惠燕,潘煜.基于SSH的畢業(yè)設(shè)計管理平臺的研究[J].電子設(shè)計工程,2011(1):23-24.
[3]宋雋婷.基于SSH 框架模式的Web應(yīng)用研究[J].網(wǎng)絡(luò)與通信,2011(6):63-64.
[4]章慧,劉亞軍.基于SSH 框架的高校宿舍管理系統(tǒng)的設(shè)計與實現(xiàn)[J].信息通信,2011(5):183-184.
[5]李剛.輕量級企業(yè)應(yīng)用實戰(zhàn)——Struts2+Spring3+Hibernate 整合開發(fā)[M].北京:電子工業(yè)出版社,2011.
[6]趙濤.基于SSH 架構(gòu)的在線考試系統(tǒng)的研究[J].大眾科技,2011(3):27-28.
[7]計磊,李里,周偉.精通J2EE[M].北京:人民郵電出版社,2006.
[8]張帆,劉崇.Web應(yīng)用架構(gòu)模式的分析及應(yīng)用[J].微型電腦應(yīng)用,2011,27(1):13-15.