版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
畢業(yè)論文基于jsp在線考試系統設計1引言 22系統運行環(huán)境和功能簡介 22.1系統運行環(huán)境 22.2系統功能模塊劃分 23系統的體系結構 43.1系統效勞器開發(fā)語言JSP 43.2數據層 5關系型數據庫mssql2000+sp3 5數據庫連接池 53.2.3Hibernate框架 63.3前臺交互 7交互方式 73.3.2Ajax技術 73.3.3DWR 84系統的具體設計和實現 94.1系統的數據庫設計 94.2題庫管理模塊 114.2.1保存、更新、刪除試題 114.2.2查詢試題 134.2.3試題與選項關聯 144.3自動組卷模塊 174.4試卷監(jiān)控 224.5批閱試卷 224.6成績查詢 234.7注冊考試 234.8在線測試 23倒計時 24分頁獲取試題 25分頁保存答案 25自動閱卷 255系統的性能和平安 266小結 28參考文獻 28英文摘要 29致謝 29附錄 30基于jsp在綫考試系統摘要:本文闡述了運用b/s模式設計在線測試系統的思想,介紹了當前較流行的web應用技術和框架JSP、Java、Ajax和ORM技術,并以此為理論根底和實踐依據,在Hibernate框架下結合數據庫連接池技術,設計并實現了在線測試系統。完成了試題庫的維護、自動組卷、自動閱卷〔客觀題〕、教師批閱〔主觀題〕、學生在線測試、成績查詢各項功能。關鍵字:在線測試JSPAjaxHibernateServlet1引言隨著計算機技術,尤其是計算機網絡技術的開展及其不斷深入的普及。在21世紀信息時代已經到來的今天,網絡對于人們來說已不再是一個陌生的概念。從個人到學校、公司、機關,網絡已經并將繼續(xù)影響著人們的生活、學習,必將對社會各行各業(yè)產生重大影響。學校作為培養(yǎng)人才的基地,更應該走在信息時代的前沿。如何利用網絡來提高教學的質量和效率,克服傳統教學的弊端,如何架起學生與教師以及學生與學生的網絡交流平臺,已成為教育者不得不考慮的現實問題。本系統著重研究在線測試系統的實現,充分利用web應用給我們帶來的便利,結合各種流行高效的技術,利用web方式對題庫進行管理和維護,提供自動生成試卷、自動閱卷、在線測試、查閱分數等功能,大大的節(jié)省了時間和精力,以到達輔助教學,提高教學效率的目的。2系統運行環(huán)境和功能簡介2.1系統運行環(huán)境操作系統:WindowsXp/WindowsNTWeb應用效勞器:Tomcat5.5.26〔需要JDK1.5以上〕數據庫:MSSQL2000+sp32.2系統功能模塊劃分本系統主要實現的功能有:題庫管理、組卷、試卷監(jiān)控、批閱試卷、注冊考試、在線測試、成績查詢。功能如圖2-1:圖2-1系統功能圖題庫管理:教師用戶可以增加、修改、刪除、查詢題庫中的試題。本系統的試題種類包括單項選擇、多項選擇、填空、判斷、簡答和編程。其中問題的選項也可以進行管理,并且教師可以指定這些問題的作用范圍,例如是否可以用于在線測試等。組卷:系統會保存教師填寫的試卷參數,供學生注冊時自動隨機組卷。試卷監(jiān)控:發(fā)布出去的試卷,教師可以監(jiān)控所有注冊該試卷的學生和試卷的狀態(tài)。批閱試卷:考試結束,收回的試卷其中的主觀題目教師可以進行批閱。注冊考試:當教師發(fā)布試卷后學生可以進行注冊。在線測試:注冊后的試卷,學生可以進行在線測試。成績查詢:批閱后的試卷,學生可以查到自已的得分,教師可以按學生的姓名,查詢學生的得分。3系統的體系結構整個系統采用表示層/業(yè)務邏輯層/數據層的三層體系結構。系統結構如圖3-1。圖3-1系統體系結構圖3.1系統效勞器開發(fā)語言JSP系統效勞器編程采用最常用的JSP技術,JSP(JavaServerPage)是Sun公司在1999年發(fā)布的J2EE的重要組成局部,是基于JavaServlet以及整個Java體系的Web開發(fā)技術,為企業(yè)級Web的站點動態(tài)網頁開發(fā)人員提供了一種非常簡單卻有效的工具。JSP與ASP有許多相似之處,都是為基于Web應用實現動態(tài)網頁制作提供的技術環(huán)境支持,JSP有以下優(yōu)點:①將內容的生成和顯示別離.使用JSP技術,Web頁面開發(fā)者可以使用HTML或XML標志或者小腳本來生成頁面上的動態(tài)內容.生成內容的邏輯被封裝在標志和JavaBeans組件中,并且被捆綁到小腳本中,所有的腳本在效勞器端運行。②強調可重用的組件。絕大多數JSP頁面依賴于可重用的、跨平臺的組件(JavaBeans或EJB)來執(zhí)行應用程序所要求的更為復雜的處理,基于組件的方法加速了總體開發(fā)過程。③硬件平臺和效勞器無關。JSP作為Java的組成局部,繼承了Java技術的“一次編寫,隨處可用(Writeonce,runanywhere)〞的特性,可以運行于大多數流行的操作系統平臺及Web效勞器。這種與效勞器和操作系統平臺的無關性是JSP相對于其它動態(tài)網頁技術最大的一個優(yōu)點。④與Java平臺有機集成。JSP技術是J2EE平臺的重要組成局部。JSP使用Java語言作為它的腳步語言,在JSP頁面中可以使用幾乎所有的Java組件和JavaAPI,從而可以發(fā)揮Java語言的強大功能。使用JSP技術可以創(chuàng)立具有高度可伸縮性和可靠性的Web應用程序。⑤功能可擴展性。JSP可以通過JavaBean和EJB以及自定義的標記來擴展功能,也可以通過JDBC與Oracle,DB2,SQLServer等大型關系數據庫進行連接;另外JSP提供了一些隱含對象,可以使腳步功能更加強大,并且編程更加容易、方便。例如利用Request對象,可方便地接收用戶在HTML表單中提交的信息。利用session對象可以跟蹤用戶狀態(tài),利用application對象可以得到當前應用效勞的全局信息。系統中的在線學生的信息就是保存在application中。3.2數據層3.2.1關系型數據庫mssql2000+sp3MicrosoftSQLServer2000數據庫系統是在WindowsNT環(huán)境下開發(fā)的一種全新的關系型數據庫系統,是開展最快的關系數據庫。SQlServer2000具有大型數據庫系統的一些根本功能,支持事務處理功能、支持數據庫加密、設置用戶組別或用戶的密碼和權限等等。SQLServer2000是一個具備完全Web支持的數據庫產品,提供了以Web標準為根底的擴展數據庫編程功能。由于最初的SqlServer2000并沒有把1433端口翻開,所以需要給SQLServer2000打個Sp3補丁。3.2.2數據庫連接池在根本的數據源〔DataSource〕實現中,物理的數據庫連接和客戶端的連接對象〔ConnectionObject〕有著一比一的對應關系。當連接對象關閉的時候,物理的連接也隨之關閉。這樣一個客戶的會話都要花費資源去翻開,初始化和關閉物理連接。對于這個資源的消耗問題,可以用連接池〔ConnectionPool〕來解決。連接池中有以保持一個數據庫物理連接的高速緩存,會話可以重復利用存儲在緩存中的連接。連接池可以極大地提高性能,在多個客戶端共享少量的物理連接的三層網絡環(huán)境下表現的尤為突出。圖3-2表示了JDBC驅動程序提供了一個應用效勞器用來建立和管理連接池ConnectionPoolDataSource的實現。在本系統中充分利用了Tomcat提供的dbcp數據庫連接池功能。在多用戶并發(fā)訪問數據庫的時候,利用連接池緩存數據庫的連接,可以減少建立數據庫連接造成的系統資源開銷。同時dbcp連接池也提供了自動釋放無效的數據庫連接來防止系統由于數據庫連接泄露造成系統崩潰。圖3-2連接池的運作3.2.3Hibernate框架一般來說在數據層,我們可以用jsp直接調用sql語句操縱數據庫,或者在JavaBean中利用sql語句執(zhí)行數據庫操縱。然而,這樣會使我們在開發(fā)時候,把注意力過多的集中到sql語句上,同時系統的可維護性,和編寫代碼的效率很低。所以本系統中采用了ORM〔對象關系映射〕技術中的Hibernate框架結合DAO模式完成數據層的對象持久化的問題。在編寫代碼的時候,我們只要操縱Java中的對象,剩下的對象與數據的轉換就交給Hibernate去處理了。這樣系統的可維護性和開發(fā)效率就會有很大的提高。同時利用Hibernate從tomcat提供的JNDI連接池獲取數據庫連接,將其封裝成Hibernate的Session,通過Session來處理對象的保存,更新,刪除操作。Hibernate結合DAO實現對象的持久化,工作原理如圖3-3。圖3-3Hibernate結合DAO實現對象的持久化3.3前臺交互3.3.1交互方式在前臺與效勞器端的交互,系統中有兩種方式,一種是常見的form表單提交的方式,此種方式應用在如系統用戶登錄的時候。當用戶填寫用戶名和密碼把表單提交到效勞器端,效勞器端接收到數據后,進行業(yè)務處理,驗證用戶明和密碼后,把結果返回給瀏覽器。另外一種是客戶端以異步請求的方式與效勞器端交互。在做數據驗證,在線考試的剩余時間的獲取和刷新時,這些都需要與效勞器進行異步通信和局部刷新頁面。3.3.2Ajax技術Ajax這個名詞是一位叫JesseJamesGarrett的美國人創(chuàng)造的。Jesse是AdaptivePath公司負責用戶體驗策略的主管,他在2005年2月18日發(fā)表了一篇題為?Ajax:一個Web應用的新途徑?的論文。在文中他給出了Ajax的定義。Ajax不是一種技術。實際上,它由幾種蓬勃開展的技術以新的強大方式組合而成。Ajax包含:1、基于CSS標準的表示;2、使用DocumentObjectModel進行動態(tài)顯示和交互;3、使用XMLRequest與效勞器進行異步通信;4、使用JavaScript綁定一切。Ajax工作原理如下:1.客戶斷利用XMLRequest對象向效勞器發(fā)送異步請求2.效勞器端接受到請求后進行業(yè)務處理,處理完后把結果返回客戶端3.客戶端接受到返回響應后,進行更新頁面等操作。各種技術在Ajax中的作用如圖3-4。圖3-4各種技術在Ajax中的作用3.3.3DWRDWR〔DirectWebRemoting〕是getahead公司開發(fā)的一個實現Ajax應用的框架。它允許客戶端Javascript遠程調用效勞器端的Java類的方法,執(zhí)行相關的事物操作。DWR主要包含兩個主要局部,其一是運行在瀏覽器端的Javascript,這局部被用來與效勞器通信,并更新頁面內容:其二是運行在效勞器端的JavaServlet,這局部被用來處理請求并將響應結果返回給瀏覽器。 DWR采取了一種動態(tài)生成基于Java類的Javascript代碼的方法來實現和處理Ajax。這樣Web開發(fā)人員就可以在Javascript里像使用瀏覽器本地代碼一樣使用Java代碼,而實際上這些Java代碼是運行在效勞器端并且可以自由訪問Web效勞器資源的。處于平安考慮,Web開發(fā)人員可以根據要求進行適當的配置來決定哪些Java類可以平安的被外部使用。4系統的具體設計和實現4.1系統的數據庫設計結合系統的功能和分析,數據庫的設計模型如圖:4-1.問題選項表T_Q_ELEMENTS,問題表T_QUESTIONS,學生信息表T_STUDENTS,教師表T_TEACHERS,科目表T_SUBJECTS,章節(jié)表T_CHAPTS,班級表T_CLASS,試卷參數表T_EXAM_PARAM,學生試卷表T_EXAMS,試卷組成元素表T_EXAM_ELEMENTS。教師在頁面添加試卷的參數向試卷參數表〔T_EXAM_PARAM〕中添加參數后,發(fā)布此試卷,學生可以注冊考試,注冊時首先會從試卷參數表〔T_EXAM_PARAM〕中讀取相應的參數如單項選擇題個數等,利用這些參數從題目表〔T_QUESTIONS〕中隨機選取問題,而這些問題的選項可以從問題選項表〔T_Q_ELEMENTS〕關聯查出,然后把這些問題的id添加到試卷組成元素表〔T_EXAM_ELEMENTS〕中,最后生成學生試卷表〔T_EXAMS〕。當學生在線答題時,會跟據學生試卷(T_EXAMS)的id查出試卷組成元素表中的記錄得到問題id,利用問題的id得到問題和相關聯的問題選項。學生保存答案時按題型分為兩種情況,一是保存選擇性的題目,此時就把被選中的問題的選項的id存入試卷組成元素表中對應的學生答案字段中。另外就是非選擇性題目,即需要輸入文字的題目,此時把輸入的文字存入成元素表中對應的學生答案字段中。其中需要說明的是在實際編寫代碼時,對數據庫做了一些改良。如問題表〔T_QUESTIONS〕與科目表〔T_SUBJECTS〕間的關聯是用問題表中的科目名稱〔strSUBName〕與科目表中的科目名稱〔strNAME〕。同時教師和科目間的關聯關系,在本系統中還沒有應用到,但是出于以后的擴展考慮,仍然在教師表中建立一個字段科目的id。所以在設計數據庫時并不是一味的追求數據庫設計的標準性,而是結合實際情況,以提高系統效率為目的。因此某些冗余字段的出現,也正是出于此目的,例如試卷參數表〔試卷參數表〕中的試卷名稱strNAME與學生試卷表中的試卷名稱strName,就是冗余字段,當需要查出某學生參加的考試名稱時就無需關聯試卷參數表,這樣就可以減少系統的開銷,提高查詢速度。圖4-1:系統數據庫模型圖4.2題庫管理模塊該模塊主要是教師用戶可以增加、修改、刪除、查詢題庫中的試題。本系統的試題種類包括單項選擇、多項選擇、填空、判斷、簡答和編程。其中問題的選項也可以進行管理,并且教師可以指定這些問題的作用范圍,例如是否可以用于在線測試等。實現對題庫中的試題的增加、刪除、修改、查詢時,始終直接操作都是相關的Java對象QuestionDAO,在這個java類里封裝了對試題對象TQuestions的操作.這樣的一個開發(fā)模式就是DAO〔數據訪問對象〕模式。而最終把對象轉換到數據庫中的是利用Hibernate來實現的。下面就詳細的介紹這個模塊的實現和用到的相關技術。4.2.1保存、更新、刪除試題Session接口是Hibernate向應用程序提供的操縱數據庫的最主要接口,它提供了根本的保存、更新、刪除和查詢方法。Session具有一個緩存,位于緩存中的對象處于持久化狀態(tài),它和數據庫中的相關記錄對應,Session能夠在某些時間點,按緩存中持久化對象的屬性變化來同步更新數據庫,這一過程被稱為清理緩存。除了持久化狀態(tài),對象還能處于其他狀態(tài),Session的特定方法能使對象從一個狀態(tài)轉換到另一個狀態(tài)。對于需要被持久化的Java對象,在它的生命周期中,可處于以下三個狀態(tài).臨時狀態(tài)(transient):剛剛用new語句創(chuàng)立,還沒有被持久化,不處于Session的緩存中。沒有和數據庫記錄相關聯的Java對象被稱為臨時對象。.持久化狀態(tài)(persistent):已經被持久化,參加到Session的緩存中。被固化到數據庫中的Java對象被稱為持久化對象。.游離狀態(tài)(detached):已經被持久化,但不再處于Session的緩存中。其對應的Session實例己被關閉的Java對象被稱為游離對象。Java對象的完整狀態(tài)轉換圖如圖4-1所示,Session的特定方法觸發(fā)Java對象由一個狀態(tài)轉換到另一個狀態(tài)。從圖4-1看出,當Java對象處于臨時狀態(tài)或游離狀態(tài),只要不被任何變量引用,就會結束生命周期,它占用的內存就可以被JVM的垃圾回收器回收;當處于持久化狀態(tài),由于Session的緩存會引用它,因此它始終處于生命周期中。圖:4-2Hibernate中對象狀態(tài)轉換圖下面是更新問題和刪除問題的局部代碼:***更新問題*@paramobj問題*@returntrue/false*/privatebooleanupdate(TQuestionsobj){ Transactiontx=session.beginTransaction(); try{ session.update(obj); txmit(); returntrue; }catch(HibernateExceptione){ tx.rollback(); //TODOAuto-generatedcatchblock e.printStackTrace(); returnfalse; }}/***按id刪除問題,*@paramid*@return*/publicbooleandelete(Integerid){ Transactiontx=session.beginTransaction(); try{ Stringhql="deletefromTQuestionswhereintId=?"; Queryq=session.createQuery(hql); q.setInteger(0,id); q.executeUpdate(); txmit(); returntrue; }catch(HibernateExceptione){ tx.rollback(); //TODOAuto-generatedcatchblock e.printStackTrace(); returnfalse; }}從上面的代碼中可以看出操作的是一個Java對象,而在底層有Hibernate處理,把對象的操作,轉換成對數據庫的操作。4.2.2查詢試題從數據庫中檢索對象是使用Hibernate最復雜的局部。HQL檢索,HQL(HibernateQueryLanguage)是與其相似的關系型查詢語言SQL的面向對象方言。它可以實現分頁查詢功能,而且利用占位符可以有效的防止SQL語句錯誤造成的系統異常甚至崩潰。并且它支持分頁查詢,在大量數據中可以只分頁獲取數據減小效勞器的不必要的資源開銷。下面是一個分頁查詢題庫中的試題的一個公共的方法。/***按試卷id查出所有與試卷相關的問題*@paramexamId*@paramstart*@paramcount*@returnList問題*/publicListqueryPage(intexamId,intstart,intcount){ session=HibernateUtil.openSession(); Stringhql="selectquestions,exelements.strAnswerfromTQuestionsasquestions,TExamEId=QExamid=?"; Queryq=session.createQuery(hql); q.setInteger(0,examId); if(count!=0){ q.setFirstResult(start); q.setMaxResults(count); } Listl=q.list(); HibernateUtil.closeSession(); returnl;}4.2.3試題與選項關聯本系統同時支持對試題選項的管理與維護,教師用戶可以對試題的選項進行增加、刪除、修改的操作。并且試題選項數量不限。同試題一樣,也是在一個DAO類QElementDAO中封裝了對試題選項類TQElementDAO的一系列的操作。然而試題選項與試題是有關聯關系的,那么如何處理這種關聯呢。先看一下這一局部的數據庫設計如表4-3和4-4表:4-3試題表T_QUESTIONS列名稱數據類型是否主鍵是否為空備注intIDINT是否問題idstrContentVARCHAR〔3000〕問題內容strCHAPTvarchar(20)問題所屬章節(jié)strTYPEvarchar(20)問題所屬類型〔單項選擇0,多項選擇1,填空2,判斷3,簡答4,編程5strSUBNamevarchar(20)所屬科目strLEVELvarchar(20)難度等級〔難0,正常1,簡單2〕strUSESTATEvarchar(10)問題有效范圍〔000-所有范圍都不能用,001-只能用于正式測驗,010-只能用于模擬測驗,011-適用于正式測驗,模擬測驗,100-只適用于練習,101-適用于練習,正式測驗110-適用于練習,模擬測驗intCountsInt被抽取的次數intCreateIdInt創(chuàng)立人idstrCreatorVarchar(20)創(chuàng)立人姓名dcreateDateDatetime創(chuàng)立日期表:4-3試題選項表T_Q_ELEMENTS列名稱數據類型是否主鍵是否為空備注intIDINT是否選項id strCONTENTVARCHAR〔3000〕選項內容intISANSWERINT是否為答案(0不是,1是)intQIDINT問題id在試題選項表中有一個試題的主鍵intQID作為外鍵,所以從試題到試題選項的一對多的關聯關系是用試題的id關聯上去的。那么如何在Java對象中表達這種關系呢?在TQuestions試題對象中用一個Set集合來存儲它所關聯的所有試題選項對象,在查詢到某個試題時候就可以關聯查出對應的所有試題選項了。兩個類的局部代碼如下:/***@authorzheng**/packageorg.zlj.zxcs.vo;importjava.util.Date;importjava.util.HashSet;importjava.util.Set;publicclassTQuestionsimplementsjava.io.Serializable{//FieldsprivateIntegerintId; //idprivateStringstrSubName;//科目名稱privateStringstrContent;//內容privateStringstrChapt;//章節(jié)privateStringstrType;//類型privateStringstrLevel;//難度等級privateStringstrUsestate;//問題有效范圍privateIntegerintCounts;//被抽取的次數privateIntegerintCreateId;//創(chuàng)立人idprivateStringstrCreator;//創(chuàng)立人姓名privateDatedcreateDate;//創(chuàng)立日期privateSettqelementset=newHashSet(0);//Constructors……setandgetpackageorg.zlj.zxcs.vo;/***TQElementsgeneratedbyMyEclipse-HibernateTools*/publicclassTQElementsimplementsjava.io.Serializable{privateIntegerintId;privateTQuestionsTQuestions;privateStringstrContent;privateIntegerintIsanswer;到此類中的關系有了,下面要做的就是要在Hibernate的映射文件中配置對象與數據間的轉換關系了。局部配置代碼如下:<hibernate-mapping><classname="org.zlj.zxcs.vo.TQElements"table="T_Q_ELEMENTS"schema="dbo"catalog="ONLINEEXAM"><idname="intId"type="java.lang.Integer"><columnname="intId"/><generatorclass="native"/></id><many-to-onename="TQuestions"class="org.zlj.zxcs.vo.TQuestions"fetch="select"cascade="none"><columnname="intQID"/></many-to-one><propertyname="strContent"type="java.lang.String"><columnname="strCONTENT"length="3000"/></property><propertyname="intIsanswer"type="java.lang.Integer"><columnname="intISANSWER"/></property></class></hibernate-mapping><hibernate-mapping><classname="org.zlj.zxcs.vo.TQuestions"table="T_QUESTIONS"schema="dbo"catalog="ONLINEEXAM"><idname="intId"type="java.lang.Integer"><columnname="intId"/><generatorclass="native"/></id><propertyname="strContent"type="java.lang.String"><columnname="strContent"length="3000"/></property>……<setname="tqelementset"table="t_Q_Elements"inverse="true" cascade="delete"lazy="false"> <key> <columnname="intQID"/> </key> <one-to-manyclass="org.zlj.zxcs.vo.TQElements"/></set></class></hibernate-mapping>在映射文件中的1對多關聯關系是用<set>元素來配置的。圖4-4是運行時的截圖,查詢出一個試題后,可以關聯得到它的試題選項。圖:4-4試題關聯得到試題選項4.3自動組卷模塊該模塊主要是教師錄入試卷的一些參數,供學生注冊時隨機生成試卷用。其頁面如圖4-5。在該頁面教師要依據題庫有符合條件的試題的數量來,填寫各種試題的數量。這里使用Ajax技術中的DWR框架,異步獲取試題庫中可用題目數量,當教師選擇試卷的科目和試卷的難度時,系統就會到數據庫中獲取與之匹配的題目數量,并把結果顯示出來。具體實現方法如下。第一步:安裝jar開發(fā)包。從DWR官方網站下載DWR開發(fā)包,這里使用的是DWR2.03這個開發(fā)包里包含了DWR運行所需的所有Java類和相應的API文檔。把該jar包放到工程的lib包里。第二步:修改現有工程的web.xml配置文件。參加一個Servlet配置,代碼如下。<servlet> <servlet-name>dwr-invoker</servlet-name> <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>true</param-value> </init-param> </servlet><servlet-mapping> <servlet-name>dwr-invoker</servlet-name> <url-pattern>/dwr/*</url-pattern></servlet-mapping>這段描述主要是告訴WEB應用程序,全部以“/dwr/〞起始的URL所指的請求都交給這個Servlet處理。圖4-5組卷參數頁面第三步:創(chuàng)立dwr.xml在WEB-INF文件夾下建立dwr.xml配置文件。代碼如下<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEdwrPUBLIC"-//GetAheadLimited//DTDDirectWebRemoting2.0//EN""://getahead.ltd.uk/dwr/dwr20.dtd"><dwr> <allow> <createcreator="new"javascript="JQuestionDao"> <paramname="class"value="org.zlj.zxcs.dao.QuestionDAO"/> <includemethod="getAviliableCount"/>…… </create> …… </allow></dwr>這段描述主要是把類轉換成Jscript對象JQuestionDao并且只暴露方法getAviliableCount,該方法用來完成獲取可用試題的數量。第四步:測試URL,查看是否轉換成功在瀏覽器里輸入://:8080/dwr,可以看到已經部署的所有java類,本例中,頁面信息如下:ClassesknowntoDWR:JSubjectDao(org.zlj.zxcs.dao.SubjectDAO)JExamDao(org.zlj.zxcs.dao.ExamDAO)JExamElementDao(org.zlj.zxcs.dao.ExamElementDAO)JQuestionDao(org.zlj.zxcs.dao.QuestionDAO)點擊JQuestionDao進入該類的方法部署頁面如圖4-6,在getAviliableCount中分別輸入java,2,111表示java科目中難度為簡單可用范圍是正式測驗的問題。點擊Execute可以查看方法的實際運行情況如圖4-7。到此說明DWR正常工作。圖4-6JQuestionDao類圖4-7DWR測試結果第五步:建立客戶端頁面,利用Javascript遠程調用Java類的方法頁面為://:8080/zxcs/teacher/examParamAdd.jsp,局部代碼如下,運行效果如圖4-8<scripttype='text/javascript' src='<%=basePath%>dwr/interface/JQuestionDao.js'></script><scripttype='text/javascript'src='<%=basePath%>dwr/engine.js'></script><scripttype='text/javascript'src='<%=basePath%>dwr/util.js'></script>…… //獲取題庫中的已有的個數 if(strSubName!="") JQuestionDao.getAviliableCount(strSubName,strLevel,"",showCheckValue);使用Ajax可以帶來可見的便捷:1、減輕效勞器的負擔。Ajax的原那么是“按需取數據〞,可以在相當的程度上減少冗余請求和響應對效勞器造成的負擔。2、無刷新更新頁面,減少用戶心里和實際等待的時間。特別地,當要讀取大量數據時,不會像Reload那樣出現白屏的情況。Ajax使用XMLRequest對象發(fā)送請求并的得到效勞器的響應,在不重載整個頁面的情況下,使用Javascript操作DOM更新頁面。所以在讀取數據的過程中,用戶面對的不是空白的屏幕,是原來的頁面內容〔也可以加點提示信息,讓用戶知道處于讀取數據的過程〕,只有當數據接收完后才更新相應的局部內容。這種更新是瞬間的,用戶幾乎感覺不到。3、帶來更好的用戶體驗。4、可以把以前一些效勞器的負擔工作轉嫁到客戶端,利用客戶端閑置的能力來處理,減輕效勞器和帶寬的負擔,節(jié)約空間和帶寬本錢。5、可以調用外部數據。6、基于標準化的并被廣泛支持的技術,無需下載插件或者小程序。7、進一步促進頁面呈現和數據的別離。圖4-8DWR調用遠程方法4.4試卷監(jiān)控模塊的功能是對教師發(fā)布出去的試卷,教師可以監(jiān)控所有注冊該試卷的學生和試卷的狀態(tài)。該功實現方法在于使用應用效勞器的application對象,來保存在線用戶信息,創(chuàng)立一個session監(jiān)聽器,當session失效時從application對象中去除該用戶的信息。在監(jiān)控頁面,獲取注冊了該試卷的所有學生和試卷的狀態(tài)然后獲取該學生的在線狀態(tài),通過頁面表格顯示出來。4.5批閱試卷對于收回的試卷,教師可以批閱其中的主觀題,該模塊是根據學生的試卷id獲取試卷中的試題信息包括試題的參考答案和學生所做的答案,最后教師結合實際情況給學生評分。4.6成績查詢對于教師用戶可以查詢參與由自己發(fā)布的試卷的成績。對于學生可以查詢自己所有的測試成績。主要是依賴與查詢條件的控制。4.7注冊考試學生可以注冊教師已經發(fā)布的試卷,在組卷時,先從試卷參數表中讀出參數,然后利用這些參數進行組卷。其中從題庫中隨機抽取n條試題時使用了mssql的selecttopn*fromtableNameorderbynewid(),而Hibernate的Session接口的Session.createSQLQuery(sql)方法可以生成原生SQL語句,這樣就可以使用它來完成隨機抽題了。4.8在線測試在線測試主要完成倒計時、分頁獲取試題、分頁保存答案、三個主要的功能。由于需要進行異步請求和局部更新頁面所以,這三個功能都是利用Ajax技術實現的,頁面運行效果如圖4-倒計時當頁面加載時,自動調用javaScript腳本利用DWR獲取考試剩余時間,利用javascript更新顯示時間區(qū)域秒針顯示。并把獲取時間的腳本設置為每一分鐘執(zhí)行一次。當剩余時間為0時候自動調用結束考試的方法,同樣此方法也是利用Ajax實現的。局部代碼如下://取得剩余時間 functiongetLeftTime(){ JExamDao.getTimes(examId,showTimes); } //顯示出剩余時間functionshowTimes(date){varlefttimes=$("timespace");if(date<=0){lefttimes.innerHTML=date;saveAnswer();//保存當頁答案alert("考試已經結束");JExamDao.endExam(examId,function(){top.location='<%=basePath%>logout.jsp';});}else{ lefttimes.innerHTML="剩余"+date+"分鐘"; showLeftSec();}}//顯示時間秒數functionshowLeftSec(){if(leftseconds<0){//如果秒到0就重新更新分鐘 leftseconds=59;//重新把秒針設為59 getLeftTime();//從數據庫中重新獲取剩余時間 }else{ $("leftsec").innerHTML=""+leftseconds+"秒"; leftseconds--; setTimeout("showLeftSec()",1000);//每秒更新一次秒針}}4.8.2分頁獲取試題獲取試卷中的試題,利用Hibernate的一對多的關系可以很容易的獲取試題和它所對應的試題選項,通過獲取試題的種類給予用戶不同的界面,如單項選擇題那么顯出單項選擇按鈕,多項選擇題顯示多項選擇按鈕,同時獲取學生做過的答案,并將其顯示在頁面上。利用Hibernate中Query接口setFirstResult設置開始的行數和setMaxResults設置最大行數讀取數據庫中的記錄,在頁面結合javascript動態(tài)設置起始行數。相關代碼見附錄。4.8.3分頁保存答案保存答案時把試題按兩種類型保存,如果是選擇性的題目保存被選中的選項的id,如果是輸入文本性的題目保存其輸入的文本。當學生點擊翻頁按鈕時觸發(fā)javascript腳本,利用Ajax進行保存當前頁面的試題答案。4.8.4自動閱卷當提交試卷時,系統會自動批閱試卷中的單項選擇題、多項選擇題、判斷題。評分時候分為兩種,一種是正確答案只有一個的,即單項選擇題和判斷題。此時只要比擬學生提交的答案〔選項的id〕和該試題的正確答案的選項id是否一樣即可。另外一種就是多項選擇題,此時可先把學生做的答案即多個選項的id封裝到一個Set集合中去,然后在獲取試題的正確選項的Set集合,利用Java中的Set集合equals方法,來判斷學生是否答對了此題。局部代碼如下://把學生所做的答案組合成一個set集合 if(strAnswer!=null){ String[]tempAnswer=strAnswer.split(","); for(inti=0;i<tempAnswer.length;i++){ IntegertemInt=newInteger(tempAnswer[i]); setStuAnswer.add(temInt);} //獲取問題的正確選項的id集合 while(tempIt.hasNext()){//問題選項 TQElementstempQE=(TQElements)tempIt.next(); Integertemp=tempQE.getIntIsanswer(); //把問題的正確答案的選項id放入集合中 if(Value()==1){ IntegerintQEID=tempQE.getIntId(); setQEID.add(intQEID);}}//比照學生所做的答案集合與問題的正確選項id集合 if(setStuAnswer.size()>0&&setQEID.size()>0 &&setStuAnswer.equals(setQEID)){ corExeIdSet.add(exeID); }}5系統的性能和平安在系統的設計和編碼時候考慮到系統的性能和平安的問題主要采取的策略如下。1.采用數據庫連接池。Tomcat提供了一個較為成熟的數據庫連接池DBCP連接池,利用連接池可以使系統減少建立與數據庫的連接次數。節(jié)約系統的珍貴支援,提高系統的負載量。2.合理配置數據庫連接池,以提高系統的性能和平安。當web應用效勞器發(fā)異常時候可能會使當前數據庫連接失效。而失效的連接如不及時的回收可能會造成系統的崩潰。Tomcat配置文件中的可以指定連接池自動回收失效的連接代碼如下:<parameter><name>removeAbandoned</name><!--AbandonedDBconnectionsareremovedandrecycled--><value>true</value></parameter><parameter><name>removeAbandonedTimeout</name><!--UsetheremoveAbandonedTimeoutparametertosetthenumberofsecondsaDBconnectionhasbeenidlebeforeitisconsideredabandoned.--><value>60</value></parameter>3.利用Hibernate的Query接口的查詢功能,防止出現SQL注入漏洞。發(fā)生此種情況有主要有兩個原因。一是如果直接用頁面的參數拼接SQL語句,如果參數為SQL語句中的特殊字符如單引號,可能會造成SQL語法錯誤而導致程序出錯。例如下面這個用戶登錄的代碼就會出錯。Stringsql=〞select*fromuserwhereusername=’〞+userName+〞’andpassword=’〞+passWord+〞’〞當userName是一個單引號時候就會導致SQL語法錯誤。而采用Hibernate的Query接口時候,可以使用占位符解決這個問題。代碼如下:Stringhql=〞fromTuserwhereusername=?Andpassword=?〞Queryquery=Session.CreateQuery(sql);query.setString(1,userName);query.setString(2,passWord);第二種情況是沒有充分考慮到程序的邏輯問題。同樣對于第一種情況如果userName=“a〞passWord=〞b’or1=1〞。雖然不會導致SQL語句出錯,但是這條語句會使用戶通過驗證。解決的方法是改良代碼,先利用Hibernate的Query接口查出符合條件的用戶,然后在取出該用戶的密碼比擬與用戶輸入的密碼是否一致此時就可以有效的防止SQL注入漏洞了。4.在查詢頁面采用分頁查詢,減輕效勞器與客戶端的負擔。利用Hibernate中Query接口setFirstResult設置開始的行數和setMaxResults設置最大行數讀取數據庫中的記錄,在頁面結合javascript動態(tài)設置起始行數。5.批量增加和更新數據庫。在組卷的時候,需要大量屢次的向數據庫插入和更新數據。此次可以利用Hibernate的批量插入和更新減少與數據庫的交互次數提高系統的執(zhí)行效率。局部代碼如下:while(it.hasNext()){ ……//批量插入session.save(examElements);i++;if(i%20==0){//將本批插入的對象立即寫入數據庫并釋放內存session.flush();session.clear();}}6.在系統的配置文件中參加默認頁面和自己的異常處理。給系統參加一個默認頁面可以防止列表目錄的發(fā)生,同時指定自己的錯誤頁面可以有效的減輕系統暴露代碼信息。利用錯誤頁,捕獲自己的異??梢越o用戶良好的提示。局部配置代碼如下:<!--歡送頁--> <welcome-file-list> <welcome-file>login.jsp</welcome-file> </welcome-file-list> <!--錯誤頁--> <error> <exception-type> </exception-type> <location>/include/error/advice.jsp</location> </error> <error> <error-code>404</error-code> <location>/include/error/404error.jsp</location> </error> <error> <error-code>500</error-code> <location>/include/error/500error.jsp</location> </error>6小結本系統采用了相關穩(wěn)定技術和框架提高系統的可維護性,在編寫代碼的同時盡量做的代碼的標準性。在設計和實現系統時候,注重提高系統的擴展性和系統的執(zhí)行效率。然而由于技術和時間有限有些方面還需改良。參考文獻[1]RyanAsleson,NathanielT.Schutta.FoundationsofAjax[M].金靈譯人民郵電出版社.2006[2]孫衛(wèi)琴.精通Hibernate[M].北京,電子工業(yè)出版社.2005[3]劉彬.JSP數據庫高級教程[M].北京,清華大學出版社.2006[4]SueSpielman,MeerajKunnumpurath.J2EE1.4編程指南[M].馬樹奇,金燕譯.北京,電子工業(yè)出版.2005[5]洪峰,吳云飛.AJAX技術優(yōu)化在線考試流量[J].長沙通信職業(yè)技術學院學報,第5卷第3期2006年9月:56-61[6]柴進,姚全珠,孫楹,孫榮榮.基于J2EE平臺的在線考試系統的設計與實現[J].寧夏工程技術第1卷第3期2002年11月:235-237[7]柯自聰.Ajax開發(fā)精要[M].北京,電子工業(yè)出版社.2006[8]BrianWright、MichaelFreedman.JSPAPPLICATION DEVELOPMENTINDATAWAREHOUSE[M].北京,北京希望電子出版社.2001[9]BRUCEECKEL.THINKINGINJAVA[M].北京,機械工業(yè)出版社.2005英文摘要DesignandImplementationoftheJavaLearningPlatformfortheExchangebasedonJspOnlinetestingandQuestionsAbstract:Thisthesisintroducesthestructureofweb-basedapproachandb/smodeofonlinetestingsystem.ThecurrentmorepopularwebapplicationsandframeworkssuchasJSP,Java,AjaxandORMtechnologyisintroducedespecially.Andasatheoreticalbasisandpracticalbasis,withwebapplicationsanddatabasetechnologywedesignedandimplementedanonlinetestingsystem.Thesystemisb/smodetoachieveafunctionoftestingquestionsforthemaintenance,generatingpaperautomatically,markingobjectivequestionsautomatically,reviewingsubjectivequestionsbyteachers,onlinetestingandqueryingtestingresults.Keywords:OnlineTestingJSPAjaxHibernateServlet致謝在這四年的學習生活中,學校嚴謹的治學作風、良好的學習氣氛、老師們認真的工作態(tài)度,都給我留下了非常深刻的印象。大學里我學到了很多知識,同時我也學到了如何學習的能力。在各科教師的啟發(fā)和指引下,分析問題的能力有很大提高。整個大學生活是我人生中重要的一筆財富。在我的整個畢業(yè)設計的制作過程中,得到了老師的細心指導和關心。在此,我特別表示衷心的感謝!
附錄web工程配置文件web.xml:<?xmlversion="1.0"encoding="UTF-8"?><web-appversion="2.4"xmlns="://java.sun/xml/ns/j2ee" xmlns:xsi=":///2001/XMLSchema-instance" xsi:schemaLocation= ://java.sun/xml/ns/j2ee/web-app_2_4.xsd"> <!--部署名稱--> <display-name>zxcs</display-name> <!--<context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/perties</param-value> </context-param> --><context-param> <param-name>title</param-name> <param-value>java在線測試系統</param-value> </context-param> <!--過濾器--> <filter> <description>encodeFilter</description> <filter-name>encodeFilter</filter-name> <filter-class></filter-class> <init-param> <param-name>encodeType</param-name> <param-value>GBK</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodeFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> <description>studentUserFilter</description> <filter-name>studentUserFilter</filter-name> <filter-class></filter-class> </filter> <filter-mapping> <filter-name>studentUserFilter</filter-name> <url-pattern>/student/*</url-pattern> </filter-mapping> <filter> <description>teacherUserFilter</description> <filter-name>teacherUserFilter</filter-name> <filter-class></filter-class> </filter> <filter-mapping> <filter-name>teacherUserFilter</filter-name> <url-pattern>/teacher/*</url-pattern> </filter-mapping><!—系統監(jiān)聽器--> <listener> <description>SystemContextListener</description> <listener-class> </listener-class> </listener> <!--servlet--> <servlet> <description>login</description> <display-name>login</display-name> <servlet-name>Login</servlet-name> <servlet-class></servlet-class> </servlet> <servlet> <servlet-name>dwr-invoker</servlet-name> <servlet-class></servlet-class> <init-param> <param-name>debug</param-name> <param-value>false</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>dwr-invoker</servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Login</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping> <!--歡送頁--> <welcome-file-list> <welcome-file>login.jsp</welcome-file> </welcome-file-list> <!--錯誤頁--> <error> <exception-type> </exception-type> <location>/include/error/advice.jsp</location> </error> <error> <error-code>404</error-code> <location>/include/error/404error.jsp</location> </error> <error> <error-code>500</error-code> <location>/include/error/500error.jsp</location> </error> <!--session有效期單位分鐘--> <session-config> <session-timeout>30</session-timeout> </session-config> <mime-mapping> <extension>ico</extension> <mime-type>image/x-icon</mime-type> </mime-mapping></web-app>Hibernate配置文件(hibernate.cfg.xml):<?xmlversion='1.0'encoding='UTF-8'?><!DOCTYPEhibernate-configurationPUBLIC"-//Hibernate/HibernateConfigurationDTD3.0//EN"":///hibernate-configuration-3.0.dtd"><!--GeneratedbyMyEclipseHibernateTools.--><hibernate-configuration><session-factory> <propertyname="dialect"> </property> <propertyname="connection.datasource"> java:comp/env/jdbc/zxcs </property> <propertyname="show_sql">false</property> <propertyname="jdbc.batch_size">20</property> <mappingresource="org/zlj/zxcs/vo/TSubjects.hbm.xml"/> <mappingresource="org/zlj/zxcs/vo/TExamParam.hbm.xml"/> <mappingresource="org/zlj/zxcs/vo/TQuestions.hbm.xml"/> <mappingresource="org/zlj/zxcs/vo/TExams.hbm.xml"/> <mappingresource="org/zlj/zxcs/vo/TTeachers.hbm.xml"/> <mappingresource="org/zlj/zxcs/vo/TStudents.hbm.xml"/> <mappingresource="org/zlj/zxcs/vo/TQElements.hbm.xml"/> <mappingresource="org/zlj/zxcs/vo/TClass.hbm.xml"/> <mappingresource="org/zlj/zxcs/vo/TExamElements.hbm.xml"/> <mappingresource="org/zlj/zxcs/vo/TChapts.hbm.xml"/></session-factory></hibernate-configuration>Hibernate映射文件中問題表映射文件〔TQuestions.hbm.xml〕<?xmlversion="1.0"encoding="utf-8"?><!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN"":///hibernate-mapping-3.0.dtd"><!--MappingfileautogeneratedbyMyEclipse-HibernateTools--><hibernate-mapping><classname="org.zlj.zxcs.vo.TQuestions"table="T_QUESTIONS"schema="dbo"catalog="ONLINEEXAM"><idname="intId"type="java.lang.Integer"><columnname="intId"/><generatorclass="native"/></id><propertyname="strContent"type="java.lang.String"><columnname="strContent
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 稅法考試題庫及答案
- 數學益智題目及答案
- 2026年IT項目經理崗面試題及答案解析
- 2026年文化創(chuàng)意產業(yè)項目經理應聘題目集
- 2026年總工程師的考核方法及效果評估
- 火電安全生產情況分析講解
- 2025年企業(yè)環(huán)保設施建設與運行手冊
- 企業(yè)內部培訓與企業(yè)文化手冊(標準版)
- 美容護膚產品研發(fā)與指導手冊
- 2025年農業(yè)技術推廣人員培訓手冊
- 浙江省高級法院公布十大民間借貸典型案例
- GA 1809-2022城市供水系統反恐怖防范要求
- YS/T 1148-2016鎢基高比重合金
- JJF 1143-2006混響室聲學特性校準規(guī)范
- GB/T 39597-2020出租汽車綜合服務區(qū)規(guī)范
- 兒童舌診解析
- GB/T 12060.3-2011聲系統設備第3部分:聲頻放大器測量方法
- GB/T 10760.1-2003離網型風力發(fā)電機組用發(fā)電機第1部分:技術條件
- 四年級數學下冊解決問題練習題
- 《康復評定技術》考試復習題庫(含答案)
- 幼兒園四季交替課件
評論
0/150
提交評論