□ 劉英哲
基于SSH框架的遠(yuǎn)程教學(xué)平臺的實現(xiàn)
□ 劉英哲
本文介紹了目前主流遠(yuǎn)程教學(xué)平臺存在的缺陷,并提出了以SSH框架技術(shù)為支撐構(gòu)架遠(yuǎn)程教學(xué)平臺的設(shè)計方案。平臺系統(tǒng)在設(shè)計開發(fā)過程中使用了Maven進(jìn)行項目管理,降低了系統(tǒng)各個模塊之間的耦合度,使得代碼的復(fù)用性大大提高,同時增強了系統(tǒng)的穩(wěn)定性和可擴展性。
遠(yuǎn)程教學(xué)平臺;Spring;Hibernate;Maven
隨著信息技術(shù)特別是網(wǎng)絡(luò)技術(shù)和多媒體技術(shù)的發(fā)展,我國遠(yuǎn)程教育發(fā)展已經(jīng)進(jìn)入了新的歷史時期。構(gòu)建靈活開放的終身教育體系,大力發(fā)展現(xiàn)代遠(yuǎn)程教育,建設(shè)以衛(wèi)星、電視和互聯(lián)網(wǎng)等為載體的遠(yuǎn)程開放繼續(xù)教育及公共服務(wù)平臺[1],已經(jīng)成為未來十年遠(yuǎn)程教育發(fā)展的奮斗目標(biāo)。作為遠(yuǎn)程教育主要載體的遠(yuǎn)程教學(xué)平臺因其設(shè)計上的缺陷而暴露出越來越多的問題,主要體現(xiàn)在三個方面:首先是教學(xué)平臺系統(tǒng)響應(yīng)速度較慢;其次是系統(tǒng)的界面較為單一,用戶缺乏學(xué)習(xí)興趣,導(dǎo)致訪問量降低;第三是系統(tǒng)在軟件設(shè)計上結(jié)構(gòu)較為簡單,各個部分代碼耦合性較強。這些實際存在的問題制約了當(dāng)前遠(yuǎn)程教育的快速發(fā)展。
目前,數(shù)以千萬計的用戶正借助網(wǎng)絡(luò)手段進(jìn)行遠(yuǎn)程學(xué)習(xí)。而隨著用戶數(shù)量的增加,教學(xué)平臺的并發(fā)訪問數(shù)也不斷攀升,這就導(dǎo)致單位時間內(nèi)需要同時處理的業(yè)務(wù)數(shù)量大幅度增加,因此要求教學(xué)平臺有更快的處理速度。分析表明,網(wǎng)絡(luò)程序處理速度的快慢主要依賴于數(shù)據(jù)庫訪問層部分,因為數(shù)據(jù)庫的訪問是一個較為復(fù)雜的流程,首先需要建立到數(shù)據(jù)庫的連接,然后提供用戶名密碼等待數(shù)據(jù)庫認(rèn)證,認(rèn)證成功后,要發(fā)送SQL語句等待數(shù)據(jù)庫語法校驗,成功后數(shù)據(jù)庫將符合要求的數(shù)據(jù)返回給網(wǎng)絡(luò)程序,最后還需要關(guān)閉數(shù)據(jù)庫的連接。因此,如何降低數(shù)據(jù)庫訪問次數(shù)成為網(wǎng)絡(luò)程序需要解決的關(guān)鍵問題。目前的主要解決方案有兩種:第一種就是建立集群,提高數(shù)據(jù)庫服務(wù)器的處理性能。這種方案的優(yōu)點是實行簡單,程序不需要修改大段的代碼,只要設(shè)置好數(shù)據(jù)庫的負(fù)載均衡就能夠完成。然而這種方案的缺點就是造價較高,需要耗費大量的資金。第二種方案就是在網(wǎng)絡(luò)程序的數(shù)據(jù)訪問層加上數(shù)據(jù)庫訪問緩存,將對數(shù)據(jù)庫訪問的結(jié)果緩存在內(nèi)存中,程序在需要數(shù)據(jù)的時候首先訪問緩存,如果有相應(yīng)的數(shù)據(jù)就不再連接數(shù)據(jù)庫,避免不必要的開銷。這個方案從根本上減少了數(shù)據(jù)庫訪問的次數(shù),不需耗費額外資金,同樣可以達(dá)到提升系統(tǒng)處理速度的目的。
作為教學(xué)平臺組成部分的界面設(shè)計也是評估系統(tǒng)性能重要指標(biāo)之一。近年來各個網(wǎng)頁瀏覽器之間的標(biāo)準(zhǔn)逐漸統(tǒng)一,綜合使用CSS+HTML+JavaScript的XHTML技術(shù)逐漸流行,瀏覽器標(biāo)準(zhǔn)中對文檔對象模型的支持還有異步加載XML的XMLHttpRequest對象使得異步加載網(wǎng)頁成為了可能,同時減少了服務(wù)器和瀏覽器之間的通訊量,使程序依舊能維持原來的功能。
目前教學(xué)平臺的后臺代碼設(shè)計中經(jīng)常摻雜著各種邏輯業(yè)務(wù)的控制邏輯甚至是直接訪問數(shù)據(jù)庫的語句,這也是系統(tǒng)整體性能下降的因素之一。復(fù)雜的邏輯設(shè)計使功能固化嚴(yán)重,結(jié)構(gòu)難以修改,如果想要添加或者修改功能,就必須要讀懂頁面層、業(yè)務(wù)邏輯層和數(shù)據(jù)訪問層的代碼。隨著項目規(guī)模變大,修改的難度也會大大增加。
通過以上分析,理想的遠(yuǎn)程教學(xué)平臺應(yīng)能夠同時滿足以下幾個條件:模塊化,即將程序劃分成若干模塊,各個模塊之間的職責(zé)清晰,使程序結(jié)構(gòu)一目了然;界面層既能支持傳統(tǒng)的網(wǎng)頁交互式瀏覽,也能提供基于AJAX的異步瀏覽模式;程序可擴展性強,能夠根據(jù)實際需要增加或修改流程。
1.Maven
Maven是基于項目對象模型(POM),可以通過一小段描述信息來管理項目的構(gòu)建、報告和文檔的軟件項目管理工具。同一般的自動編譯軟件相比,它主要有以下兩個優(yōu)點。
(1) Maven具有默認(rèn)的項目文件結(jié)構(gòu)的規(guī)則,不需要編寫額外的配置文件來說明如何編譯、測試和對項目代碼進(jìn)行打包。由于項目都遵循了默認(rèn)的規(guī)則,程序員可以在較短的時間內(nèi)熟悉項目的規(guī)則,而且任何IDE都可以對項目進(jìn)行編輯,程序員可以使用各自擅長的編程軟件。
(2)Maven對項目進(jìn)行建模,將項目的構(gòu)建劃分為若干生命周期,不需要對項目進(jìn)行任何說明,只需要簡單的指令就可以自動進(jìn)行代碼測試、項目打包和自動部署等功能。
本文的系統(tǒng)使用了Maven多模塊設(shè)計方式,將系統(tǒng)不同的功能劃分成單獨的項目,各個項目之間的依賴由Maven進(jìn)行維護(hù),這就在更大的程度上隔離了各個模塊的代碼,使得項目維護(hù)以及單元測試更加快捷方便。
2.MVC結(jié)構(gòu)
系統(tǒng)主體結(jié)構(gòu)采用MVC架構(gòu),MVC指的是模型(Model)、視圖(View)和控制器(Controller)三個部分。這三個部分的聯(lián)系方式如圖1所示。
使用MVC的目的是將模型和視圖的實現(xiàn)代碼分離,從而使同一個程序可以使用不同的表現(xiàn)形式。在本系統(tǒng)中,為了今后能夠開發(fā)出Web Service等其他新的表現(xiàn)形式,最便捷的方式就是能夠重用原有的業(yè)務(wù)邏輯和數(shù)據(jù)訪問代碼,如果系統(tǒng)使用了MVC的架構(gòu),服務(wù)層和數(shù)據(jù)表現(xiàn)層是相互分離的,那么就可以方便地在Web Service中調(diào)用原來的服務(wù)層代碼,大大減少了重復(fù)開發(fā)工作。
3.SSH框架
SSH是Struts+Spring+Hibernate 3種技術(shù)的有機融合,是目前應(yīng)用最廣泛的J2EE架構(gòu)[2]。Struts是目前較為流行的基于MVC的框架,它主要充當(dāng)了控制器的角色,負(fù)責(zé)接收用戶的輸入、調(diào)用服務(wù)層的方法后將得到的結(jié)果返回給數(shù)據(jù)表現(xiàn)層。Hibernate充當(dāng)了模型的角色,它使用XML文件將數(shù)據(jù)庫的字段和實體類字段之間的關(guān)系對應(yīng)起來,將關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)在程序中直接變?yōu)槌绦蛑械膶ο?。除此以外,Hibernate提供了功能強大的事務(wù)管理和緩存機制,教學(xué)平臺的業(yè)務(wù)邏輯層通過Hibernate的緩存訪問數(shù)據(jù)可以減少數(shù)據(jù)庫的開銷,提高程序的處理速度。Spring在程序中充當(dāng)了裝配工廠的角色,通過XML配置文件將各個子層的實例組織起來,將各個子層之間的依賴關(guān)系集中表現(xiàn)在配置文檔中,使得系統(tǒng)結(jié)構(gòu)更加清晰合理。
遠(yuǎn)程教學(xué)系統(tǒng)按用戶身份不同主要分為兩大子系統(tǒng):教師子系統(tǒng)和學(xué)生子系統(tǒng)。教師子系統(tǒng)為教師提供了日常教學(xué)所需要的功能。教師通過資源管理模塊可以查看自己所負(fù)責(zé)課程的所有資源,對過時的資源進(jìn)行及時的更新或刪除,使學(xué)生隨時可以接觸到該門學(xué)科的最新進(jìn)展。相對于傳統(tǒng)的以課本為主的教學(xué)方式,教師可以在教學(xué)平臺上隨時添加各種類型的文本、圖片甚至視頻文件來提高學(xué)生學(xué)習(xí)的興趣,進(jìn)而加深學(xué)生對該課程的理解。教學(xué)管理界面不僅為教師提供了學(xué)生在學(xué)習(xí)平臺上的學(xué)習(xí)記錄,還提供教師的行為記錄,方便教師隨時調(diào)整教學(xué)進(jìn)度。教師在論壇中可以發(fā)起討論,和學(xué)生互動,解答學(xué)生在學(xué)習(xí)中遇到的問題。
學(xué)生功能包含資源瀏覽、資源檢索和論壇應(yīng)用。學(xué)生除了可以按課程檢索到相應(yīng)的資源,還可以通過資源訪問量、資源最近更新日期等條件檢索自己感興趣的資源。學(xué)生可以在論壇中和其他同學(xué)、老師一起討論課程中的問題,發(fā)表自己的觀點。
系統(tǒng)還包含了一些教師與學(xué)生共用的功能,包括收藏夾、個人信息維護(hù)、站內(nèi)所搜等功能,便于用戶更方便的使用系統(tǒng)其他功能。圖2分別為教師子系統(tǒng)和學(xué)生子系統(tǒng)模塊設(shè)計邏輯圖。
本系統(tǒng)采用MVC架構(gòu),因此在設(shè)計上被劃分成若干子層,各個子層之間相互獨立,使用接口對實現(xiàn)的細(xì)節(jié)進(jìn)行封裝。系統(tǒng)分層示意圖如圖3所示。
系統(tǒng)在實現(xiàn)時使用Maven進(jìn)行項目管理,將每一層都劃分成獨立的項目,然后在各個項目之間建立依賴關(guān)系。各個子項目之間的關(guān)系如圖3所示。
Maven將系統(tǒng)抽象成為項目模型(POM),首先建立一個父項目,對各個項目共用的屬性進(jìn)行匯總,例如測試函數(shù)庫、編譯器設(shè)置等。配置文件部分代碼如下:
配置文件向Maven闡述了該項目所需要的函數(shù)庫的名稱和版本,以及該函數(shù)庫的作用。
系統(tǒng)的主要模塊從下至上分別為數(shù)據(jù)持久層、系統(tǒng)服務(wù)層、界面表現(xiàn)層。數(shù)據(jù)持久層負(fù)責(zé)與數(shù)據(jù)庫進(jìn)行交互,將讀取到的關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)轉(zhuǎn)換成系統(tǒng)能夠處理的業(yè)務(wù)對象。這一部分主要使用了Hibernate進(jìn)行對象關(guān)系映射(ORM),用XML文檔將數(shù)據(jù)庫的字段映射為各個實體類的屬性。系統(tǒng)服務(wù)層調(diào)用數(shù)據(jù)持久層的服務(wù)并使用各種業(yè)務(wù)流程處理得到的數(shù)據(jù),服務(wù)層也承擔(dān)著負(fù)責(zé)劃分事務(wù)界限的任務(wù)。數(shù)據(jù)服務(wù)層將處理好的數(shù)據(jù)提交到界面表示層,表示層只負(fù)責(zé)將數(shù)據(jù)顯示在模板頁面上和將用戶輸入的數(shù)據(jù)傳遞到數(shù)據(jù)服務(wù)層上,它不對數(shù)據(jù)進(jìn)行任何處理。
下面以管理員模塊中用戶管理系統(tǒng)為例,具體分析Struts+Hibernate+Spring多框架在系統(tǒng)中的應(yīng)用。
此部分主要功能是對用戶進(jìn)行增加、刪除以及修改權(quán)限。例如要增加一個系統(tǒng)用戶,輸入用戶信息并提交后,通過Struts調(diào)用AddUserAction的execute方法,業(yè)務(wù)層Service接口的實現(xiàn)類,再間接調(diào)用DAO接口的實現(xiàn)類。DAO接口的實現(xiàn)類封裝了通過Hibernate訪問數(shù)據(jù)表對應(yīng)持久化對象的CRUD操作。以下給出Spring的applicationContext.xml配置文件部分代碼段:
通過以上配置代碼,spring將負(fù)責(zé)界面層的strutsAction和負(fù)責(zé)服務(wù)層的userSerivces聯(lián)系在了一起,strutsAction在自己的代碼中設(shè)置了userServices這一屬性,由Spring進(jìn)行依賴注入。
Struts采用struts-config.xml作為配置文件。在這個配置文件中,struts配置了Spring組件DelegatingRequestProcessor來讓Spring托管各個組件。代碼如下:
配置文件剩下的部分完全不需要再做其他改動,將Spring帶來的影響降到了最低。
當(dāng)前,基于Struts、Hibernate和Spring多框架整合方案及相關(guān)技術(shù)在一些系統(tǒng)項目開發(fā)得到廣泛應(yīng)用,其原因是這3個框架均為開源性框架,有著豐富而且免費的技術(shù)文檔資料和開發(fā)背景;架構(gòu)的整體設(shè)計采用了MVC模式,把表示層與業(yè)務(wù)層進(jìn)行了很好的分離。
由于使用maven進(jìn)行項目管理,系統(tǒng)可以方便的升級自己的函數(shù)庫并重新打包部署到遠(yuǎn)程服務(wù)器上。整個項目由于進(jìn)行了適當(dāng)?shù)姆謱?,項目對分布式開發(fā)有良好的支持。通過適當(dāng)?shù)母膭?,系統(tǒng)即可以支持遠(yuǎn)程函數(shù)調(diào)用(RMI),通過遠(yuǎn)程函數(shù)的方式,系統(tǒng)可以和其他的程序進(jìn)行通訊,而不再像舊版本程序直接共享數(shù)據(jù)庫。這樣做使得數(shù)據(jù)安全性大大增加,并且將教學(xué)系統(tǒng)的可擴展性提升到了一個新的高度。
[1]國家中長期教育改革和發(fā)展規(guī)劃綱要(2010-2020年).
[2]楊海斌.基于SSH框架的高校網(wǎng)站群內(nèi)容管理系統(tǒng)設(shè)計[J].軟件導(dǎo)刊,2009,(9).
[3]祝智庭.教育信息化:教育技術(shù)的新高地[J].中國電化教育,2001,(2):5-8.
[4]王磊杰,崔軍波,韓紅宇等.Java EE開發(fā)指南-基于Spring/Struts/Hibernate的實現(xiàn)[M].北京:北京人民郵電出版社,2007.
[5]李剛.輕量級J2EE企業(yè)應(yīng)用實戰(zhàn):Struts+Spring+Hibernate整合開發(fā)[M].北京:電子工業(yè)出版社,2007.
[6]Maven http://maven.a(chǎn)pache.org[EB/OL].
2010-05-30
劉英哲,工程師,學(xué)士,天津廣播電視大學(xué)現(xiàn)代教育技術(shù)中心(300191)。
責(zé)任編輯 柯 南
G40-057
B
1009—458x(2010)09—0069—04