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


