摘要:傳統的基于B/S模式的題庫系統開發具有頁面代碼冗余度高,功能模塊可重用性低,維護困難等問題。給出題庫系統的基本架構實現方案,提出采用Struts+Hibernate框架的題庫系統設計思想,根據Struts和Hibernate優勢互補的特點,研究MVC模型和持久層的整合方法。以自動組卷模塊的研究為例,驗證系統各層內部的緊耦合,層層之間的松散耦合,實現系統的可重用性、靈活性以及增強系統的擴展性。
關鍵詞:struts+ hibernate架構;MVC框架;自動組卷模塊;擴展性
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)25-1473-03
The Designation and Realization of Item Pool System Based Struts + Hibernate Framework
JIANG Jiao-li, JIANG Yong-ping, HUANG Feng-ai
(Information Engineering of Guangdong University of Technology, Guangzhou 510006,China)
Abstract:The traditional B/S item pool system has the issue that page code redundance , lowlly reusability of the function module,maintained hardly and so on.This article proposedthe design conception of item pool system basedStruts + Hibernate framework, According to their superiority supplementary characteristic,Completedthe MVC model and the lasting level conformity.Take the automatic group volume module realization as an example,conform that it has guaranteed system each internal close coupling well, Layer upon layer between loose coupling, Simultaneously strengthened the code reusability and the flexibility, further strengthens the system the extension.
Key words: Struts+Hibernate construction; MVC framework; auto-composing test paper module; expansibility
1 引言
隨著計算機和網絡的普及,國內外目前已經存在很多比較成熟的認證考試,比如:我國的計算機等級考試,美國的GRE,托福考試等。為了順應計算機網絡時代的發展,考核方式逐步趨向無紙化,解決高校課程內容繁多,教學資源要求更豐富的難題,學校必須提高自身的考核方式,擁有自己的題庫系統。而系統的實現技術的選擇也是非常重要的。其中利用比較成熟的具有跨平臺性的Java技術實現是首選,因為J2EE體系結構提供中間層集成框架能滿足無需太多費用而又需要高可用性、高可靠性以及可擴展性的應用的需求。本文所介紹的題庫系統主要考慮到:傳統的基于B/S模式的題庫系統開發具有頁面代碼冗余度高,功能模塊可重用性低,擴展性差,維護困難等問題;在軟件設計中采用基于MVC模式的Struts+Hibernate框架技術實現整個系統。本文將以題庫系統的設計為例,分別介紹Struts和Hibernate框架,重點分析兩個框架的優勢互補的特點,并以題庫系統的架構設計來完成Struts+Hibernate框架的整合,最后詳細介紹了自動組卷功能模塊的實現以及解決的問題,說明Struts和Hibernate框架在題庫系統實現上的應用。
2 題庫系統功能描述
題庫系統根據實際需要將實際用戶分為三類權限管理:管理員、教師、學生。總系統架構分為兩大模塊:后臺教師管理模塊、前臺考試模塊。題庫系統的總體框架結構圖1所示。
題庫系統前臺用戶主要是學生,學生登錄前臺可以完成在線考試、考卷提交、考試成績查詢、修改用戶基本資料等操作。
本系統最重要的是后臺管理模塊的實現,管理員登陸后臺管理界面后,可進行用戶信息管理、題庫信息管理、考試試卷管理、考務信息管理、其他管理模塊的操作,下面對各模塊的基本功能進行大概介紹。
用戶信息管理模塊:管理員可添加、刪除、修改學生信息;設置教師權限,使管理員和教師都能對題庫和其他基本功能進行操作。
題庫信息管理模塊:這個模塊主要用來操作單選題,多選題、判斷題、填空題、簡答題的添加、刪除和修改,并可以根據指定專業、知識點進行精確題目查詢。
考試試卷管理模塊:主要是根據不同專業,難度系數的設定等條件抽題生成試卷,并對生成并且未發布試卷進行修改,同時還支持套題管理。
考務信息管理模塊:管理員/教師在考試前對生成試卷狀態進行控制,發布、中止考試試卷;考試結束后對客觀題進行評分,系統自動完成主觀題和客觀題的總分相加,得出總分并生成考生考試情況統計供管理員/教師查詢。
其他管理模塊:這個模塊主要用來添加班級信息和考試知識點信息。
3 系統開發技術運用及架構整合
3.1 基于MVC模式的struts+hibernate框架設計策略
MVC(Model-View-Controller)設計模式將系統分成模型層、視圖層、控制層三層,大大減少在設計系統中的代碼的“冗余度”,降低了頁面顯示、邏輯控制、數據處理的耦合性。目前有很多可供MVC使用的web框架,Struts就是其中的一種,相比較其他框架而言,Struts是一種開源框架,它能使你的代碼具有高度的平臺無關性,提供了對開發MVC系統的底層支持,它的目的是為了幫助你減少在運用MVC設計模型來開發Web應用的時間。利用Struts來開發能夠很好地實現各層之間的散耦合[2-3]。
Hibernate是一個采用ORM(Object Relation Mapping)模式的數據持久層框架。它不僅提供了從JAVA類到數據庫表的映射,也提供了數據查詢和恢復機制。ORM模式是指關系對象映射,用類中的方法來操作SQL語句,使得一切操作皆對象。Hibernate本質上還是包裝了JDBC來進行數據庫操作,不需要對JDBC的硬編碼實現,優化了對JDBC的調用,大大提高了系統的性能。同時,Hibernate還幾乎支持所有流行的數據庫,可與大多數主流J2EE應用服務器的應用服務器良好集成[4]。
由于Struts在業務邏輯層沒有提供持久層的支持,業務邏輯層作為視圖層和數據庫的中間件,它所提供的Struts類需要處理業務邏輯的同時,還直接與關系數據庫連接,這與使用javabean封裝數據的編程思想不協調,而Hibernate的優點便可以完全彌補Struts這一缺陷[3]。Hibernate通過對一些配置文件的配置,完成整體運作流程設置,然后創建POJO類(對應數據表的對象),完成持久層的設置;當用戶發出HTTP表單請求時,業務邏輯層從視圖層和持久層讀取數據,收到POJO封裝的數據后,調用DAO接口,實現數據查詢、刪除、更新的持久化操作。使用Struts和Hibernate整合后的J2EE框架能很好地實現各層間的緊耦合,層與層之間的松散耦合,Hibernate使用HQL語句通過減少對數據庫訪問量來大大地提高了系統的性能,二者的結合減少了模型層的開發難度系數,使系統具有較強的可維護性和靈活性[4]。Struts和Hibernate的MVC實現框圖如圖2所示。
3.2 基于struts+hibernate架構的題庫系統實現策略
題庫系統的實現策略是題庫框架結構的核心所在,考慮到系統功能的多樣性需求,系統開發必需具備很好的擴展性和可維護性,同時學生在考試時同時對試題庫的訪問量之大,必定要避免數據庫訪問瓶頸的出現。同時,由于傳統SQL語言要對數據持久化操作時必須先執行對相關記錄查詢,然后再對數據進行增、刪、改操作;而使用Hibernate作為持久層,使用HQL訪問數據庫,持久化操作便跳過查詢,而直接對數據進行增、刪、改操作,可提高系統性能[5-6]。鑒于以上原因,我們所開發的題庫系統摒棄傳統的純JSP+javabean編碼方式,采用Struts和Hibernate架構來實現,基于SH框架的題庫系統具有以下特點:
1)系統更加具有可重用性和靈活性。系統實現中,功能模塊的重用率是非常之高,使用MVC模式設計能實現功能模塊的封裝,隨時調用功能模塊。保證層內間的緊耦合,層與層之間的松散耦合。
2)系統具備很強的移植性。利用Java開發的題庫系統,可以在不同操作系統上安裝實現,為今后的跨平臺移植做好準備。
3)系統具備很好的擴展性。自動組卷模塊是系統開發的重點,組卷的質量決定了題庫系統的質量,為了能讓考卷的考核結果和教師的期望值相匹配,需要在這個模塊加以算法研究,而基于SH框架的實現能方便開發人員進一步完善系統。
4 基于struts+hibernate架構的自動組卷模塊實現
自動組卷模塊主要是根據教師所給的難度系數,期望平均分,總分,題量等參數指標來進行試卷的生成,為了能讓生成的試卷能更科學合理,往往需要在后期維護上對此功能模塊進行不斷研究完善,從自動組卷模塊的擴展性能出發,給出如下部分實現代碼。
4.1 Struts控制自動組卷功能業務邏輯實現
Struts的控制作用主要是通過配置ActionServlet來實現,既通過配置struts-config.xml和web.xml來實現。用戶根據頁面提示設定各種題量以及分數、難度系數、考試時間等參數后,點擊生成試卷鏈接,便根據struts-config.xml配置信息觸發addPaperAction操作。struts-config.xml對自動組卷功能的配置項如下:
<!--自動組卷功能所對應的Form-->
<form-beans> <form-beantype=\"org.exam.business.paper.AddPaperForm\" name=\"addPaperForm\"/> </form-beans>
<!--自動組卷功能所對應的Action-->
<action input=\"/admin/paper/CreatePaper.jsp\"name=\"addPaperForm\" type=\"org. exam.business.paper.AddPaperAction\"validate=\"true\"path=\"/admin/paper/addPaperAction\"scope=\"request\">
<forwardpath=\"/admin/paper/sc_PaperAction.do\"name=\"sc_paperaction\" /></action>
其中addPaperForm負責接收組卷策略信息,并將填充的數據進行驗證,如果驗證通過則將參數傳遞給Action的子類AddPaperAction,否則將生成錯誤并自動添加到ActionErrors中,并在視圖層表現出來。AddPaperAction的實現如下:
publicclassAddPaperAction extendsAction {
public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest servletRequest,HttpServletResponse servletResponse){
……
try { Paper paper = newPaper(); // 實例化試卷的操作類類
Ex_paperex_paper= pjBeanUtil.convert((AddPaperForm)form);// 將選中的試題轉換為試卷類
paper.creatpaper( ex_paper );// 生成試卷。
}catch(Exception e){
System.out.println(“發生錯誤”+e.getMessage()); } // 捕捉錯誤異常
return (actionMapping.findForward(\"sc_paperaction \"));// 跳轉到成功生成試卷頁面
} }
4.2 hibernate控制自動組卷功能持久層實現
由上面編程實現可知,真正實現業務邏輯操作的是Paper類,通過調用它的方法creatPaper() 來完成試卷的生成,其中Ex_paper為POJO類,與數據庫里面的表ex_paper構成映射關系,下面是creatPaper()方法的部分實現:
PublicvoidcreatPaper ( Ex_paperex_paper ) throws Exception
{……
PaperDAOpaperDao = new PaperDAOImpl();// 實例化試卷操作類
PaperDao.addPaper( ex_paper );// 調用添加試卷方法
……}
PaperDAO接口的是用來實現試卷的插入,查詢,刪除操作的,這段編程通過對PaperDAO接口的實現,完成添加試卷功能。
由上可知,要實現自動組卷的功能,只需要在Action中調用相應的java代碼,并通過hibernate連接數據庫,完成數據的讀取,而無須將具有相同功能的代碼寫在每一個方法中,從而加強了系統功能的可重用性和靈活性。而對組卷策略的研究以及算法實現,亦可通過對createpaper()方法的實現加以修改補充,很好完成系統的擴展性。
5 結束語
本題庫系統的架構搭建已經基本完成,并在后續開發中效果明顯。基于對題庫系統主要性能參數的研究,探討采用Struts+Hibernate架構實現,將系統分為視圖層、控制層、模型層、持久層、數據層,用JSTL標準標簽庫設計頁面,整個頁面代碼無中文出現;利用Struts的MVC的模式設計,實現層與層之間的松散耦合;利用hibernate將模型層和數據層很好地銜接,使層內功能緊密耦合。特別介紹基于SH框架的題庫系統中自動組卷模塊的具體應用,加強系統的擴展性和靈活性,更加方便程序員通過系統架構的擴展功能來實現整個復雜的題庫各功能模塊的支持服務。
參考文獻
[1] 馮國仕,李志蜀.基于Struts與Hibernate集成構架的項目管理系統[J].計算機應用,2005,25(8):1884-1889.
[2] 任文娟,王華.基于Struts和Hibernate框架的Web應用的設計與實現[J].微計算機信息,2006,22(9):184-187.
[3] 李剛.輕量級J2EE企業應用實戰[M].北京:電子工業出版社,2007.
[4] 蔡雪燾.Java開發利器Hibernate開發及整合應用大全[M].北京:清華大學出版社,2006.
[5] 夏平平,楊威.基于J2EE的電力行業考試系統數據持久層的Hibernate解決方案[J].計算機時代,2006(8):47-48.
[6] 郭新順,劉雪芬,鄭戟明.無紙化考試系統研制[J].計算機應用與軟件,2005,22(8):131-133.