□ 劉英哲
基于SSH框架的遠程教學平臺的實現
□ 劉英哲
本文介紹了目前主流遠程教學平臺存在的缺陷,并提出了以SSH框架技術為支撐構架遠程教學平臺的設計方案。平臺系統在設計開發過程中使用了Maven進行項目管理,降低了系統各個模塊之間的耦合度,使得代碼的復用性大大提高,同時增強了系統的穩定性和可擴展性。
遠程教學平臺;Spring;Hibernate;Maven
隨著信息技術特別是網絡技術和多媒體技術的發展,我國遠程教育發展已經進入了新的歷史時期。構建靈活開放的終身教育體系,大力發展現代遠程教育,建設以衛星、電視和互聯網等為載體的遠程開放繼續教育及公共服務平臺[1],已經成為未來十年遠程教育發展的奮斗目標。作為遠程教育主要載體的遠程教學平臺因其設計上的缺陷而暴露出越來越多的問題,主要體現在三個方面:首先是教學平臺系統響應速度較慢;其次是系統的界面較為單一,用戶缺乏學習興趣,導致訪問量降低;第三是系統在軟件設計上結構較為簡單,各個部分代碼耦合性較強。這些實際存在的問題制約了當前遠程教育的快速發展。
目前,數以千萬計的用戶正借助網絡手段進行遠程學習。而隨著用戶數量的增加,教學平臺的并發訪問數也不斷攀升,這就導致單位時間內需要同時處理的業務數量大幅度增加,因此要求教學平臺有更快的處理速度。分析表明,網絡程序處理速度的快慢主要依賴于數據庫訪問層部分,因為數據庫的訪問是一個較為復雜的流程,首先需要建立到數據庫的連接,然后提供用戶名密碼等待數據庫認證,認證成功后,要發送SQL語句等待數據庫語法校驗,成功后數據庫將符合要求的數據返回給網絡程序,最后還需要關閉數據庫的連接。因此,如何降低數據庫訪問次數成為網絡程序需要解決的關鍵問題。目前的主要解決方案有兩種:第一種就是建立集群,提高數據庫服務器的處理性能。這種方案的優點是實行簡單,程序不需要修改大段的代碼,只要設置好數據庫的負載均衡就能夠完成。然而這種方案的缺點就是造價較高,需要耗費大量的資金。第二種方案就是在網絡程序的數據訪問層加上數據庫訪問緩存,將對數據庫訪問的結果緩存在內存中,程序在需要數據的時候首先訪問緩存,如果有相應的數據就不再連接數據庫,避免不必要的開銷。這個方案從根本上減少了數據庫訪問的次數,不需耗費額外資金,同樣可以達到提升系統處理速度的目的。
作為教學平臺組成部分的界面設計也是評估系統性能重要指標之一。近年來各個網頁瀏覽器之間的標準逐漸統一,綜合使用CSS+HTML+JavaScript的XHTML技術逐漸流行,瀏覽器標準中對文檔對象模型的支持還有異步加載XML的XMLHttpRequest對象使得異步加載網頁成為了可能,同時減少了服務器和瀏覽器之間的通訊量,使程序依舊能維持原來的功能。
目前教學平臺的后臺代碼設計中經常摻雜著各種邏輯業務的控制邏輯甚至是直接訪問數據庫的語句,這也是系統整體性能下降的因素之一。復雜的邏輯設計使功能固化嚴重,結構難以修改,如果想要添加或者修改功能,就必須要讀懂頁面層、業務邏輯層和數據訪問層的代碼。隨著項目規模變大,修改的難度也會大大增加。
通過以上分析,理想的遠程教學平臺應能夠同時滿足以下幾個條件:模塊化,即將程序劃分成若干模塊,各個模塊之間的職責清晰,使程序結構一目了然;界面層既能支持傳統的網頁交互式瀏覽,也能提供基于AJAX的異步瀏覽模式;程序可擴展性強,能夠根據實際需要增加或修改流程。
1.Maven
Maven是基于項目對象模型(POM),可以通過一小段描述信息來管理項目的構建、報告和文檔的軟件項目管理工具。同一般的自動編譯軟件相比,它主要有以下兩個優點。
(1) Maven具有默認的項目文件結構的規則,不需要編寫額外的配置文件來說明如何編譯、測試和對項目代碼進行打包。由于項目都遵循了默認的規則,程序員可以在較短的時間內熟悉項目的規則,而且任何IDE都可以對項目進行編輯,程序員可以使用各自擅長的編程軟件。
(2)Maven對項目進行建模,將項目的構建劃分為若干生命周期,不需要對項目進行任何說明,只需要簡單的指令就可以自動進行代碼測試、項目打包和自動部署等功能。
本文的系統使用了Maven多模塊設計方式,將系統不同的功能劃分成單獨的項目,各個項目之間的依賴由Maven進行維護,這就在更大的程度上隔離了各個模塊的代碼,使得項目維護以及單元測試更加快捷方便。
2.MVC結構
系統主體結構采用MVC架構,MVC指的是模型(Model)、視圖(View)和控制器(Controller)三個部分。這三個部分的聯系方式如圖1所示。

使用MVC的目的是將模型和視圖的實現代碼分離,從而使同一個程序可以使用不同的表現形式。在本系統中,為了今后能夠開發出Web Service等其他新的表現形式,最便捷的方式就是能夠重用原有的業務邏輯和數據訪問代碼,如果系統使用了MVC的架構,服務層和數據表現層是相互分離的,那么就可以方便地在Web Service中調用原來的服務層代碼,大大減少了重復開發工作。
3.SSH框架
SSH是Struts+Spring+Hibernate 3種技術的有機融合,是目前應用最廣泛的J2EE架構[2]。Struts是目前較為流行的基于MVC的框架,它主要充當了控制器的角色,負責接收用戶的輸入、調用服務層的方法后將得到的結果返回給數據表現層。Hibernate充當了模型的角色,它使用XML文件將數據庫的字段和實體類字段之間的關系對應起來,將關系型數據庫的數據在程序中直接變為程序中的對象。除此以外,Hibernate提供了功能強大的事務管理和緩存機制,教學平臺的業務邏輯層通過Hibernate的緩存訪問數據可以減少數據庫的開銷,提高程序的處理速度。Spring在程序中充當了裝配工廠的角色,通過XML配置文件將各個子層的實例組織起來,將各個子層之間的依賴關系集中表現在配置文檔中,使得系統結構更加清晰合理。
遠程教學系統按用戶身份不同主要分為兩大子系統:教師子系統和學生子系統。教師子系統為教師提供了日常教學所需要的功能。教師通過資源管理模塊可以查看自己所負責課程的所有資源,對過時的資源進行及時的更新或刪除,使學生隨時可以接觸到該門學科的最新進展。相對于傳統的以課本為主的教學方式,教師可以在教學平臺上隨時添加各種類型的文本、圖片甚至視頻文件來提高學生學習的興趣,進而加深學生對該課程的理解。教學管理界面不僅為教師提供了學生在學習平臺上的學習記錄,還提供教師的行為記錄,方便教師隨時調整教學進度。教師在論壇中可以發起討論,和學生互動,解答學生在學習中遇到的問題。
學生功能包含資源瀏覽、資源檢索和論壇應用。學生除了可以按課程檢索到相應的資源,還可以通過資源訪問量、資源最近更新日期等條件檢索自己感興趣的資源。學生可以在論壇中和其他同學、老師一起討論課程中的問題,發表自己的觀點。
系統還包含了一些教師與學生共用的功能,包括收藏夾、個人信息維護、站內所搜等功能,便于用戶更方便的使用系統其他功能。圖2分別為教師子系統和學生子系統模塊設計邏輯圖。
本系統采用MVC架構,因此在設計上被劃分成若干子層,各個子層之間相互獨立,使用接口對實現的細節進行封裝。系統分層示意圖如圖3所示。


系統在實現時使用Maven進行項目管理,將每一層都劃分成獨立的項目,然后在各個項目之間建立依賴關系。各個子項目之間的關系如圖3所示。
Maven將系統抽象成為項目模型(POM),首先建立一個父項目,對各個項目共用的屬性進行匯總,例如測試函數庫、編譯器設置等。配置文件部分代碼如下:


配置文件向Maven闡述了該項目所需要的函數庫的名稱和版本,以及該函數庫的作用。
系統的主要模塊從下至上分別為數據持久層、系統服務層、界面表現層。數據持久層負責與數據庫進行交互,將讀取到的關系型數據庫的數據轉換成系統能夠處理的業務對象。這一部分主要使用了Hibernate進行對象關系映射(ORM),用XML文檔將數據庫的字段映射為各個實體類的屬性。系統服務層調用數據持久層的服務并使用各種業務流程處理得到的數據,服務層也承擔著負責劃分事務界限的任務。數據服務層將處理好的數據提交到界面表示層,表示層只負責將數據顯示在模板頁面上和將用戶輸入的數據傳遞到數據服務層上,它不對數據進行任何處理。
下面以管理員模塊中用戶管理系統為例,具體分析Struts+Hibernate+Spring多框架在系統中的應用。
此部分主要功能是對用戶進行增加、刪除以及修改權限。例如要增加一個系統用戶,輸入用戶信息并提交后,通過Struts調用AddUserAction的execute方法,業務層Service接口的實現類,再間接調用DAO接口的實現類。DAO接口的實現類封裝了通過Hibernate訪問數據表對應持久化對象的CRUD操作。以下給出Spring的applicationContext.xml配置文件部分代碼段:

通過以上配置代碼,spring將負責界面層的strutsAction和負責服務層的userSerivces聯系在了一起,strutsAction在自己的代碼中設置了userServices這一屬性,由Spring進行依賴注入。
Struts采用struts-config.xml作為配置文件。在這個配置文件中,struts配置了Spring組件DelegatingRequestProcessor來讓Spring托管各個組件。代碼如下:

配置文件剩下的部分完全不需要再做其他改動,將Spring帶來的影響降到了最低。
當前,基于Struts、Hibernate和Spring多框架整合方案及相關技術在一些系統項目開發得到廣泛應用,其原因是這3個框架均為開源性框架,有著豐富而且免費的技術文檔資料和開發背景;架構的整體設計采用了MVC模式,把表示層與業務層進行了很好的分離。
由于使用maven進行項目管理,系統可以方便的升級自己的函數庫并重新打包部署到遠程服務器上。整個項目由于進行了適當的分層,項目對分布式開發有良好的支持。通過適當的改動,系統即可以支持遠程函數調用(RMI),通過遠程函數的方式,系統可以和其他的程序進行通訊,而不再像舊版本程序直接共享數據庫。這樣做使得數據安全性大大增加,并且將教學系統的可擴展性提升到了一個新的高度。
[1]國家中長期教育改革和發展規劃綱要(2010-2020年).
[2]楊海斌.基于SSH框架的高校網站群內容管理系統設計[J].軟件導刊,2009,(9).
[3]祝智庭.教育信息化:教育技術的新高地[J].中國電化教育,2001,(2):5-8.
[4]王磊杰,崔軍波,韓紅宇等.Java EE開發指南-基于Spring/Struts/Hibernate的實現[M].北京:北京人民郵電出版社,2007.
[5]李剛.輕量級J2EE企業應用實戰:Struts+Spring+Hibernate整合開發[M].北京:電子工業出版社,2007.
[6]Maven http://maven.apache.org[EB/OL].
2010-05-30
劉英哲,工程師,學士,天津廣播電視大學現代教育技術中心(300191)。
責任編輯 柯 南
G40-057
B
1009—458x(2010)09—0069—04