周四維
(湖北大學(xué)知行學(xué)院計(jì)算機(jī)科學(xué)系,湖北武漢430011)
基于Struts的在線考試系統(tǒng)設(shè)計(jì)與優(yōu)化
周四維
(湖北大學(xué)知行學(xué)院計(jì)算機(jī)科學(xué)系,湖北武漢430011)
使用JSP技術(shù)配合Struts三層架構(gòu)設(shè)計(jì)在線考試系統(tǒng),包括數(shù)據(jù)庫、數(shù)據(jù)庫連接池、登錄模塊、抽題模塊和考試模塊??偨Y(jié)了當(dāng)前類似在線考試系統(tǒng)存在的賬號(hào)同時(shí)在線問題、用戶鍵盤的誤操作問題、題型靈活性設(shè)置問題,并提出了一套修改服務(wù)器端腳本、數(shù)據(jù)庫關(guān)系與客戶端腳本的解決方案。
Struts;數(shù)據(jù)庫;數(shù)據(jù)庫連接池;在線考試系統(tǒng)
隨著計(jì)算機(jī)科學(xué)技術(shù)的飛速發(fā)展和互聯(lián)網(wǎng)的應(yīng)用范圍不斷擴(kuò)大,以計(jì)算機(jī)為輔助手段的網(wǎng)絡(luò)考試方式己經(jīng)在社會(huì)眾多領(lǐng)域中逐步得到應(yīng)用與推廣,尤其在各種培訓(xùn)、教育教學(xué)領(lǐng)域發(fā)展迅速。它使培訓(xùn)者、教育者從出題、組卷、組織考試、閱卷評(píng)分、試卷分析等費(fèi)時(shí)費(fèi)力的傳統(tǒng)工作中解脫出來,使他們能夠?qū)⒅饕木D(zhuǎn)移到利用現(xiàn)代化的科技手段提高教學(xué)效率和教育質(zhì)量的改革中去,以更好地適應(yīng)現(xiàn)代教育形勢(shì)的發(fā)展。
Struts是Apache基金會(huì)Jakarta項(xiàng)目組的一個(gè)開源項(xiàng)目,它采用的是MVC模式,能夠更好地幫助Java開發(fā)者利用J2EE[1]框架開發(fā)Web應(yīng)用,能夠大量地減少開發(fā)Web應(yīng)用的時(shí)間,提高產(chǎn)品的重用度[2]。Struts主要采用Servlet與JSP相結(jié)合的技術(shù),它把Servlet、JSP、自定義標(biāo)簽和信息資源整合到一個(gè)統(tǒng)一的框架中[3],Struts只有一個(gè)中心控制器,采用XML定制轉(zhuǎn)向的URL,采用Action層來處理邏輯,開發(fā)人員利用其進(jìn)行開發(fā)時(shí)無需使用自己的編程語言就能實(shí)現(xiàn)全套MVC模式。
1.1 數(shù)據(jù)庫設(shè)計(jì)
數(shù)據(jù)庫設(shè)計(jì)有用戶表、題目表、答案表、考卷表、成績(jī)表。用戶表記錄學(xué)生與老師、管理人員的信息,允許增刪查改。題目表存放系統(tǒng)考試所涉及的題目與用戶相關(guān)信息,允許增刪查改。答案表與題目表主鍵關(guān)聯(lián),記錄對(duì)應(yīng)題目的答案??季肀碛涗洰?dāng)前設(shè)定的考卷所包含的題目所對(duì)應(yīng)的相關(guān)信息,允許增刪查改。成績(jī)表記錄學(xué)生考試成績(jī)信息。數(shù)據(jù)表關(guān)系見圖1。
圖1 數(shù)據(jù)表關(guān)系圖Fig.1Relation of datasheet
1.2 數(shù)據(jù)庫連接池
在Struts中配置一個(gè)名為pool.xml的文件,該文件記錄與之相關(guān)聯(lián)的數(shù)據(jù)庫信息(包括驅(qū)動(dòng)文件信息、數(shù)據(jù)庫文件信息、數(shù)據(jù)庫用戶信息及相關(guān)的最大連接數(shù)、延遲等參數(shù)信息),它允許同時(shí)配置多條數(shù)據(jù)庫連接驅(qū)動(dòng)以適應(yīng)在不同環(huán)境下的數(shù)據(jù)源[4-5]。以下文件為系統(tǒng)配置了兩個(gè)數(shù)據(jù)源的連接驅(qū)動(dòng),其中一個(gè)為微軟的SQL Server數(shù)據(jù)庫,另一個(gè)為Oracle數(shù)據(jù)庫。
如果有需要也可增加其他的數(shù)據(jù)源,只需在
1.3 系統(tǒng)的Struts框架結(jié)構(gòu)
本系統(tǒng)采用三層模式(如圖2所示),前臺(tái)表示層包括用戶數(shù)據(jù)與前臺(tái)頁面,中間層為Action層,所有的主要邏輯都集中在這里,后臺(tái)層為數(shù)據(jù)庫[6]。前臺(tái)表示層與中間層通過Form類與Dto類進(jìn)行必要的數(shù)據(jù)傳輸,而Struts.xml文件負(fù)責(zé)配置它們與中間層的關(guān)系[7]。中間層與數(shù)據(jù)庫之間通過Dao驅(qū)動(dòng)類(包含多種不同類型的數(shù)據(jù)庫數(shù)據(jù)驅(qū)動(dòng))進(jìn)行必要的數(shù)據(jù)交換,而Proxool.xml文件負(fù)責(zé)管理Dao驅(qū)動(dòng)類使用哪些驅(qū)動(dòng)[8-9]。
圖2 系統(tǒng)Struts框架結(jié)構(gòu)圖Fig.2System frame of Struts
1.4 主要功能模塊設(shè)計(jì)
1.4.1 登錄模塊新建UserForm與UserDto兩個(gè)類,聲明相關(guān)的用戶屬性為成員變量,設(shè)置Get()與Set()方法,配置
type="com.exam.cms.form.USER_INFODFORM"/> 其中UserForm為封裝的用戶信息類,用于與網(wǎng)頁間的傳送;UserDto為Action里調(diào)用用戶信息類,在Ac?tion中判斷用戶信息即可。 1.4.2 抽題模塊新建SubjectForm與SubjectDto兩個(gè)類,聲明相關(guān)的題目屬性為成員變量,設(shè)置Get()與Set()方法,配置 type="com.exam.cms.form.SUBJECT_INFODFORM"/> 其中SubjectForm為封裝的題目信息類,用于與網(wǎng)頁間的傳送;SubjectDto為Action里調(diào)用題目類,負(fù)責(zé)與數(shù)據(jù)庫進(jìn)行數(shù)據(jù)傳輸,在Action中將數(shù)據(jù)庫題目表的數(shù)據(jù)傳給SubjectDto,然后SubjectDto傳給Sub?jectForm并返回于頁面中,老師或管理人員將選中的題目再以SubjectForm的形式傳給Action,Action將SubjectForm轉(zhuǎn)為SubjectDto,由SubjectDto將所選題目數(shù)據(jù)傳于數(shù)據(jù)庫考卷表。 1.4.3 考試模塊新建EXAMDEFForm與EXAMDEFDto兩個(gè)類,聲明相關(guān)的題目屬性為成員變量,設(shè)置Get()與Set()方法。新建ANSWERForm與ANSWERDto兩個(gè)類,聲明相關(guān)的題目答案屬性為成員變量,設(shè)置Get()與Set()方法。新建MARKForm與MARKDto兩個(gè)類,聲明相關(guān)的題目答案屬性為成員變量,設(shè)置Get()與Set()方法,配置 其中EXAMDEFForm為封裝的試卷題目信息用于網(wǎng)頁間的傳送,ANSWERForm為封裝的設(shè)置題目答案信息用于網(wǎng)頁間傳送(設(shè)置答案模塊中),MARKForm為封裝的成績(jī)信息用于網(wǎng)頁間傳送。EXAM?DEFDto為Action里調(diào)用試卷題目類,負(fù)責(zé)與ANSWERDto相關(guān)聯(lián)判斷答題是否正確,其邏輯過程為將學(xué)生完成的試卷題目通過EXAMDEFForm傳給Action,Action將其轉(zhuǎn)為EXAMDEFDto,并從數(shù)據(jù)庫中答案表找來相關(guān)數(shù)據(jù)并賦予ANSWERDto,然后兩者結(jié)合判斷正誤,將最后結(jié)果返回給MarkDto,MarkDto將數(shù)據(jù)返回給數(shù)據(jù)庫中成績(jī)表。 2.1 當(dāng)前系統(tǒng)存在的問題 隨著在線考試系統(tǒng)的流行,大多數(shù)院校在大規(guī)模的實(shí)測(cè)與應(yīng)用之后,發(fā)現(xiàn)了一些設(shè)計(jì)系統(tǒng)時(shí)考慮欠妥的地方,主要有:①存在考生使用他人賬號(hào)與本人賬號(hào)同時(shí)在線,提交成績(jī)后本人賬號(hào)即退出考試,這樣就形成了一個(gè)可以替考的漏洞。②在線考試系統(tǒng)大都是以網(wǎng)頁的形式輸出的,所以很多快捷鍵可以直接對(duì)當(dāng)前網(wǎng)頁進(jìn)行操作,例如F5刷新,一旦考生在考試時(shí)誤按了,當(dāng)前網(wǎng)頁就會(huì)重置,原來做的答案就會(huì)消失,耽誤考試時(shí)間,導(dǎo)致考試行為異常。③一般考試系統(tǒng)試題由題目和答案組成,題目不分題型統(tǒng)一放在一個(gè)數(shù)據(jù)庫字段里,這樣會(huì)造成在輸出時(shí)由于字段內(nèi)容大小不一造成格式混亂的現(xiàn)象,整體輸出效果較差,最主要的是對(duì)于題目選項(xiàng)不能合理設(shè)置,所以一般輸出的題目都是四個(gè)選項(xiàng)的單選,一個(gè)空的填空等比較固定的格式,這樣對(duì)出題的老師存在一定的限制性。針對(duì)用戶在線狀態(tài)的判斷、用戶誤操作帶來的考試過程失效、系統(tǒng)題型的不靈活這3個(gè)問題,給出3個(gè)層面上的解決方案。 2.2 服務(wù)器端腳本的優(yōu)化 服務(wù)器端腳本的優(yōu)化主要針對(duì)用戶在線狀態(tài)的判斷,一般的在線考試系統(tǒng)要么沒有判斷用戶是否在線的功能,要么是基于數(shù)據(jù)庫字段的方法。如沒有判斷用戶是否在線就可能出現(xiàn)代考或出現(xiàn)一人多份成績(jī)的情況;而基于數(shù)據(jù)庫字段判斷,則可能出現(xiàn)異常掉線的狀況,那么該用戶會(huì)處于無法登錄的狀態(tài),只有管理員修改數(shù)據(jù)庫字段值的情況下才能重新登錄。 筆者建議在Struts里Web.xml文件設(shè)置一個(gè)監(jiān)聽器,利用HttpSessionEvent對(duì)象結(jié)合哈希表來實(shí)現(xiàn)判斷用戶在線狀態(tài)[10],原理為:在Action里創(chuàng)建一個(gè)全局的哈希表,當(dāng)有客戶端連接服務(wù)器且通過了系統(tǒng)的賬號(hào)認(rèn)證時(shí),首先搜索哈希表里是否有此賬戶的ID信息,如果有則返回該賬戶已在線的消息,如果沒有則將此賬戶的ID和此客戶端的SessionID存放入哈希表內(nèi),如果用戶瀏覽器關(guān)閉或超過Session最大生命周期,則監(jiān)聽器會(huì)發(fā)現(xiàn)此Session失效,并返回一個(gè)信號(hào)給Action,Action將匹配此SessionID刪除對(duì)應(yīng)的賬戶信息,Session的最大生命周期要設(shè)為大于或等于考試最大時(shí)間。 2.3 客戶端腳本的優(yōu)化 客戶端腳本的優(yōu)化主要是針對(duì)用戶鍵盤的誤操作問題,比如鍵盤上有很多快捷鍵是與IE有關(guān)的,比如Backspace鍵、Power鍵、F5鍵、右鍵菜單、Shift+F10、瀏覽器的菜單欄、Alt+F4等這些操作都會(huì)改變當(dāng)前頁面的狀態(tài),必須屏蔽,最好的解決方法是使用JavaScript腳本來實(shí)現(xiàn),以屏蔽Backspace、Shift+F10、F5刷新、退格鍵為例,其主要JavaScript代碼如下: if((event.keyCode==8)&&(event.srcElement.type!="text"&&event.srcElement.type!="textar?ea"&&event.srcElement.type!="password")||//屏蔽Backspace刪除鍵 (event.keyCode==116)||//屏蔽F5刷新鍵 (event.ctrlKey&&event.keyCode==82)){//Ctrl+R event.keyCode=0; event.returnvalue=false; } if((event.shiftKey)&&(event.keyCode==121))//屏蔽shift+F10 event.returnvalue=false; 2.4 數(shù)據(jù)庫的優(yōu)化 數(shù)據(jù)庫的優(yōu)化主要針對(duì)題型靈活性,一般的考試系統(tǒng)是將題目與答案分離,這樣當(dāng)題型改動(dòng)較大時(shí),可能需要重新設(shè)計(jì)表結(jié)構(gòu)。這里筆者提出將題型、題目的內(nèi)容、題目的選項(xiàng)、答案分離,見圖3。 這樣一來無論什么題型都可以劃分為這幾個(gè)元素,比如選擇題可分解為題型(選擇題),題目?jī)?nèi)容(任意)、題目選項(xiàng)(選項(xiàng)數(shù))、答案;填空題則可分解為題型(填空)、題目?jī)?nèi)容、題目選項(xiàng)(空格數(shù))、答案。這樣做雖然增加了數(shù)據(jù)的冗余度,但大大增強(qiáng)了題目的適應(yīng)性。 圖3 題目分解圖Fig.3Decomposition chart of exercise problem 2.5 優(yōu)化結(jié)果 使用優(yōu)化系統(tǒng),若某賬號(hào)已登錄且尚未退出,再使用相同的賬號(hào)登錄時(shí),則會(huì)出現(xiàn)圖4所示界面,提示錯(cuò)誤。 圖4 登錄優(yōu)化結(jié)果Fig.4Login optimization results 由于優(yōu)化后題目選項(xiàng)數(shù)可以根據(jù)具體情況進(jìn)行設(shè)置,題型設(shè)置更加靈活,圖5為設(shè)置后界面。 圖5 考試界面優(yōu)化結(jié)果Fig.5Exam interface optimization results 本文提出一套基于Struts結(jié)構(gòu)的在線考試系統(tǒng)的設(shè)計(jì)思想,并針對(duì)當(dāng)前主流系統(tǒng)存在的問題,給出了解決方案。當(dāng)今在線考試系統(tǒng)不僅限于將傳統(tǒng)紙介轉(zhuǎn)為網(wǎng)頁形式,如何實(shí)現(xiàn)在線操作題,如何將非紙介題目如歌曲、圖畫、舞蹈轉(zhuǎn)化為在線形式,如何對(duì)這些內(nèi)容進(jìn)行自動(dòng)評(píng)分,還需要進(jìn)行更深層次的研究。 (References) [1]ECKEL B.Java編程思想[M].4版.北京:機(jī)械工業(yè)出版社,2007. [2]HALL M,BROWN L.Servlet與JSP核心編程[M].趙學(xué)良,譯.北京:清華大學(xué)出版社,2004. [3]ZAKAS N C.Professional JavaScript for web developers[M].Hoboken,NJ:Wiley Publishing,Inc,2005. [4]周四維.基于Struts 2架構(gòu)的云環(huán)境監(jiān)測(cè)系統(tǒng)的研究[J].江漢大學(xué)學(xué)報(bào):自然科學(xué)版,2011,39(4):40-44. [5]孫衛(wèi)琴.Java面向?qū)ο缶幊蹋跰].北京:電子工業(yè)出版社,2006. [6]ECKEL B.Thinking in Java[M].3rd ed.Upper Saddle River,NJ:Prentice-Hall,2002. [7]李剛.Struts 2.1權(quán)威指南[M].北京:電子工業(yè)出版社,2009. [8]廖雪峰.Spring2.0核心技術(shù)與最佳實(shí)踐[M].北京:電子工業(yè)出版社,2007. [9]孫衛(wèi)琴.精通Hibernate:Java對(duì)象持久化技術(shù)詳解[M].北京:電子工業(yè)出版社,2010. [10]ELLIOTT J.Hibernate:A developer′s notebook[M].南京:東南大學(xué)出版社,2005. (責(zé)任編輯:陳曠) Design and Optimization of Online Examination System Based on Struts ZHOU Siwei The online examination system was designed based on Struts using JSP with three-tier,including database,database connecting pool,login on module,choosing question module and test module.The problems of current examination system such as the account existing at the same time,the user keyboard misuse,the flexibility for setting questions were summarized.The solution obtain?ing modified server-side scrpting,database relationships and client-side scripting was proposed. Struts;database;database connecting pool;online examination system TP311.52 :A 1673-0143(2014)05-0040-06 2014-05-27 周四維(1982—),男,講師,碩士,研究方向:知識(shí)工程與并行計(jì)算。2 系統(tǒng)優(yōu)化
3 結(jié)語
(Department of Computer Science,Zhixing College of Hubei University,Wuhan 430011,Hubei,China)