摘要:本文給出了基于Spring+Struts+Hibernate框架構(gòu)建多層題庫系統(tǒng)的設(shè)計(jì)方案。并以組卷模塊的實(shí)現(xiàn)為例,較詳盡地說明了這三種框架在題庫系統(tǒng)實(shí)現(xiàn)上的應(yīng)用。結(jié)果表明,SSH框架的使用不僅簡(jiǎn)化了系統(tǒng)的開發(fā)過程,而且增強(qiáng)了系統(tǒng)的可擴(kuò)展性和可維護(hù)性,提高了代碼復(fù)用度和開發(fā)效率。
關(guān)鍵詞:題庫系統(tǒng);Spring;Struts;Hibernate;自動(dòng)組卷
中圖分類號(hào):TP311.52 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9599 (2012) 20-0000-02
1 系統(tǒng)開發(fā)技術(shù)
1.1 Struts框架。Struts框架是由Apache提供的一個(gè)開源框架,很好的實(shí)現(xiàn)了MVC設(shè)計(jì)模式。它運(yùn)用Struts標(biāo)簽和JSP頁面來生成視圖,ActionServlet類和用戶自定義Action則構(gòu)成了控制器,而模型主要由封裝了各種業(yè)務(wù)邏輯的JavaBean來實(shí)現(xiàn)。Struts框架設(shè)計(jì)理念是通過控制器將表示邏輯和業(yè)務(wù)邏輯解耦,以提高系統(tǒng)的可維護(hù)性、可擴(kuò)展性。用戶利用Struts框架不僅可縮短開發(fā)Web應(yīng)用的時(shí)間,而且能夠很好地實(shí)現(xiàn)各層之間的散耦合。
1.2 Hibernate框架。Hibernate是一個(gè)采用ORM(Object Relation Mapping)模式的優(yōu)秀的數(shù)據(jù)持久層框架,它的目標(biāo)是簡(jiǎn)化開發(fā)者在數(shù)據(jù)持久化方面的編程任務(wù)。它提供了從Java類到數(shù)據(jù)庫表的映射,也提供了數(shù)據(jù)查詢和恢復(fù)機(jī)制。ORM模式是指關(guān)系對(duì)象映射,它把對(duì)象映射到基于SQL的關(guān)系模型上,同時(shí)在JDBC方式上進(jìn)行輕量級(jí)對(duì)象封裝,開發(fā)人員只需按照面向?qū)ο蟮木幊趟枷雭聿僮鞒志没悓?shí)例,就可完成對(duì)數(shù)據(jù)庫表里的數(shù)據(jù)的操作,而不需要對(duì)JDBC進(jìn)行硬編碼,大大提高了系統(tǒng)的性能。同時(shí),Hibernate還幾乎支持所有流行的數(shù)據(jù)庫,可與大多數(shù)主流J2EE應(yīng)用服務(wù)器的應(yīng)用服務(wù)器良好集成。
1.3 Spring框架。Spring是一個(gè)輕量級(jí)J2EE框架,它通過依賴注入(Dependency Injection,DI)和基于(Aspect Oriented Programming,AOP)的聲明式事務(wù)管理為企業(yè)應(yīng)用的開發(fā)提供了一個(gè)很好的解決方案,Spring核心容器的主要組件是BeanFactory,BeanFactory負(fù)責(zé)對(duì)JavaBean配置、管理、創(chuàng)建。運(yùn)用Spring的依賴注入機(jī)制可以在程序運(yùn)行期間動(dòng)態(tài)為組件注入所需資源,而無需在編寫組件代碼時(shí)就加以指定,從而在相當(dāng)程度上降低了組件之間的耦合度。同時(shí)在Spring框架上可以很方便實(shí)現(xiàn)其它框架的整合,并且這些子框架之間可以彼此相互獨(dú)立。
1.4 SSH架構(gòu)整合。SSH是Struts-Spring-Hibernate的縮寫,整合SSH 框架就是使用3種框架中的最優(yōu)秀部分,Struts框架有成熟的標(biāo)簽庫,Web層主要由Struts框架實(shí)現(xiàn);而Spring框架同Struts框架能夠完美地結(jié)合,并在事務(wù)管理和依賴注入方面有著獨(dú)到之處,主要用于業(yè)務(wù)邏輯層;Hibernate使用O/R Mapping技術(shù)把模型和關(guān)系數(shù)據(jù)庫表進(jìn)行了映射,通過持久化類和表的映射關(guān)系實(shí)現(xiàn)了數(shù)據(jù)持久化層,用于數(shù)據(jù)持久層方面。因此,在項(xiàng)目中利用Struts框架作為系統(tǒng)的基礎(chǔ)框架,Hibernate框架來提供持久層支持,業(yè)務(wù)層用Spring支持。
2 題庫系統(tǒng)功能描述
題庫系統(tǒng)的操作對(duì)象主要有教師、學(xué)生和管理員三種。學(xué)生通過登錄網(wǎng)站可以完成在線考試、成績(jī)查詢及部分個(gè)人基本信息修改等操作。教師通過登錄后臺(tái)管理系統(tǒng)頁面后,可以進(jìn)行題庫信息管理、試卷管理、科目等基礎(chǔ)數(shù)據(jù)設(shè)置以及數(shù)據(jù)庫的備份等操作。管理員除了教師身份所具有的全部操作外,還可對(duì)用戶信息進(jìn)行管理。題庫系統(tǒng)總體功能結(jié)構(gòu)如圖1所示。整個(gè)題庫系統(tǒng)由考試管理子系統(tǒng)、題庫信息管理子系統(tǒng)、試卷管理子系統(tǒng)和系統(tǒng)設(shè)置子系統(tǒng)四個(gè)部分組成。
考試管理子系統(tǒng):主要對(duì)學(xué)生在線考試過程進(jìn)行管理,學(xué)生試卷提交以后,系統(tǒng)可以對(duì)客觀題進(jìn)行批卷,并提供試卷分析功能。
題庫信息管理子系統(tǒng):主要完成試題的增、刪、改、查功能,教師可以通過該子系統(tǒng)完成科目、知識(shí)點(diǎn)和題型的設(shè)置,并提供多種試題查詢方式。
試卷管理子系統(tǒng):完成組卷和套題管理。系統(tǒng)根據(jù)教師設(shè)定的科目、題型、題量以及難度系數(shù)等條件進(jìn)行抽題自動(dòng)生成試卷,同時(shí)還提供了教師手工組卷方式,對(duì)于生成但未發(fā)布的試卷可以進(jìn)行修改。對(duì)于發(fā)布的試卷系統(tǒng)可進(jìn)行管理。
系統(tǒng)設(shè)置子系統(tǒng):主要對(duì)系統(tǒng)一些基礎(chǔ)信息進(jìn)行設(shè)置,管理員通過用戶信息模塊可以添加、刪除、修改學(xué)生信息,設(shè)置教師權(quán)限;并能對(duì)試題庫進(jìn)行備份。
圖1 題庫系統(tǒng)總體功能結(jié)構(gòu)
3 基于Struts+Hibernate+Spring框架的自動(dòng)組卷模塊實(shí)現(xiàn)
自動(dòng)組卷模塊是依據(jù)教師給定的一些參數(shù)指標(biāo)來生成試卷。常見的參數(shù)主要有總分、題型、每種題型的題量、難度系數(shù)等。為了能使生成的試卷更能符合教師的需要,教師還可在系統(tǒng)自動(dòng)生成的試卷的基礎(chǔ)上進(jìn)行適當(dāng)?shù)恼{(diào)整。從自動(dòng)組卷模塊的擴(kuò)展性能出發(fā),給出如下部分實(shí)現(xiàn)代碼。
3.1 自動(dòng)組卷功能的表示層實(shí)現(xiàn)。表示層的實(shí)現(xiàn)是基于Struts框架來完成的。通過Struts框架來接收用戶在組建試卷頁面上設(shè)定的參數(shù)信息,分發(fā)用戶請(qǐng)求,調(diào)用相應(yīng)的業(yè)務(wù)邏輯并反饋結(jié)果。其中ActionServlet用來將用戶的請(qǐng)求委派給相應(yīng)的Action。而Action不進(jìn)行具體的業(yè)務(wù)處理,它負(fù)責(zé)向業(yè)務(wù)層傳遞參數(shù)并把各種事件委托給相應(yīng)的業(yè)務(wù)邏輯組件處理,業(yè)務(wù)邏輯組件模型則由管理服務(wù)組件的Spring容器通過依賴注入進(jìn)行提供。在Struts框架中通過配置文件struts-config.xml來描述Struts和Spring的整合以及各個(gè)Action的配置。
struts- config.xml對(duì)自動(dòng)組卷功能的配置項(xiàng)如下:
<! - - 自動(dòng)組卷功能所對(duì)應(yīng)的FormBean- - >
<! - - 自動(dòng)組卷功能所對(duì)應(yīng)的Action- - >
scope=\"request\" type=\"org.springframework.web.struts.DelegatingActionProxy\" validate=\"1\" >
其中ExamPaperForm負(fù)責(zé)接收組卷策略信息,并將信息傳遞給Action 的子類AddExamPaperAction進(jìn)行處理。
AddExamPaperAction的關(guān)鍵代碼如下:
public class AddExamPaperAction extends Action {
private PaperBizInterface paperBiz = 1; //通過Spring注入業(yè)務(wù)處理模型組件
public PaperBizInterface getPaperBiz () { ………}
public void setPaperBiz (PaperBizInterface paperbiz) {…….}
public ActionForward execute ( ){
try {
ExamPaperForm paperform = (ExamPaperForm)form;
paperBiz.creatpaper(paperform ); // 生成試卷。
…….
}catch(Exception e){}
…… }
3.2 自動(dòng)組卷功能的業(yè)務(wù)層實(shí)現(xiàn)。業(yè)務(wù)層的實(shí)現(xiàn)采用Spring框架完成。該層作為表示層和數(shù)據(jù)層進(jìn)行數(shù)據(jù)通信的中間層,負(fù)責(zé)封裝數(shù)據(jù)層提供的數(shù)據(jù)對(duì)象,并為表示層提供功能接口。在該模塊中定義了生成試卷功能的業(yè)務(wù)接口PaperBizInterface和該接口的實(shí)現(xiàn)類PaperBizImpl。通過在PaperBizImpl類中定義了creatPaper() 方法來完成試卷的生成。
3.3 自動(dòng)組卷功能的持久層實(shí)現(xiàn)。該層使用Hibernate框架技術(shù)來實(shí)現(xiàn)。在實(shí)現(xiàn)的過程中,需要配置hibernate.cfg.xml文件定義連接數(shù)據(jù)庫的一些屬性以及類與表之間的映射定義,hibernate根據(jù)這些屬性來連接數(shù)據(jù)庫,間接實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的操作。組卷模塊中PaperDaoInterface接口定義了用戶訪問數(shù)據(jù)的統(tǒng)一接口。其實(shí)現(xiàn)類PaperDAOHibimpl則封裝了通過Hibernate 訪問具體表獲取持久化對(duì)象的CRUD 操作,用戶通過調(diào)用PaperDAOHibimpl類中相應(yīng)方法,即可方便的完成試卷的生成操作。PaperDAOHibimpl類的部分代碼如下:
public class PaperDAOHibimpl extends HibernateDaoSupport implements PaperDaoInterface {
public List search(ExamPaperForm paperform) {
… …
List examList = super.getHibernateTemplate().findByExample(paperform);
… …
return examList;
}
public void save(Ex_paper ex_paper)
{ super.getHibernateTemplate().save(ex_paper);}
… …
}
由上可知,運(yùn)用SSH技術(shù)在實(shí)現(xiàn)自動(dòng)組卷功能過程中,只需對(duì)相關(guān)的Action進(jìn)行編碼,通過Action調(diào)用相應(yīng)的業(yè)務(wù)邏輯,并通過hibernate完成對(duì)數(shù)據(jù)庫的操作,對(duì)于各層要調(diào)用的組件,在編碼時(shí)只需通過相應(yīng)的接口類型表示就可以,這樣降低了組件之間的耦合度,提高了系統(tǒng)靈活性。
5 結(jié)束語
運(yùn)用Spring、Struts和Hibernate三種框架技術(shù),本題庫系統(tǒng)已經(jīng)基本完成。實(shí)踐證明,SSH架構(gòu)可以很好地實(shí)現(xiàn)系統(tǒng)表現(xiàn)層、業(yè)務(wù)層及數(shù)據(jù)持久層的分離,簡(jiǎn)化了系統(tǒng)的開發(fā)過程,使系統(tǒng)具有較高的運(yùn)行效率、良好的可擴(kuò)展性。
參考文獻(xiàn):
[1]謝辛.J2EE輕量級(jí)SSH架構(gòu)無縫集成的研究[J].科技信息,2009(1).
[2]郭宏杰.基于SSH 的物流信息系統(tǒng)的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)與數(shù)字工程,2009(3).
[3]李剛.輕量級(jí)J2EE 企業(yè)應(yīng)用實(shí)戰(zhàn)[M].北京:電子工業(yè)出版社,2007.