丁振凡
(華東交通大學(xué)信息工程學(xué)院,江西 南昌 330013)
基于Spring的網(wǎng)絡(luò)考試系統(tǒng)的服務(wù)設(shè)計(jì)*
丁振凡
(華東交通大學(xué)信息工程學(xué)院,江西 南昌 330013)
在分析網(wǎng)絡(luò)考試流程的基礎(chǔ)上,對(duì)學(xué)生操作部分的各環(huán)節(jié)進(jìn)行服務(wù)建模,對(duì)考試控制、組卷、試卷顯示、閱卷、考試登記、考試查閱分析等進(jìn)行服務(wù)設(shè)計(jì).系統(tǒng)實(shí)現(xiàn)采用AJAX結(jié)合Spring技術(shù),給出了應(yīng)用的服務(wù)調(diào)用與應(yīng)用整合思路.討論了IOC容器Bean的部署,以及應(yīng)用服務(wù)間利用Json進(jìn)行試卷包裝傳遞的方法.
網(wǎng)絡(luò)考試系統(tǒng);服務(wù)建模;AJAX;Spring;Java Bean;Json
面向服務(wù)以其出色的互操作、松耦合等特性成為網(wǎng)絡(luò)應(yīng)用的熱點(diǎn).Spring作為一個(gè)優(yōu)秀的輕量級(jí)軟件開(kāi)發(fā)框架,在面向服務(wù)的設(shè)計(jì)與集成上提供了良好的支持,Spring MVC支持REST風(fēng)格的服務(wù)設(shè)計(jì),Spring WebFlow支持服務(wù)流的組合,Spring Integration支持基于消息的服務(wù)應(yīng)用集成[1].網(wǎng)絡(luò)考試是網(wǎng)絡(luò)教學(xué)平臺(tái)中較為復(fù)雜的一個(gè)部分,完整系統(tǒng)包括教師操作和學(xué)生操作2部分,教師操作部分包括考試設(shè)置(考試時(shí)間、組卷參數(shù)、考試進(jìn)入控制等)、考試用戶監(jiān)控、考試分析(學(xué)生成績(jī)分析、解答分析)等.學(xué)生操作部分涉及考試過(guò)程交互各環(huán)節(jié),通常是考試系統(tǒng)的設(shè)計(jì)難點(diǎn),筆者擬就考試系統(tǒng)中學(xué)生操作部分的面向服務(wù)設(shè)計(jì)進(jìn)行探討.
學(xué)生考試過(guò)程涉及眾多環(huán)節(jié),用UML活動(dòng)圖表示如圖1所示.首先是檢查是否允許學(xué)生進(jìn)入考試;其次是從試題庫(kù)抽取試題組卷;第三是試卷按何種方式顯示,包括如何獲取學(xué)生解答;第四是學(xué)生交卷后的考試評(píng)分處理;最后考試結(jié)束后的信息登記及反饋.
文中介紹的網(wǎng)絡(luò)考試主要是面向程序設(shè)計(jì)語(yǔ)言類課程,是從題庫(kù)抽題組卷.試題庫(kù)有單選、多選、是非、單項(xiàng)填空、多項(xiàng)填空、編程、改錯(cuò)共7大類試題.其中,多項(xiàng)填空可安排寫(xiě)運(yùn)行結(jié)果和程序完型填空.
試題庫(kù)的試題按知識(shí)點(diǎn)進(jìn)行組織,每類試題有獨(dú)立的數(shù)據(jù)庫(kù)表格,主要字段有題號(hào)、內(nèi)容、答案、知識(shí)點(diǎn)、難度等.
圖1 考試過(guò)程的UML活動(dòng)圖
系統(tǒng)采用面向服務(wù)的應(yīng)用開(kāi)發(fā)模式,整體框架采用AJAX和Spring技術(shù)實(shí)現(xiàn),如圖2所示.AJAX主要實(shí)現(xiàn)客戶方的交互,Spring實(shí)現(xiàn)服務(wù)方的功能.Spring的服務(wù)設(shè)計(jì)采用REST風(fēng)格,服務(wù)業(yè)務(wù)邏輯部署為Bean形式,實(shí)現(xiàn)對(duì)象最大程度的共享,提高整個(gè)應(yīng)用的效率.在視圖層采用JSP模板,利用JSTL模板語(yǔ)言實(shí)現(xiàn)模型數(shù)據(jù)的顯示處理.系統(tǒng)安全訪問(wèn)控制采用Spring Security實(shí)現(xiàn)[2].系統(tǒng)角色分管理員、教師、學(xué)生和匿名帳戶.系統(tǒng)采用XML配置安全策略,通過(guò)基于角色和URL模板匹配的訪問(wèn)控制策略實(shí)現(xiàn)對(duì)服務(wù)的訪問(wèn)控制.一般情況下,Spring的REST服務(wù)返回結(jié)果用視圖來(lái)體現(xiàn),通過(guò)控制器、模型、視圖的配合來(lái)展示服務(wù)功能.但部分服務(wù)也采用返回結(jié)果為消息的服務(wù)編寫(xiě),在客戶方,采用AJAX技術(shù)調(diào)用服務(wù),并分析服務(wù)返回的消息,在網(wǎng)頁(yè)中用DHTML技術(shù)顯示結(jié)果[3].
服務(wù)設(shè)計(jì)應(yīng)采用規(guī)范化的服務(wù)契約,具有無(wú)狀態(tài)、松耦合等特點(diǎn),同時(shí)又體現(xiàn)抽象性、重用性、自治性等原則.“無(wú)狀態(tài)”意味著服務(wù)對(duì)象所依賴的變化信息應(yīng)通過(guò)服務(wù)的方法參數(shù)提供,而不能作為服務(wù)對(duì)象的屬性.在Spring容器中每個(gè)服務(wù)均表現(xiàn)為Bean的形式,應(yīng)用訪問(wèn)效率高.
面向服務(wù)設(shè)計(jì)的一個(gè)關(guān)鍵是服務(wù)特征的提取.服務(wù)特征有流程特征、功能特征、信息特征、組織特征和資源特征[4].服務(wù)特征間的依賴關(guān)系可分為靜態(tài)依賴和動(dòng)態(tài)依賴.通過(guò)分析學(xué)生考試所涉及的功能和流程,將與考試相關(guān)的服務(wù)定義如表1所示.各服務(wù)之間的調(diào)用關(guān)系見(jiàn)圖3,服務(wù)處理結(jié)果通常有多分枝,例如考試進(jìn)入檢查服務(wù),在發(fā)現(xiàn)學(xué)生不允許進(jìn)入時(shí)將顯示相應(yīng)信息,允許進(jìn)入時(shí)才進(jìn)入組卷環(huán)節(jié).
表1 學(xué)生操作部分與考試相關(guān)的服務(wù)
圖3 各服務(wù)在學(xué)生考試過(guò)程中的調(diào)用流程
值得一提的是,在很多服務(wù)方法中均需要試卷作為參數(shù).實(shí)現(xiàn)試卷在應(yīng)用各功能之間傳遞有多種方法,例如采用session對(duì)象、采用Cookie變量,本系統(tǒng)采用URL參數(shù)傳遞,其好處是不用消耗客戶方和服務(wù)方的資源.但采用URL傳遞試卷對(duì)象需要將對(duì)象轉(zhuǎn)換為字符串傳遞,否則,對(duì)象不能直接作為URL參數(shù),本系統(tǒng)采用Google的Gson工具提供的方法實(shí)現(xiàn)對(duì)象到串的變換與反變換[5].
各類服務(wù)均涉及對(duì)數(shù)據(jù)庫(kù)的操作訪問(wèn).本系統(tǒng)通過(guò)Spring JdbcTemplate提供的方法訪問(wèn)數(shù)據(jù)庫(kù)[6].由于系統(tǒng)連接的數(shù)據(jù)庫(kù)只有1個(gè)數(shù)據(jù)庫(kù),因此將與數(shù)據(jù)源連接的jdbcTemplate定義為一個(gè)Bean,其他Bean要訪問(wèn)數(shù)據(jù)庫(kù)只要通過(guò)屬性依賴建立與jdbcTemplate的關(guān)聯(lián)即可.以下為數(shù)據(jù)源“dataSource”的JdbcTemplate對(duì)應(yīng)Bean配置,數(shù)據(jù)源的配置取決于具體的數(shù)據(jù)庫(kù):
3.1 考試控制服務(wù)
該服務(wù)的功能主要是檢查學(xué)生是否有權(quán)進(jìn)入考試,進(jìn)入限制有3種:(1)禁止進(jìn)入;(2)每生1次,用于正規(guī)考試;(3)可多次進(jìn)入,用于訓(xùn)練式測(cè)試.
考試進(jìn)入控制服務(wù)邏輯的主要方法有:
3.2 考試組卷服務(wù)
組卷服務(wù)是根據(jù)組卷方式和組卷參數(shù)按組卷算法產(chǎn)生試卷.系統(tǒng)提供了2種組卷方式:一種是考試時(shí)隨機(jī)組卷,每個(gè)考生試卷不同,可減少作弊;另一種是隨機(jī)抽取已組卷,學(xué)生考試時(shí)從預(yù)先組好的多份試卷中隨機(jī)選取1份.組卷參數(shù)包括考試范圍、各類試題數(shù)量要求、試卷難度等.組卷結(jié)果用試卷對(duì)象表示,包括各類試題中被抽取到的試題編號(hào)構(gòu)成的數(shù)組.
3.2.1 組卷服務(wù)的方法設(shè)計(jì) 組卷服務(wù)包括組卷方式、組卷參數(shù)屬性,在服務(wù)初始化時(shí)將從數(shù)據(jù)查詢到組卷方式和組卷參數(shù),實(shí)現(xiàn)屬性的設(shè)置.當(dāng)教師更改組卷參數(shù)時(shí),將對(duì)該服務(wù)的屬性進(jìn)行修改.組卷服務(wù)的具體方法如下:
3.2.2 快速組卷算法 組卷算法是組卷服務(wù)要考慮的關(guān)鍵,好的選題算法既要保證選題的合理性,又要考慮速度要求.題庫(kù)中試題的知識(shí)點(diǎn)標(biāo)識(shí)采用“章-節(jié)-問(wèn)題”的形式,但選題范圍是按章為單位,所以查詢?cè)O(shè)計(jì)用SQL的like關(guān)鍵字作模糊匹配.本系統(tǒng)采用的算法是先保證試題的分布均勻性,將60%的試題按知識(shí)點(diǎn)平均分配并依照難度要求選題;然后,剩余40%的試題在知識(shí)點(diǎn)范圍隨機(jī)選題,使用SQL的in關(guān)鍵詞選取.另外,算法能自動(dòng)適應(yīng)課程的實(shí)際試題數(shù)量,數(shù)量不足時(shí)按實(shí)際數(shù)量選取,選取試題多余按隨機(jī)刪除處理.實(shí)際證明,該算法組份試卷的時(shí)間不超過(guò)2 s.
3.3 試卷顯示服務(wù)
試卷顯示服務(wù)根據(jù)顯示風(fēng)格要求生成不同的答卷界面,使用不同的視圖模板實(shí)現(xiàn)試卷的顯示界面.試卷顯示服務(wù)由Spring的控制器、模型、服務(wù)業(yè)務(wù)邏輯、視圖協(xié)作完成.控制器對(duì)應(yīng)用戶的請(qǐng)求邏輯,需要傳遞試卷信息;模型存放試卷的具體內(nèi)容,將根據(jù)試題編號(hào)訪問(wèn)數(shù)據(jù)庫(kù)得到相關(guān)信息;視圖文件給出試卷的顯示模板,它將在視圖解析器的控制下將模型數(shù)據(jù)填入模板對(duì)應(yīng)位置.
系統(tǒng)提供有2種試卷顯示界面:一種是答題卡嵌入在試題內(nèi)容中,在一個(gè)視圖中包括試卷內(nèi)容和答題控件;另一種是答題卡與試卷分開(kāi),分2幀顯示(如圖4所示).考試界面還有1幀控制試卷的時(shí)間顯示和限時(shí)處理.
圖4 試卷內(nèi)容和答題卡分2幀顯示的界面
3.4 閱卷服務(wù)
答卷時(shí)點(diǎn)擊交卷按鈕或因限時(shí)時(shí)間用完導(dǎo)致自動(dòng)交卷,將提交給閱卷服務(wù)處理.
3.4.1 閱卷服務(wù)的評(píng)分處理 試題判分處理分為4類:選擇類試題(單選、多選、是非)采用精確比對(duì)方法;單填空只含1空,采用精確比對(duì)方法;其他填空類試題(寫(xiě)運(yùn)行結(jié)果、完型填空、改錯(cuò))都?xì)w咎為多空問(wèn)題,采用統(tǒng)一的判分方式,用戶解答按行輸入,每個(gè)空占1行,評(píng)分將按行進(jìn)行比對(duì)給分;編程類采用啟發(fā)引導(dǎo)學(xué)生編寫(xiě)程序的方式,在啟發(fā)過(guò)程中對(duì)學(xué)生進(jìn)行評(píng)分[7].閱卷服務(wù)提供了如下方法:
其中,marking方法中根據(jù)試題類別執(zhí)行相應(yīng)類別的評(píng)分處理.
3.4.2 閱卷控制器的方法設(shè)計(jì) 閱卷控制器是與用戶的接口,控制器通過(guò)REST風(fēng)格的服務(wù)處理來(lái)自用戶的請(qǐng)求.用戶通過(guò)頁(yè)面表單提交解答,并通過(guò)URL參數(shù)傳遞試卷.為了避免過(guò)多的數(shù)據(jù)傳遞處理,在閱卷控制器的處理方法中還要調(diào)用考試登記服務(wù)對(duì)學(xué)生試卷解答、分?jǐn)?shù)等進(jìn)行登記.閱卷控制器的判分及試卷解答登記處理的process方法如下:
3.5 考試登記服務(wù)
考試登記服務(wù)在前面的閱卷控制器中閱卷完成后調(diào)用,由于登記過(guò)程涉及多表的處理,因此系統(tǒng)利用Spring的事務(wù)處理機(jī)制保證數(shù)據(jù)寫(xiě)入的完整性[8].考試登記服務(wù)的主要方法如下,排在后面的3個(gè)方法由教師操作部分調(diào)用,用于實(shí)現(xiàn)成績(jī)的歷史登記處理:
3.6 考試查閱服務(wù)
考試查閱服務(wù)是考試結(jié)束后供學(xué)生和教師進(jìn)行考試分析調(diào)用.對(duì)于該查詢服務(wù),采用Spring MVC視圖顯示方式,在控制器的Mapping方法中提供相關(guān)參數(shù)信息,將查詢結(jié)果直接映射到視圖中顯示.具體方法有查詢某班學(xué)生的考試分?jǐn)?shù)、查閱某學(xué)生的答卷.其中,對(duì)于班級(jí)學(xué)生考試分?jǐn)?shù)將以表格形式顯示,并通過(guò)VML視圖顯示餅圖給出優(yōu)秀、良好、中、及格、不及格的比例及人數(shù)[9].
采用Spring技術(shù)實(shí)現(xiàn)網(wǎng)絡(luò)考試中各環(huán)節(jié)的服務(wù)建模設(shè)計(jì).整個(gè)網(wǎng)絡(luò)考試的服務(wù)設(shè)計(jì)還有教師操作部分,教師控制網(wǎng)絡(luò)考試的各類配置、過(guò)程監(jiān)控以及考試結(jié)果的檢查分析,其設(shè)計(jì)思想與文中一致.另外,考試過(guò)程中還涉及其他處理,在其他文獻(xiàn)中已有介紹,如考試的限時(shí)控制[10]、考試交卷后防回退處理[11],從而保證學(xué)生在有限時(shí)間內(nèi)公平完成考試.
[1] MARK FISHER,JONAS PARTNER,MARIUS BOGOEVICI,et al.Spring Integration in Action[M].U.S.A:Manning Publishing Company,2012.
[2] 丁振凡.基于Spring Security的Web資源訪問(wèn)控制[J].宜春學(xué)院學(xué)報(bào),2012,34(8):71-74.
[3] 丁振凡.基于AJAX結(jié)合Spring MVC的信息訪問(wèn)服務(wù)模式研究[J].計(jì)算機(jī)時(shí)代,2012(6):25-29.
[4] 吳映波,王 旭,林 云.面向服務(wù)的領(lǐng)域分析與建模框架[J].計(jì)算機(jī)工程與設(shè)計(jì),2011,32(8):2 704-2 707.
[5] 丁振凡.Spring REST風(fēng)格Web服務(wù)的Json消息封裝及解析研究[J].智能計(jì)算機(jī)與應(yīng)用,2012,2(2):9-11.
[6] 丁振凡,李馨梅.基于JdbcTemplate的數(shù)據(jù)庫(kù)訪問(wèn)處理[J].智能計(jì)算機(jī)與應(yīng)用,2012,2(3):29-32.
[7] 丁振凡,張曉瑞.基于模板匹配的啟發(fā)式編程訓(xùn)練軟件的Web實(shí)現(xiàn)[J].華東交通大學(xué)學(xué)報(bào),2011,28(2):60-65.
[8] 丁振凡.Spring3.x的事務(wù)處理機(jī)制的研究比較[J].微型機(jī)與應(yīng)用,2012,31(10):4-6.
[9] 李明翠.SVG,VML,F(xiàn)LASH三種實(shí)現(xiàn)統(tǒng)計(jì)餅圖的方式比較[J].電腦知識(shí)與技術(shù):學(xué)術(shù)交流,2007,18:1 721-1 722.
[10] 丁振凡.基于Web的考試系統(tǒng)的限時(shí)處理研究[J].福建電腦,2004(7):18-37.
[11] 丁振凡.Web編程實(shí)踐教程[M].北京:清華大學(xué)出版社,2011:261-262.
(責(zé)任編輯 向陽(yáng)潔)
Service Design of the Network Examination System Based on Spring
DING Zhen-fan
(School of Information Engineering,East China Jiaotong University,Nanchang 330013,China)
In the analysis of network examination process,this paper undertakes service modeling for each link of students operating part and designs service for the examination control,generating examination paper,paper display,paper marking,examination paper logging and papers analysis.The system,implemented by AJAX combined with Spring technology,gives the ideas for application service invocations and application integration.The Bean deployment in IOC container,as well as the Json packaging method for paper transmission between application services are discussed.
network examination system;service modeling;AJAX;Spring;Java Bean;Json
TP391
A
10.3969/j.issn.1007-2985.2013.01.006
1007-2985(2013)01-0021-05
2012-11-19
江西省教改項(xiàng)目(JXJG-12-5-24)
丁振凡(1965-),男,江西豐城人,華東交通大學(xué)信息工程學(xué)院教授,碩士生導(dǎo)師,主要從事語(yǔ)義Web、分布式計(jì)算、計(jì)算機(jī)輔助教學(xué)研究.