摘 要: 以天津大學(xué)校園信息化建設(shè)為背景,研究了基于J2EE技術(shù)和MVC經(jīng)典軟件模式的STRUTS構(gòu)架體系,應(yīng)用于綜合教務(wù)管理信息系統(tǒng)中網(wǎng)絡(luò)教學(xué)" title="網(wǎng)絡(luò)教學(xué)">網(wǎng)絡(luò)教學(xué)平臺的開發(fā)與實(shí)現(xiàn),體現(xiàn)出struts技術(shù)在Web應(yīng)用開發(fā)中的強(qiáng)大功效。
關(guān)鍵詞: Struts框架 模型-視圖-控制器 Web應(yīng)用 教務(wù)系統(tǒng)
信息社會的發(fā)展使人們越來越依賴網(wǎng)絡(luò),而網(wǎng)絡(luò)技術(shù)已經(jīng)成為當(dāng)前的主要發(fā)展趨勢。隨著校園信息化建設(shè)的發(fā)展,校園網(wǎng)規(guī)模不斷擴(kuò)大,網(wǎng)絡(luò)用戶越來越多,通過網(wǎng)絡(luò)來共享學(xué)校提供的資源和使用學(xué)校提供的服務(wù)。教務(wù)管理工作是高等學(xué)校的重要工作之一,隨著網(wǎng)絡(luò)和計算機(jī)技術(shù)的快速發(fā)展以及高校教育體制的不斷更新,天津大學(xué)的教務(wù)信息管理系統(tǒng)TMIS(Teaching Management Information System)為了適應(yīng)新的業(yè)務(wù)需求,利用先進(jìn)的規(guī)范化管理手段和信息技術(shù)不斷地進(jìn)行自我改進(jìn),但以往TMIS都是以Client/Sever技術(shù)為主,主要的教學(xué)管理工作都是由各學(xué)院的教務(wù)人員通過Client端負(fù)責(zé)完成。對于教師和學(xué)生直接參與的教學(xué)活動,如教學(xué)資源共享、選課管理和成績管理等,需要打破以前的管理模式,從C/S結(jié)構(gòu)中分離開,打造一個面向全體師生的可隨時異地互動的網(wǎng)絡(luò)教學(xué)平臺。天津大學(xué)根據(jù)自身的特點(diǎn),結(jié)合多年的管理系統(tǒng)開發(fā)經(jīng)驗(yàn),設(shè)計開發(fā)了一個集C/S 技術(shù)與 B/S技術(shù)于一體的綜合教務(wù)信息管理平臺?;贑/S的管理系統(tǒng)提供了強(qiáng)大的管理功能,其具體的設(shè)計方案請參見參考文獻(xiàn)[1]。為了解決Web應(yīng)用開發(fā)過程中的開發(fā)效率緩慢、代碼重用效率低、維護(hù)代碼繁瑣、擴(kuò)展性差等技術(shù)問題,本文采用MVC(Model,模型,View,視圖,Controller,控制器)這種經(jīng)典設(shè)計模式" title="設(shè)計模式">設(shè)計模式應(yīng)用到開發(fā)天津大學(xué)網(wǎng)絡(luò)教學(xué)平臺中,并使系統(tǒng)構(gòu)架在目前最流行的Struts Framework之上。本文將詳細(xì)討論struts技術(shù)作為一個良好的MVC框架,在實(shí)際Web開發(fā)和設(shè)計中的應(yīng)用,并且凸顯出自己獨(dú)特的開發(fā)優(yōu)勢。
1 Apache Struts Framework概述
1.1 JSP Model 2簡介
JSP Model 2是Java Web技術(shù)與MVC設(shè)計模式相結(jié)合的開發(fā)模型[2]。MVC 模式的概念,即三個組件相互分離,當(dāng)模型的數(shù)據(jù)發(fā)生變化時,控制器會通知視圖進(jìn)行刷新。MVC模式的出現(xiàn)實(shí)現(xiàn)了功能模塊和顯示模塊的分離,提高了設(shè)計、開發(fā)的靈活性、可復(fù)用" title="復(fù)用">復(fù)用性和易維護(hù)性。
JSP Model 2利用Servlet、JSP及Bean/EJB實(shí)現(xiàn)MVC結(jié)構(gòu),分別對應(yīng)著Controller、View和Model。其中使用Servlet接受請求,Servlet控制用戶的提交請求和輸出的回應(yīng),而JSP頁面只作為顯示層,Bean/EJB用作業(yè)務(wù)處理(事務(wù)處理或數(shù)據(jù)處理)。通過這種設(shè)計模式將對數(shù)據(jù)的顯示和業(yè)務(wù)邏輯的處理分開,使得整個系統(tǒng)的邏輯結(jié)構(gòu)更清晰合理,易于擴(kuò)展和維護(hù)。
1.2 Struts Framework的組成
Struts是免費(fèi)使用的基于J2EE標(biāo)準(zhǔn)的開發(fā)框架(framework),它充分體現(xiàn)了JSP Model 2的設(shè)計思路,并根據(jù)Web應(yīng)用和J2EE的特性做了適當(dāng)?shù)臄U(kuò)展。Struts是Apache組織的項(xiàng)目之一[3],其代碼開發(fā)是從2000年5月份開始的,到2001年6月,struts 1.0版本發(fā)布,至今為使用MVC體系開發(fā)Web應(yīng)用提供了一個良好的框架。
Struts包含了豐富的標(biāo)記庫和獨(dú)立于該框架工作的實(shí)用程序類,其中起關(guān)鍵作用的類有ActionServlet,Action,ActionMapping,ActionForm和ActionError。Action-
Mapping類通過用戶定義的配置文件描述,允許ActionServlet將用戶的請求轉(zhuǎn)變?yōu)閼?yīng)用行為,根據(jù)映射的業(yè)務(wù)邏輯調(diào)用與之對應(yīng)的模型進(jìn)行后臺數(shù)據(jù)處理,完畢后由模型將結(jié)果返回至指定視圖。由此,struts框架通過核心組件的協(xié)同工作充分體現(xiàn)了M-V-C模式思路。
1.3 配置struts組件
典型的struts應(yīng)用要用到web.xml、struts-config.xml和可選的應(yīng)用資源文件三種配置文件。開發(fā)人員必須創(chuàng)建或者修改,使得Struts應(yīng)用能夠運(yùn)轉(zhuǎn)起來。
Web.xml是web應(yīng)用的標(biāo)準(zhǔn)配置文件,是所有J2EE Web應(yīng)用必需的組成部分,Servlet/JSP容器使用這個文件來載入和配置相應(yīng)的應(yīng)用。Struts框架有ActionServlet和標(biāo)簽庫兩個組件需要使用從應(yīng)用部署描述符中配置(可選)。
Struts-config.xml是struts應(yīng)用中最重要的配置文件,其中包含Action處理類、FromBean以及頁面的轉(zhuǎn)向等信息的配置??梢哉fStruts應(yīng)用是一個依靠struts-config.xml文件把組件連接起來的網(wǎng)絡(luò)。struts-config.xml文件提供將邏輯名映射到物理路徑,使得物理路徑與程序路徑無關(guān),整個系統(tǒng)使用的邏輯名在Struts-config.xml中完成。尤其在大型Web應(yīng)用中,對于系統(tǒng)維護(hù)和升級,這種管理頁面的方式顯示出其方便性和有效性。
1.4 Struts的處理流程
(1)客戶通過瀏覽器訪問JSP頁面,并填寫好表單" title="表單">表單,向服務(wù)器端發(fā)出請求。
(2)控制器ActionServlet截獲該請求(以.do結(jié)尾的http請求),根據(jù)struts-config.xml中的配置信息查到與該請求相對應(yīng)的ActionForm和ActionClass,并使用前者封裝用戶提交的表單數(shù)據(jù),傳遞給后者使用。
(3)ActionServlet調(diào)用ActionClass的Execute( )方法來進(jìn)行業(yè)務(wù)邏輯處理。即用JavaBean/EJB來封裝具體的業(yè)務(wù)操作,并提供業(yè)務(wù)邏輯接口,從而實(shí)現(xiàn)業(yè)務(wù)模塊" title="業(yè)務(wù)模塊">業(yè)務(wù)模塊的重用與分離。
(4)根據(jù)Action處理的結(jié)果,返回一個ActionForward給ActionServlet,如果ActionForward指向另一個Action請求,重新開始;通常是forward到另一個JSP頁面。
2 基于struts框架高校網(wǎng)絡(luò)教學(xué)平臺的具體實(shí)現(xiàn)
2.1 功能模塊設(shè)計
天津大學(xué)OnLine-TMIS網(wǎng)絡(luò)教學(xué)平臺采用了基于MVC模式的Struts框架技術(shù),應(yīng)用了四層體系結(jié)構(gòu)的設(shè)計方案。功能設(shè)計上主要針對教學(xué)實(shí)施環(huán)節(jié)的設(shè)置,實(shí)現(xiàn)教師和學(xué)生之間的隨時隨地通過系統(tǒng)進(jìn)行教學(xué)互動。
OLTMIS主要功能模塊有:(1)用戶登陸模塊,用于權(quán)限保護(hù)和角色分配;(2)選課管理模塊;(3)成績管理模塊;(4)作業(yè)管理模塊;(5)課程信息管理模塊;(6)教學(xué)質(zhì)量評價模塊等,如圖1所示。
2.2 系統(tǒng)的構(gòu)架設(shè)計
鑒于Web系統(tǒng)的跨平臺性、可擴(kuò)展性以及程序代碼的重用性,本文采用J2EE平臺和Struts框架技術(shù)來開發(fā)整個系統(tǒng),分為四層結(jié)構(gòu)。從下到上各層功能描述分別是:
(1)資源層:以數(shù)據(jù)庫的形式提供集中統(tǒng)一的數(shù)據(jù)。包括教務(wù)教學(xué)數(shù)據(jù)庫和教學(xué)資源數(shù)據(jù)庫;采用Oracle 9i數(shù)據(jù)庫的解決方案。
(2)業(yè)務(wù)邏輯層:對應(yīng)模型組件,處理具體的事務(wù)流程,根據(jù)制定的業(yè)務(wù)邏輯處理從表示層或數(shù)據(jù)層傳來的數(shù)據(jù),然后根據(jù)控制層的調(diào)度將數(shù)據(jù)流轉(zhuǎn)向數(shù)據(jù)層或表示層??杉?xì)分為業(yè)務(wù)組件層、公共組件層兩個子層。其中業(yè)務(wù)組件層是指按照不同業(yè)務(wù)邏輯創(chuàng)建的不同的類,實(shí)現(xiàn)具體的各種業(yè)務(wù)邏輯;公共組件層是公共調(diào)用的一些基礎(chǔ)類的包,通過這些bean可以實(shí)現(xiàn)對數(shù)據(jù)庫的查詢、修改等功能。
(3)控制層:對應(yīng)控制器組件,Action Servlet用來實(shí)現(xiàn)業(yè)務(wù)流的控制,根絕表示層的請求,將數(shù)據(jù)轉(zhuǎn)入相應(yīng)的業(yè)務(wù)模塊,再將業(yè)務(wù)模塊處理的數(shù)據(jù)結(jié)果傳回表示層。
(4)表示層:對應(yīng)視圖組件,用于生成頁面,用來收集用戶和系統(tǒng)的交互信息或者顯示業(yè)務(wù)模塊處理的數(shù)據(jù)結(jié)果。利用JSP技術(shù),廣泛使用STRUTS的自定義標(biāo)簽庫,使代碼更為簡化更為標(biāo)準(zhǔn)。
2.3 Struts框架的具體實(shí)現(xiàn)
為了實(shí)現(xiàn)上述功能模塊,這里應(yīng)用Struts框架設(shè)計出系統(tǒng)的運(yùn)作流程和基本的配置文件。具體實(shí)現(xiàn)步驟為:
(1)定義ActionMappings建立到應(yīng)用業(yè)務(wù)邏輯之間的聯(lián)系。
(2)設(shè)計滿足View需求的所有支持對象。
(3)基于每一個顯示對象提供的數(shù)據(jù)屬性來創(chuàng)建對應(yīng)的ActionForm對象。
(4)設(shè)計被ActionMapping調(diào)用的Action對象。
(5)設(shè)計應(yīng)用業(yè)務(wù)邏輯對象(Bean/EJB)。
(6)對應(yīng)ActionMapping設(shè)計的流程創(chuàng)建JSP頁面。
(7)根據(jù)設(shè)計內(nèi)容建立合適的配置文件struts-config.xml和web.xml。
(8)開展編碼、應(yīng)用測試和部署。
以選課為例,學(xué)生登錄后進(jìn)行選課操作,如圖2所示ActionServlet截取學(xué)生選課確認(rèn)的HTTP請求,通過struts-config.xml中定義的映射關(guān)系(ActionMappings)找到與請求對應(yīng)的SLLSFormBean進(jìn)行數(shù)據(jù)封裝;通過SLLSActionBean的execute()入口方法調(diào)用選課處理模塊。處理的結(jié)果forward到事先指定的頁面,在瀏覽器中回顯給用戶。如果系統(tǒng)運(yùn)行中出現(xiàn)錯誤,例如Action處理類運(yùn)行錯誤,都會封裝到ActionError類中一起返回給頁面(struts專門提供進(jìn)行錯誤處理的類)。
其中主要用到的實(shí)際編寫代碼的文件有:
(1)StuSlls.jsp:提供需要填寫的表單。
(2)SLLSForm.java:用于封裝數(shù)據(jù)。
(3)SLLSAction.java:處理類。
其中核心代碼如下:
public ActionForward execute(ActionMapping mapping,
ActionForm form,HttpServletRequest request,
HttpServletResponse response) throws Exception {
//===check Session===//
//選課和退課的業(yè)務(wù)操作,需要訪問數(shù)據(jù)庫則調(diào)用
//數(shù)據(jù)庫訪問組件//
}
(4)所有對數(shù)據(jù)庫操作都封裝在Database類中,
public class Database {
public void setConnection()
public Connection getConnection()
public void setStatement()
public Statement getStatement()
public ResultSet SelectQuery(String sql)
throws Exception
public void UpdateQuery(String sql) throws
Exception
public void closeConnection() throws Exception
}
其中ActionServlet(Controller)的核心是Struts-config.xml,所有的映射關(guān)系將在這里進(jìn)行統(tǒng)一配置。尤其是在開發(fā)大型復(fù)雜的Web應(yīng)用,對struts-config.xml要做綜合全面的考慮。這里提供一些核心配置片斷,使用的版本是Struts 1.1。
?。?xml version=′1.0′ encoding=′GBK′?>
?。?DOCTYPE struts-config PUBLIC ″-//Apache Software
Foundation//DTD Struts Configuration 1.1//EN″ ″http://jakarta.
apache.org/struts/dtds/struts-config_1_1.dtd″>
<struts-config>
?。?-------Form Bean Definitions ------>
<form-beans>
?。糵orm-bean name=″LogonForm″
type=″tju.mic.teaching.action.LogonForm″/>
?。糵orm-bean name=″SllsForm″
type=″tju.mic.teaching.action. SllsForm″/>
<form-bean name=″StuAchvForm″
type=″tju.mic.teaching.action.StuAchvForm″/>
……
</form-beans>
?。?-------Global Forward Definitions ------>
<global-forwards>
?。糵orward name=″Welcome″ path=″/logon.jsp″/>
</global-forwards>
?。?--------Action Mapping Definitions -------->
<action-mappings>
<action name=″LogonForm″path=″/logon″
input=″/logon.jsp″ scope=″request″
type=″tju.mic.teaching.action.LogonAction″>
<forward name=″student″ path=″/student.jsp″/>
?。糵orward name=″teacher″ path=″/teacher.jsp″/>
</action>
?。糰ction name=″SllsForm″ path=″/stuslls″
input=″/student/slls.jsp″ scope=″request″
type=″tju.mic.teaching.action. SllsAction″>
<forward name=″Forward″
path=″/student/slls.jsp″/>
?。?action>
……
</action-mappings>
……
?。?struts-config>
Struts框架提供了完整的實(shí)用程序類(系統(tǒng)狀態(tài)類FormBean、動作類ActionBean和控制器類Servlet),只需對其進(jìn)行配置,以及根據(jù)具體業(yè)務(wù)需求,對類進(jìn)行擴(kuò)展即可。另外struts提供的豐富的標(biāo)記庫與屬性文件使JSP頁面設(shè)計與業(yè)務(wù)邏輯實(shí)現(xiàn)徹底分離,開發(fā)人員能夠集中精力各盡其責(zé),體現(xiàn)出基于框架開發(fā)的高效性和易維護(hù)性。
另外為了保證系統(tǒng)的可擴(kuò)展性和可重用性,增強(qiáng)代碼的規(guī)范度,本文采用組件設(shè)計思想,設(shè)計了大量的通用模塊,基礎(chǔ)類的包,其中包括了數(shù)據(jù)庫訪問組件、用戶管理組件、統(tǒng)一認(rèn)證組件等。同時引入了軟件工程中協(xié)作開發(fā)的概念和方法。設(shè)計之初只定義出類的接口和方法,因此在編寫代碼階段可以由不同人員負(fù)責(zé)不同組件及不同模型部分的開發(fā),并引入軟件生命周期模型,使整個開發(fā)過程實(shí)現(xiàn)流水線管理。
本文論述了在開發(fā)天津大學(xué)網(wǎng)絡(luò)教學(xué)平臺過程中使用先進(jìn)的Struts框架技術(shù),充分貫徹MVC這一經(jīng)典的軟件開發(fā)模式。實(shí)踐證明,整個軟件開發(fā)周期明顯縮短,并大大提高了代碼的可維護(hù)性和可復(fù)用性。并為逐步創(chuàng)(接上頁)
建校園級的協(xié)同信息平臺提供了一條有效的開發(fā)設(shè)計思路和統(tǒng)一的技術(shù)規(guī)范,推動了校園信息化的進(jìn)程。
參考文獻(xiàn)
1 王 贊,金志剛,董旭源.基于構(gòu)件技術(shù)的教務(wù)信息系統(tǒng)的設(shè)計與實(shí)現(xiàn).微處理機(jī),2004;(1)
2 陸 榮,郁 洲,阮永良等.J2EE平臺上MVC設(shè)計模式的研究與實(shí)現(xiàn).計算機(jī)應(yīng)用研究,2003;(3)
3 Struts Tutorial[EB/OL].http://struts.apache.org/


