殷旻昊 黨 光 王 波
(天津師范大學(xué)信息化辦公室 中國 天津 300387)
當(dāng)前管理信息系統(tǒng)在業(yè)務(wù)邏輯上日益復(fù)雜,并且對系統(tǒng)可維護性、可擴展性以及系統(tǒng)移植性的要求越來越高,因此新系統(tǒng)的設(shè)計開發(fā)大多傾向于采用MVC 設(shè)計模式。 而在諸多MVC 框架中,Struts 作為一款開源框架, 建立在動態(tài)網(wǎng)站設(shè)計領(lǐng)域中JSP、XML 及Servlet 等相關(guān)開發(fā)技術(shù)之上, 成為J2EE Web 開發(fā)的首選。
MVC 即Model-View-Controller,模型—視圖—控制器模式。 早期Web 應(yīng)用系統(tǒng)開發(fā)中,業(yè)務(wù)邏輯和視圖界面通常是耦合在一起的,比較適用于規(guī)模較小,業(yè)務(wù)簡單且變化較少的情況,但隨著應(yīng)用系統(tǒng)業(yè)務(wù)邏輯日趨復(fù)雜,用戶界面大量增加, 同時在系統(tǒng)健壯性、 代碼可重用性的要求越來越高,MVC 模式在軟件開發(fā)效率方面的優(yōu)勢日益凸顯,因而得到廣泛應(yīng)用。MVC 強制性的使應(yīng)用程序的輸入、處理和輸出分開,將其劃分成三個相對獨立的層次:模型層、視圖層和控制器層,從而降低了復(fù)雜的耦合關(guān)系,實現(xiàn)界面與應(yīng)用邏輯的有效分離。
Struts 由Apache 軟件組織負(fù)責(zé)開發(fā), 其實質(zhì)是在JSP Model2 基礎(chǔ)上實現(xiàn)的一個MVC 開源框架, 其中模型部分由JavaBean 或EJB 組件構(gòu)成, 視圖部分由Jsp 文件和Struts 客戶化標(biāo)簽組成,控制器部分由ActionServlet 和Action 類來完成。 由于是一款開源框架,文檔豐富且源代碼公開,并且具備豐富的Taglib 標(biāo)簽庫, 頁面導(dǎo)航性強, 對MVC 有良好的實現(xiàn),在業(yè)界J2EE 架構(gòu)中有廣泛的應(yīng)用。
案例系統(tǒng)為某管網(wǎng)管理系統(tǒng),包含日志管理、權(quán)限管理、數(shù)據(jù)維護、查詢統(tǒng)計、報表輸出等多個模塊。 由于該系統(tǒng)從頁面展現(xiàn)到邏輯處理均較為復(fù)雜, 開發(fā)人數(shù)較多且周期較長,并且有擴展性、健壯性方面的要求,采用Struts 框架開發(fā)是比較好的選擇。 在案例系統(tǒng)整體框架中, 除Struts 框架負(fù)責(zé)MVC 三部分的分離外,根據(jù)系統(tǒng)開發(fā)的需要還需引入Spring框架以實現(xiàn)控制反轉(zhuǎn)和面向方面編程,Hibernate 框架以實現(xiàn)數(shù)據(jù)的對象持久化和對象關(guān)系映射,DWR 框架以實現(xiàn)對頁面的監(jiān)聽和異步處理,加強對視圖部分細(xì)粒度的支持。
在案例系統(tǒng)Struts 框架應(yīng)用中, 控制器方面由ActionServlet 類和具體的Action 類來實現(xiàn)。ActionServlet 作為核心組件,主要負(fù)責(zé)接受HTTP 請求信息,并根據(jù)對應(yīng)配置文件的信息把請求轉(zhuǎn)發(fā)給適當(dāng)?shù)腁ction 對象,而Action 類負(fù)責(zé)調(diào)用模型層(案例系統(tǒng)中使用JavaBean 實現(xiàn))的方法更新模型狀態(tài)。Struts 框架應(yīng)用中,3 個文件的配置是其中的關(guān)鍵,分別為web.xml、struts-config.xml 及消息資源文件。
web.xml 文件是整個Web 工程的配置文件, 由于Struts框架是系統(tǒng)運行的基礎(chǔ)框架, 因而對Struts 的配置是該文件最重要的內(nèi)容, 主要包括對servlet、 servlet-mapping 以及taglib 元素的配置。 其中servlet 和servlet-mapping 元素用于指定ActionServlet 接受請求并確定如何響應(yīng),taglib 元素則用于聲明Web 應(yīng)用所使用的Struts 標(biāo)簽庫及開發(fā)者自定義的標(biāo)簽庫。
Struts-config.xml 文件是Struts 框架的配置文件, 用于對Struts 框架中用到的控制器、視圖和模型進行配置。 由于案例系統(tǒng)子模塊功能較為復(fù)雜,Struts-config.xml 中僅配置了系統(tǒng)全局性的數(shù)據(jù),如data-sources 元素配置數(shù)據(jù)源,指定數(shù)據(jù)庫驅(qū)動類、URL 及訪問數(shù)據(jù)庫的用戶名、密碼等,global-forwards元素配置全局請求轉(zhuǎn)發(fā)路徑,message-resources 元素定義了Resource Bundle 使用的資源文件等, 其他如form-beans、action-mapping 元素均只定義系統(tǒng)的頁面登錄, 涉及具體應(yīng)用的form 及action 設(shè)置均在子模塊所屬的Struts-xx-config.xml 中進行配置。
Struts 框架通過消息資源文件來支持國際化和本地化,通常需要手動處理將其設(shè)置為支持中文, 否則會顯示亂碼,案例系統(tǒng)由于采用Eclipse 平臺作為開發(fā)環(huán)境, 平臺自帶的ResourceBundEditor 插件可自動對消息資源文件進行重編碼,相對手動處理而言使用起來更加直觀方便。
Spring 框架作為一個松耦合的開源框架, 其Spring Core與Spring Aop 模塊在對控制反轉(zhuǎn)和面向方面編程有突出的創(chuàng)新型和實用性,非常適用于案例系統(tǒng)的開發(fā)。 其配置需在web.xml 文件的filter 元素及l(fā)istener 元素分別定義過濾器類和監(jiān)聽器類,還需在context-param 元素中定義對應(yīng)的Spring配置文件。 Hibernate 框架作為一款數(shù)據(jù)持久化的開源框架,為案例系統(tǒng)提供對象與關(guān)系數(shù)據(jù)庫的映射,并以統(tǒng)一的接口方式支持多種數(shù)據(jù)庫,其配置也在web.xml 文件的filter 元素中定義。
案例系統(tǒng)開發(fā)過程中采用Struts 框架及相關(guān)技術(shù), 其豐富的標(biāo)簽庫在頁面展示方面起到突出作用,并且由于比較徹底的實現(xiàn)了頁面與邏輯的分離,在版本更迭過程中極大提高了工作效率,該系統(tǒng)在用戶需求發(fā)生較大變動后仍按期完成開發(fā)工作,目前已經(jīng)正式運行,得到用戶的認(rèn)可。
[1]Husted, Cedric Dumoulin. Struts In Action [M]. Manning Publications Co, 2002, 5.
[2]莫勇騰.深入淺出設(shè)計模式:C#/Java 版[M].北京:清華大學(xué)出版社,2006.
[3]計磊,李里,周偉.精通J2EE-Eclipse Struts Hibernate Spring 整合應(yīng)用案例[M].北京:人民郵電出版社,2006(8).