李 睿
(湖南省農(nóng)業(yè)科學(xué)院科技情報(bào)研究所,湖南 長沙 410125)
從廣義角度來說,基于Web的信息管理系統(tǒng)并不少見。但傳統(tǒng)的B/S架構(gòu)下的信息管理系統(tǒng),多采用動態(tài)服務(wù)器頁面(ASP)、超級文本預(yù)處理語言(PHP)技術(shù),在執(zhí)行效率、跨平臺性能、成本控制等方面不盡人意,而基于Java Web的開發(fā)技術(shù)較好地解決了上述問題[1]。目前基于Java Web的信息系統(tǒng)并不多見,采用Java Web開發(fā)的期刊信息管理系統(tǒng)更是寥寥無幾。為此,對B/S架構(gòu)下基于Java Web的開發(fā)技術(shù)進(jìn)行了討論,以供開發(fā)者參考。
所謂動態(tài)頁面文件指的是,當(dāng)客戶請求頁面時(shí),Web服務(wù)器動態(tài)生成文檔返回給瀏覽器,以響應(yīng)客戶的請求。隨著線下業(yè)務(wù)向網(wǎng)上的發(fā)展,Web應(yīng)用越來越復(fù)雜,由此產(chǎn)生了各種服務(wù)器端頁面編寫技術(shù),JSP便是其中一種。所謂JSP是Java Server Page的縮寫,JSP在HTML頁面文件中嵌入Java腳本,從而實(shí)現(xiàn)動態(tài)網(wǎng)頁功能。其中,HTML標(biāo)簽負(fù)責(zé)頁面的布局和顯示外觀,Java代碼負(fù)責(zé)提取動態(tài)數(shù)據(jù),實(shí)現(xiàn)業(yè)務(wù)邏輯[2]。JSP代碼被編譯成Servlet并在Java虛擬機(jī)上執(zhí)行,而這種編譯操作僅在對JSP頁面的第一次請求時(shí)發(fā)生。因此,普遍認(rèn)為,相對于其他的動態(tài)頁面技術(shù)如ASP、PHP等,JSP的執(zhí)行效率較高。JSP頁面響應(yīng)過程見圖1。
XML是Extensible Markup Language的縮寫,即擴(kuò)展標(biāo)記語言。由于其嚴(yán)格書寫規(guī)范和標(biāo)記可以擴(kuò)展,因而容易解析,加之其獨(dú)立于平臺,因此在Web應(yīng)用中它是數(shù)據(jù)交互的載體。各框架以XML文件作為配置文件,在加載時(shí)根據(jù)定制,完成諸如攔截器的設(shè)置、事務(wù)的設(shè)置、數(shù)據(jù)源的配置等工作[3-4]。因此在信息管理系統(tǒng)開發(fā)中,相對于代碼的編寫,XML配置文件的書寫顯得更為重要。
圖1 JSP/Servlet基本頁面響應(yīng)過程
在一些簡單應(yīng)用中,通過JSP中的JAVA腳本即可直接訪問數(shù)據(jù),實(shí)現(xiàn)業(yè)務(wù)邏輯,然而在大型應(yīng)用中,HTML標(biāo)簽與JAVA腳本的混合使用,必將導(dǎo)致表現(xiàn)層與業(yè)務(wù)邏輯層代碼的混雜,可讀性降低、開發(fā)維護(hù)難度增加。WEB框架如同代碼的組織者,它實(shí)現(xiàn)了MVC模型,分離了表現(xiàn)層與業(yè)務(wù)層,從而使得代碼的結(jié)構(gòu)清晰,層次明確。STRUTS2是最具代表性的WEB框架,這里給出其響應(yīng)模型,見圖2。
圖2 STRUTS2框架基本響應(yīng)模型
Struts2框架是目前比較優(yōu)秀的Java Web框架,且久經(jīng)市場考驗(yàn)。其特點(diǎn)如下。
從客戶端Web頁面提交的數(shù)據(jù),均是字符串?dāng)?shù)據(jù),服務(wù)器端如何將其轉(zhuǎn)換為自己所需的數(shù)據(jù)類型,是非常棘手的事情。而Struts框架對此提供了強(qiáng)有力的支持。
面向?qū)ο缶幊痰母拍钆d起,通過類及其實(shí)例化對象,以及類間多態(tài)、類的封裝等,解決了如何在抽象層面描述自然實(shí)體的問題。但隨著軟件技術(shù)的發(fā)展,面向?qū)ο蟮牟蛔阋诧@示出來,如如何在A發(fā)生時(shí)進(jìn)行B的處理,面向?qū)ο蠹夹g(shù)即不能很好解決。由此,一種新的編程概念出現(xiàn),那就是面向切面編程,攔截器便是面向切面編程的一個(gè)很好的實(shí)踐,Struts2的攔截器功能十分強(qiáng)大,其自身提供了比較完備的攔截機(jī)制,而且通過對struts.xml文件的配置,可以自行擴(kuò)展攔截器的功能。
當(dāng)Web頁面的HTTP請求HttpRequest到達(dá)Web容器后,容器如何與后臺的控制層進(jìn)行數(shù)據(jù)交互,控制層中各Action間如何進(jìn)行數(shù)據(jù)交互,Action如何實(shí)現(xiàn)對Session、Request等對象的訪問,若要手工實(shí)現(xiàn)是非常不方便的。Struts2擴(kuò)展了OGNL,提供了值棧這種數(shù)據(jù)結(jié)構(gòu),從而方便了框架、容器間的數(shù)據(jù)交互。
Ajax是Asynchronous Javascript and Xml的縮寫,是基于XMLHttpRequest的一組腳本技術(shù)的簡稱,它能夠以DOM文檔的形式返回內(nèi)容,可以同步或異步地返回WEB服務(wù)器的響應(yīng)。通俗地來說,使用Ajax技術(shù)帶來的最直觀的感受就是,可以在不跳轉(zhuǎn)頁面的情況下,實(shí)現(xiàn)頁面內(nèi)容的更新。也就是說可以在客戶不察覺的情況下實(shí)現(xiàn)前后的交互,該技術(shù)的主要目的是改善客戶體驗(yàn)。作為前后臺數(shù)據(jù)交互的橋梁,Ajax既可采用XML格式的數(shù)據(jù),也可采用JSON格式的數(shù)據(jù),相對于XML數(shù)據(jù)而言,JSON數(shù)據(jù)是輕量級的,解析也更為簡單。Struts2的擴(kuò)展性非常良好,可以通過增加插件的形式,提供對JSON字符串自動解析的功能,同時(shí),也可以非常方便地提供對AJAX框架如JQUERY等的支持。
期刊信息管理系統(tǒng)的層次模型見圖3。
圖3 期刊信息管理系統(tǒng)所采用的層次模型及實(shí)現(xiàn)技術(shù)
經(jīng)過分析,可以明確期刊信息管理系統(tǒng)Java Web開發(fā)的技術(shù)構(gòu)成,基于此,提出期刊信息管理系統(tǒng)開發(fā)的技術(shù)思路如下。首先根據(jù)期刊的業(yè)務(wù)流程,采用統(tǒng)一對象建模語言(UML),對系統(tǒng)進(jìn)行用例分析,以確定系統(tǒng)的基本功能,根據(jù)系統(tǒng)功能,進(jìn)行類圖的設(shè)計(jì),再通過順序圖、狀態(tài)圖等確定類間的聯(lián)系,以及類的狀態(tài)的變化;然后,根據(jù)UML的結(jié)果,分層次進(jìn)行系統(tǒng)開發(fā),在系統(tǒng)后臺數(shù)據(jù)庫的開發(fā)過程中可使用Hibernate簡化開發(fā)工作,獲取所需數(shù)據(jù)庫及數(shù)據(jù)表,在系統(tǒng)前臺的開發(fā)過程中可使用JSP頁面技術(shù),并采用AJAX與后臺進(jìn)行數(shù)據(jù)交互,在控制層的開發(fā)中,可以使用Struts2框架進(jìn)行業(yè)務(wù)邏輯控制,使用Spring框架進(jìn)行事務(wù)管理、數(shù)據(jù)源配置等工作,同時(shí)還可以采用通用數(shù)據(jù)訪問接口(DAO)細(xì)化開發(fā)層次;最后,在開發(fā)過程中,采用Junit進(jìn)行測試工作,以保障開發(fā)的順利進(jìn)行[5-6]。
[1]孫 鑫.Java Web開發(fā)詳解[M].北京:電子工業(yè)出版社,2008.
[2]孫 鑫.STRUTS2深入詳解[M].北京:電子工業(yè)出版社,2008.
[3]Elliot J.Hibernate程序高手秘笈[M].南京:東南大學(xué)出版社,2007.
[4]丁躍潮,張 濤,葉文來,等.XML實(shí)用教程[M].北京:北京大學(xué)出版社,2006.
[5]Alan Shalloway,James R.Trott.設(shè)計(jì)模式精解[M].北京:清華大學(xué)出版社,2004.
[6]薩師煊,王 珊.數(shù)據(jù)庫系統(tǒng)概論[M].北京:高等教育出版社,2000.