畢業(yè)論文 基于jsp在線考試系統(tǒng)設(shè)計(jì)_第1頁
畢業(yè)論文 基于jsp在線考試系統(tǒng)設(shè)計(jì)_第2頁
畢業(yè)論文 基于jsp在線考試系統(tǒng)設(shè)計(jì)_第3頁
畢業(yè)論文 基于jsp在線考試系統(tǒng)設(shè)計(jì)_第4頁
畢業(yè)論文 基于jsp在線考試系統(tǒng)設(shè)計(jì)_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

畢業(yè)論文基于jsp在線考試系統(tǒng)設(shè)計(jì)1引言 22系統(tǒng)運(yùn)行環(huán)境和功能簡介 22.1系統(tǒng)運(yùn)行環(huán)境 22.2系統(tǒng)功能模塊劃分 23系統(tǒng)的體系結(jié)構(gòu) 43.1系統(tǒng)效勞器開發(fā)語言JSP 43.2數(shù)據(jù)層 5關(guān)系型數(shù)據(jù)庫mssql2000+sp3 5數(shù)據(jù)庫連接池 53.2.3Hibernate框架 63.3前臺(tái)交互 7交互方式 73.3.2Ajax技術(shù) 73.3.3DWR 84系統(tǒng)的具體設(shè)計(jì)和實(shí)現(xiàn) 94.1系統(tǒng)的數(shù)據(jù)庫設(shè)計(jì) 94.2題庫管理模塊 114.2.1保存、更新、刪除試題 114.2.2查詢?cè)囶} 134.2.3試題與選項(xiàng)關(guān)聯(lián) 144.3自動(dòng)組卷模塊 174.4試卷監(jiān)控 224.5批閱試卷 224.6成績查詢 234.7注冊(cè)考試 234.8在線測試 23倒計(jì)時(shí) 24分頁獲取試題 25分頁保存答案 25自動(dòng)閱卷 255系統(tǒng)的性能和平安 266小結(jié) 28參考文獻(xiàn) 28英文摘要 29致謝 29附錄 30基于jsp在綫考試系統(tǒng)摘要:本文闡述了運(yùn)用b/s模式設(shè)計(jì)在線測試系統(tǒng)的思想,介紹了當(dāng)前較流行的web應(yīng)用技術(shù)和框架JSP、Java、Ajax和ORM技術(shù),并以此為理論根底和實(shí)踐依據(jù),在Hibernate框架下結(jié)合數(shù)據(jù)庫連接池技術(shù),設(shè)計(jì)并實(shí)現(xiàn)了在線測試系統(tǒng)。完成了試題庫的維護(hù)、自動(dòng)組卷、自動(dòng)閱卷〔客觀題〕、教師批閱〔主觀題〕、學(xué)生在線測試、成績查詢各項(xiàng)功能。關(guān)鍵字:在線測試JSPAjaxHibernateServlet1引言隨著計(jì)算機(jī)技術(shù),尤其是計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的開展及其不斷深入的普及。在21世紀(jì)信息時(shí)代已經(jīng)到來的今天,網(wǎng)絡(luò)對(duì)于人們來說已不再是一個(gè)陌生的概念。從個(gè)人到學(xué)校、公司、機(jī)關(guān),網(wǎng)絡(luò)已經(jīng)并將繼續(xù)影響著人們的生活、學(xué)習(xí),必將對(duì)社會(huì)各行各業(yè)產(chǎn)生重大影響。學(xué)校作為培養(yǎng)人才的基地,更應(yīng)該走在信息時(shí)代的前沿。如何利用網(wǎng)絡(luò)來提高教學(xué)的質(zhì)量和效率,克服傳統(tǒng)教學(xué)的弊端,如何架起學(xué)生與教師以及學(xué)生與學(xué)生的網(wǎng)絡(luò)交流平臺(tái),已成為教育者不得不考慮的現(xiàn)實(shí)問題。本系統(tǒng)著重研究在線測試系統(tǒng)的實(shí)現(xiàn),充分利用web應(yīng)用給我們帶來的便利,結(jié)合各種流行高效的技術(shù),利用web方式對(duì)題庫進(jìn)行管理和維護(hù),提供自動(dòng)生成試卷、自動(dòng)閱卷、在線測試、查閱分?jǐn)?shù)等功能,大大的節(jié)省了時(shí)間和精力,以到達(dá)輔助教學(xué),提高教學(xué)效率的目的。2系統(tǒng)運(yùn)行環(huán)境和功能簡介2.1系統(tǒng)運(yùn)行環(huán)境操作系統(tǒng):WindowsXp/WindowsNTWeb應(yīng)用效勞器:Tomcat5.5.26〔需要JDK1.5以上〕數(shù)據(jù)庫:MSSQL2000+sp32.2系統(tǒng)功能模塊劃分本系統(tǒng)主要實(shí)現(xiàn)的功能有:題庫管理、組卷、試卷監(jiān)控、批閱試卷、注冊(cè)考試、在線測試、成績查詢。功能如圖2-1:圖2-1系統(tǒng)功能圖題庫管理:教師用戶可以增加、修改、刪除、查詢題庫中的試題。本系統(tǒng)的試題種類包括單項(xiàng)選擇、多項(xiàng)選擇、填空、判斷、簡答和編程。其中問題的選項(xiàng)也可以進(jìn)行管理,并且教師可以指定這些問題的作用范圍,例如是否可以用于在線測試等。組卷:系統(tǒng)會(huì)保存教師填寫的試卷參數(shù),供學(xué)生注冊(cè)時(shí)自動(dòng)隨機(jī)組卷。試卷監(jiān)控:發(fā)布出去的試卷,教師可以監(jiān)控所有注冊(cè)該試卷的學(xué)生和試卷的狀態(tài)。批閱試卷:考試結(jié)束,收回的試卷其中的主觀題目教師可以進(jìn)行批閱。注冊(cè)考試:當(dāng)教師發(fā)布試卷后學(xué)生可以進(jìn)行注冊(cè)。在線測試:注冊(cè)后的試卷,學(xué)生可以進(jìn)行在線測試。成績查詢:批閱后的試卷,學(xué)生可以查到自已的得分,教師可以按學(xué)生的姓名,查詢學(xué)生的得分。3系統(tǒng)的體系結(jié)構(gòu)整個(gè)系統(tǒng)采用表示層/業(yè)務(wù)邏輯層/數(shù)據(jù)層的三層體系結(jié)構(gòu)。系統(tǒng)結(jié)構(gòu)如圖3-1。圖3-1系統(tǒng)體系結(jié)構(gòu)圖3.1系統(tǒng)效勞器開發(fā)語言JSP系統(tǒng)效勞器編程采用最常用的JSP技術(shù),JSP(JavaServerPage)是Sun公司在1999年發(fā)布的J2EE的重要組成局部,是基于JavaServlet以及整個(gè)Java體系的Web開發(fā)技術(shù),為企業(yè)級(jí)Web的站點(diǎn)動(dòng)態(tài)網(wǎng)頁開發(fā)人員提供了一種非常簡單卻有效的工具。JSP與ASP有許多相似之處,都是為基于Web應(yīng)用實(shí)現(xiàn)動(dòng)態(tài)網(wǎng)頁制作提供的技術(shù)環(huán)境支持,JSP有以下優(yōu)點(diǎn):①將內(nèi)容的生成和顯示別離.使用JSP技術(shù),Web頁面開發(fā)者可以使用HTML或XML標(biāo)志或者小腳本來生成頁面上的動(dòng)態(tài)內(nèi)容.生成內(nèi)容的邏輯被封裝在標(biāo)志和JavaBeans組件中,并且被捆綁到小腳本中,所有的腳本在效勞器端運(yùn)行。②強(qiáng)調(diào)可重用的組件。絕大多數(shù)JSP頁面依賴于可重用的、跨平臺(tái)的組件(JavaBeans或EJB)來執(zhí)行應(yīng)用程序所要求的更為復(fù)雜的處理,基于組件的方法加速了總體開發(fā)過程。③硬件平臺(tái)和效勞器無關(guān)。JSP作為Java的組成局部,繼承了Java技術(shù)的“一次編寫,隨處可用(Writeonce,runanywhere)〞的特性,可以運(yùn)行于大多數(shù)流行的操作系統(tǒng)平臺(tái)及Web效勞器。這種與效勞器和操作系統(tǒng)平臺(tái)的無關(guān)性是JSP相對(duì)于其它動(dòng)態(tài)網(wǎng)頁技術(shù)最大的一個(gè)優(yōu)點(diǎn)。④與Java平臺(tái)有機(jī)集成。JSP技術(shù)是J2EE平臺(tái)的重要組成局部。JSP使用Java語言作為它的腳步語言,在JSP頁面中可以使用幾乎所有的Java組件和JavaAPI,從而可以發(fā)揮Java語言的強(qiáng)大功能。使用JSP技術(shù)可以創(chuàng)立具有高度可伸縮性和可靠性的Web應(yīng)用程序。⑤功能可擴(kuò)展性。JSP可以通過JavaBean和EJB以及自定義的標(biāo)記來擴(kuò)展功能,也可以通過JDBC與Oracle,DB2,SQLServer等大型關(guān)系數(shù)據(jù)庫進(jìn)行連接;另外JSP提供了一些隱含對(duì)象,可以使腳步功能更加強(qiáng)大,并且編程更加容易、方便。例如利用Request對(duì)象,可方便地接收用戶在HTML表單中提交的信息。利用session對(duì)象可以跟蹤用戶狀態(tài),利用application對(duì)象可以得到當(dāng)前應(yīng)用效勞的全局信息。系統(tǒng)中的在線學(xué)生的信息就是保存在application中。3.2數(shù)據(jù)層3.2.1關(guān)系型數(shù)據(jù)庫mssql2000+sp3MicrosoftSQLServer2000數(shù)據(jù)庫系統(tǒng)是在WindowsNT環(huán)境下開發(fā)的一種全新的關(guān)系型數(shù)據(jù)庫系統(tǒng),是開展最快的關(guān)系數(shù)據(jù)庫。SQlServer2000具有大型數(shù)據(jù)庫系統(tǒng)的一些根本功能,支持事務(wù)處理功能、支持?jǐn)?shù)據(jù)庫加密、設(shè)置用戶組別或用戶的密碼和權(quán)限等等。SQLServer2000是一個(gè)具備完全Web支持的數(shù)據(jù)庫產(chǎn)品,提供了以Web標(biāo)準(zhǔn)為根底的擴(kuò)展數(shù)據(jù)庫編程功能。由于最初的SqlServer2000并沒有把1433端口翻開,所以需要給SQLServer2000打個(gè)Sp3補(bǔ)丁。3.2.2數(shù)據(jù)庫連接池在根本的數(shù)據(jù)源〔DataSource〕實(shí)現(xiàn)中,物理的數(shù)據(jù)庫連接和客戶端的連接對(duì)象〔ConnectionObject〕有著一比一的對(duì)應(yīng)關(guān)系。當(dāng)連接對(duì)象關(guān)閉的時(shí)候,物理的連接也隨之關(guān)閉。這樣一個(gè)客戶的會(huì)話都要花費(fèi)資源去翻開,初始化和關(guān)閉物理連接。對(duì)于這個(gè)資源的消耗問題,可以用連接池〔ConnectionPool〕來解決。連接池中有以保持一個(gè)數(shù)據(jù)庫物理連接的高速緩存,會(huì)話可以重復(fù)利用存儲(chǔ)在緩存中的連接。連接池可以極大地提高性能,在多個(gè)客戶端共享少量的物理連接的三層網(wǎng)絡(luò)環(huán)境下表現(xiàn)的尤為突出。圖3-2表示了JDBC驅(qū)動(dòng)程序提供了一個(gè)應(yīng)用效勞器用來建立和管理連接池ConnectionPoolDataSource的實(shí)現(xiàn)。在本系統(tǒng)中充分利用了Tomcat提供的dbcp數(shù)據(jù)庫連接池功能。在多用戶并發(fā)訪問數(shù)據(jù)庫的時(shí)候,利用連接池緩存數(shù)據(jù)庫的連接,可以減少建立數(shù)據(jù)庫連接造成的系統(tǒng)資源開銷。同時(shí)dbcp連接池也提供了自動(dòng)釋放無效的數(shù)據(jù)庫連接來防止系統(tǒng)由于數(shù)據(jù)庫連接泄露造成系統(tǒng)崩潰。圖3-2連接池的運(yùn)作3.2.3Hibernate框架一般來說在數(shù)據(jù)層,我們可以用jsp直接調(diào)用sql語句操縱數(shù)據(jù)庫,或者在JavaBean中利用sql語句執(zhí)行數(shù)據(jù)庫操縱。然而,這樣會(huì)使我們?cè)陂_發(fā)時(shí)候,把注意力過多的集中到sql語句上,同時(shí)系統(tǒng)的可維護(hù)性,和編寫代碼的效率很低。所以本系統(tǒng)中采用了ORM〔對(duì)象關(guān)系映射〕技術(shù)中的Hibernate框架結(jié)合DAO模式完成數(shù)據(jù)層的對(duì)象持久化的問題。在編寫代碼的時(shí)候,我們只要操縱Java中的對(duì)象,剩下的對(duì)象與數(shù)據(jù)的轉(zhuǎn)換就交給Hibernate去處理了。這樣系統(tǒng)的可維護(hù)性和開發(fā)效率就會(huì)有很大的提高。同時(shí)利用Hibernate從tomcat提供的JNDI連接池獲取數(shù)據(jù)庫連接,將其封裝成Hibernate的Session,通過Session來處理對(duì)象的保存,更新,刪除操作。Hibernate結(jié)合DAO實(shí)現(xiàn)對(duì)象的持久化,工作原理如圖3-3。圖3-3Hibernate結(jié)合DAO實(shí)現(xiàn)對(duì)象的持久化3.3前臺(tái)交互3.3.1交互方式在前臺(tái)與效勞器端的交互,系統(tǒng)中有兩種方式,一種是常見的form表單提交的方式,此種方式應(yīng)用在如系統(tǒng)用戶登錄的時(shí)候。當(dāng)用戶填寫用戶名和密碼把表單提交到效勞器端,效勞器端接收到數(shù)據(jù)后,進(jìn)行業(yè)務(wù)處理,驗(yàn)證用戶明和密碼后,把結(jié)果返回給瀏覽器。另外一種是客戶端以異步請(qǐng)求的方式與效勞器端交互。在做數(shù)據(jù)驗(yàn)證,在線考試的剩余時(shí)間的獲取和刷新時(shí),這些都需要與效勞器進(jìn)行異步通信和局部刷新頁面。3.3.2Ajax技術(shù)Ajax這個(gè)名詞是一位叫JesseJamesGarrett的美國人創(chuàng)造的。Jesse是AdaptivePath公司負(fù)責(zé)用戶體驗(yàn)策略的主管,他在2005年2月18日發(fā)表了一篇題為?Ajax:一個(gè)Web應(yīng)用的新途徑?的論文。在文中他給出了Ajax的定義。Ajax不是一種技術(shù)。實(shí)際上,它由幾種蓬勃開展的技術(shù)以新的強(qiáng)大方式組合而成。Ajax包含:1、基于CSS標(biāo)準(zhǔn)的表示;2、使用DocumentObjectModel進(jìn)行動(dòng)態(tài)顯示和交互;3、使用XMLRequest與效勞器進(jìn)行異步通信;4、使用JavaScript綁定一切。Ajax工作原理如下:1.客戶斷利用XMLRequest對(duì)象向效勞器發(fā)送異步請(qǐng)求2.效勞器端接受到請(qǐng)求后進(jìn)行業(yè)務(wù)處理,處理完后把結(jié)果返回客戶端3.客戶端接受到返回響應(yīng)后,進(jìn)行更新頁面等操作。各種技術(shù)在Ajax中的作用如圖3-4。圖3-4各種技術(shù)在Ajax中的作用3.3.3DWRDWR〔DirectWebRemoting〕是getahead公司開發(fā)的一個(gè)實(shí)現(xiàn)Ajax應(yīng)用的框架。它允許客戶端Javascript遠(yuǎn)程調(diào)用效勞器端的Java類的方法,執(zhí)行相關(guān)的事物操作。DWR主要包含兩個(gè)主要局部,其一是運(yùn)行在瀏覽器端的Javascript,這局部被用來與效勞器通信,并更新頁面內(nèi)容:其二是運(yùn)行在效勞器端的JavaServlet,這局部被用來處理請(qǐng)求并將響應(yīng)結(jié)果返回給瀏覽器。 DWR采取了一種動(dòng)態(tài)生成基于Java類的Javascript代碼的方法來實(shí)現(xiàn)和處理Ajax。這樣Web開發(fā)人員就可以在Javascript里像使用瀏覽器本地代碼一樣使用Java代碼,而實(shí)際上這些Java代碼是運(yùn)行在效勞器端并且可以自由訪問Web效勞器資源的。處于平安考慮,Web開發(fā)人員可以根據(jù)要求進(jìn)行適當(dāng)?shù)呐渲脕頉Q定哪些Java類可以平安的被外部使用。4系統(tǒng)的具體設(shè)計(jì)和實(shí)現(xiàn)4.1系統(tǒng)的數(shù)據(jù)庫設(shè)計(jì)結(jié)合系統(tǒng)的功能和分析,數(shù)據(jù)庫的設(shè)計(jì)模型如圖:4-1.問題選項(xiàng)表T_Q_ELEMENTS,問題表T_QUESTIONS,學(xué)生信息表T_STUDENTS,教師表T_TEACHERS,科目表T_SUBJECTS,章節(jié)表T_CHAPTS,班級(jí)表T_CLASS,試卷參數(shù)表T_EXAM_PARAM,學(xué)生試卷表T_EXAMS,試卷組成元素表T_EXAM_ELEMENTS。教師在頁面添加試卷的參數(shù)向試卷參數(shù)表〔T_EXAM_PARAM〕中添加參數(shù)后,發(fā)布此試卷,學(xué)生可以注冊(cè)考試,注冊(cè)時(shí)首先會(huì)從試卷參數(shù)表〔T_EXAM_PARAM〕中讀取相應(yīng)的參數(shù)如單項(xiàng)選擇題個(gè)數(shù)等,利用這些參數(shù)從題目表〔T_QUESTIONS〕中隨機(jī)選取問題,而這些問題的選項(xiàng)可以從問題選項(xiàng)表〔T_Q_ELEMENTS〕關(guān)聯(lián)查出,然后把這些問題的id添加到試卷組成元素表〔T_EXAM_ELEMENTS〕中,最后生成學(xué)生試卷表〔T_EXAMS〕。當(dāng)學(xué)生在線答題時(shí),會(huì)跟據(jù)學(xué)生試卷(T_EXAMS)的id查出試卷組成元素表中的記錄得到問題id,利用問題的id得到問題和相關(guān)聯(lián)的問題選項(xiàng)。學(xué)生保存答案時(shí)按題型分為兩種情況,一是保存選擇性的題目,此時(shí)就把被選中的問題的選項(xiàng)的id存入試卷組成元素表中對(duì)應(yīng)的學(xué)生答案字段中。另外就是非選擇性題目,即需要輸入文字的題目,此時(shí)把輸入的文字存入成元素表中對(duì)應(yīng)的學(xué)生答案字段中。其中需要說明的是在實(shí)際編寫代碼時(shí),對(duì)數(shù)據(jù)庫做了一些改良。如問題表〔T_QUESTIONS〕與科目表〔T_SUBJECTS〕間的關(guān)聯(lián)是用問題表中的科目名稱〔strSUBName〕與科目表中的科目名稱〔strNAME〕。同時(shí)教師和科目間的關(guān)聯(lián)關(guān)系,在本系統(tǒng)中還沒有應(yīng)用到,但是出于以后的擴(kuò)展考慮,仍然在教師表中建立一個(gè)字段科目的id。所以在設(shè)計(jì)數(shù)據(jù)庫時(shí)并不是一味的追求數(shù)據(jù)庫設(shè)計(jì)的標(biāo)準(zhǔn)性,而是結(jié)合實(shí)際情況,以提高系統(tǒng)效率為目的。因此某些冗余字段的出現(xiàn),也正是出于此目的,例如試卷參數(shù)表〔試卷參數(shù)表〕中的試卷名稱strNAME與學(xué)生試卷表中的試卷名稱strName,就是冗余字段,當(dāng)需要查出某學(xué)生參加的考試名稱時(shí)就無需關(guān)聯(lián)試卷參數(shù)表,這樣就可以減少系統(tǒng)的開銷,提高查詢速度。圖4-1:系統(tǒng)數(shù)據(jù)庫模型圖4.2題庫管理模塊該模塊主要是教師用戶可以增加、修改、刪除、查詢題庫中的試題。本系統(tǒng)的試題種類包括單項(xiàng)選擇、多項(xiàng)選擇、填空、判斷、簡答和編程。其中問題的選項(xiàng)也可以進(jìn)行管理,并且教師可以指定這些問題的作用范圍,例如是否可以用于在線測試等。實(shí)現(xiàn)對(duì)題庫中的試題的增加、刪除、修改、查詢時(shí),始終直接操作都是相關(guān)的Java對(duì)象QuestionDAO,在這個(gè)java類里封裝了對(duì)試題對(duì)象TQuestions的操作.這樣的一個(gè)開發(fā)模式就是DAO〔數(shù)據(jù)訪問對(duì)象〕模式。而最終把對(duì)象轉(zhuǎn)換到數(shù)據(jù)庫中的是利用Hibernate來實(shí)現(xiàn)的。下面就詳細(xì)的介紹這個(gè)模塊的實(shí)現(xiàn)和用到的相關(guān)技術(shù)。4.2.1保存、更新、刪除試題Session接口是Hibernate向應(yīng)用程序提供的操縱數(shù)據(jù)庫的最主要接口,它提供了根本的保存、更新、刪除和查詢方法。Session具有一個(gè)緩存,位于緩存中的對(duì)象處于持久化狀態(tài),它和數(shù)據(jù)庫中的相關(guān)記錄對(duì)應(yīng),Session能夠在某些時(shí)間點(diǎn),按緩存中持久化對(duì)象的屬性變化來同步更新數(shù)據(jù)庫,這一過程被稱為清理緩存。除了持久化狀態(tài),對(duì)象還能處于其他狀態(tài),Session的特定方法能使對(duì)象從一個(gè)狀態(tài)轉(zhuǎn)換到另一個(gè)狀態(tài)。對(duì)于需要被持久化的Java對(duì)象,在它的生命周期中,可處于以下三個(gè)狀態(tài).臨時(shí)狀態(tài)(transient):剛剛用new語句創(chuàng)立,還沒有被持久化,不處于Session的緩存中。沒有和數(shù)據(jù)庫記錄相關(guān)聯(lián)的Java對(duì)象被稱為臨時(shí)對(duì)象。.持久化狀態(tài)(persistent):已經(jīng)被持久化,參加到Session的緩存中。被固化到數(shù)據(jù)庫中的Java對(duì)象被稱為持久化對(duì)象。.游離狀態(tài)(detached):已經(jīng)被持久化,但不再處于Session的緩存中。其對(duì)應(yīng)的Session實(shí)例己被關(guān)閉的Java對(duì)象被稱為游離對(duì)象。Java對(duì)象的完整狀態(tài)轉(zhuǎn)換圖如圖4-1所示,Session的特定方法觸發(fā)Java對(duì)象由一個(gè)狀態(tài)轉(zhuǎn)換到另一個(gè)狀態(tài)。從圖4-1看出,當(dāng)Java對(duì)象處于臨時(shí)狀態(tài)或游離狀態(tài),只要不被任何變量引用,就會(huì)結(jié)束生命周期,它占用的內(nèi)存就可以被JVM的垃圾回收器回收;當(dāng)處于持久化狀態(tài),由于Session的緩存會(huì)引用它,因此它始終處于生命周期中。圖:4-2Hibernate中對(duì)象狀態(tài)轉(zhuǎn)換圖下面是更新問題和刪除問題的局部代碼:***更新問題*@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; }}從上面的代碼中可以看出操作的是一個(gè)Java對(duì)象,而在底層有Hibernate處理,把對(duì)象的操作,轉(zhuǎn)換成對(duì)數(shù)據(jù)庫的操作。4.2.2查詢?cè)囶}從數(shù)據(jù)庫中檢索對(duì)象是使用Hibernate最復(fù)雜的局部。HQL檢索,HQL(HibernateQueryLanguage)是與其相似的關(guān)系型查詢語言SQL的面向?qū)ο蠓窖?。它可以?shí)現(xiàn)分頁查詢功能,而且利用占位符可以有效的防止SQL語句錯(cuò)誤造成的系統(tǒng)異常甚至崩潰。并且它支持分頁查詢,在大量數(shù)據(jù)中可以只分頁獲取數(shù)據(jù)減小效勞器的不必要的資源開銷。下面是一個(gè)分頁查詢題庫中的試題的一個(gè)公共的方法。/***按試卷id查出所有與試卷相關(guān)的問題*@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試題與選項(xiàng)關(guān)聯(lián)本系統(tǒng)同時(shí)支持對(duì)試題選項(xiàng)的管理與維護(hù),教師用戶可以對(duì)試題的選項(xiàng)進(jìn)行增加、刪除、修改的操作。并且試題選項(xiàng)數(shù)量不限。同試題一樣,也是在一個(gè)DAO類QElementDAO中封裝了對(duì)試題選項(xiàng)類TQElementDAO的一系列的操作。然而試題選項(xiàng)與試題是有關(guān)聯(lián)關(guān)系的,那么如何處理這種關(guān)聯(lián)呢。先看一下這一局部的數(shù)據(jù)庫設(shè)計(jì)如表4-3和4-4表:4-3試題表T_QUESTIONS列名稱數(shù)據(jù)類型是否主鍵是否為空備注intIDINT是否問題idstrContentVARCHAR〔3000〕問題內(nèi)容strCHAPTvarchar(20)問題所屬章節(jié)strTYPEvarchar(20)問題所屬類型〔單項(xiàng)選擇0,多項(xiàng)選擇1,填空2,判斷3,簡答4,編程5strSUBNamevarchar(20)所屬科目strLEVELvarchar(20)難度等級(jí)〔難0,正常1,簡單2〕strUSESTATEvarchar(10)問題有效范圍〔000-所有范圍都不能用,001-只能用于正式測驗(yàn),010-只能用于模擬測驗(yàn),011-適用于正式測驗(yàn),模擬測驗(yàn),100-只適用于練習(xí),101-適用于練習(xí),正式測驗(yàn)110-適用于練習(xí),模擬測驗(yàn)intCountsInt被抽取的次數(shù)intCreateIdInt創(chuàng)立人idstrCreatorVarchar(20)創(chuàng)立人姓名dcreateDateDatetime創(chuàng)立日期表:4-3試題選項(xiàng)表T_Q_ELEMENTS列名稱數(shù)據(jù)類型是否主鍵是否為空備注intIDINT是否選項(xiàng)id strCONTENTVARCHAR〔3000〕選項(xiàng)內(nèi)容intISANSWERINT是否為答案(0不是,1是)intQIDINT問題id在試題選項(xiàng)表中有一個(gè)試題的主鍵intQID作為外鍵,所以從試題到試題選項(xiàng)的一對(duì)多的關(guān)聯(lián)關(guān)系是用試題的id關(guān)聯(lián)上去的。那么如何在Java對(duì)象中表達(dá)這種關(guān)系呢?在TQuestions試題對(duì)象中用一個(gè)Set集合來存儲(chǔ)它所關(guān)聯(lián)的所有試題選項(xiàng)對(duì)象,在查詢到某個(gè)試題時(shí)候就可以關(guān)聯(lián)查出對(duì)應(yīng)的所有試題選項(xiàng)了。兩個(gè)類的局部代碼如下:/***@authorzheng**/packageorg.zlj.zxcs.vo;importjava.util.Date;importjava.util.HashSet;importjava.util.Set;publicclassTQuestionsimplementsjava.io.Serializable{//FieldsprivateIntegerintId; //idprivateStringstrSubName;//科目名稱privateStringstrContent;//內(nèi)容privateStringstrChapt;//章節(jié)privateStringstrType;//類型privateStringstrLevel;//難度等級(jí)privateStringstrUsestate;//問題有效范圍privateIntegerintCounts;//被抽取的次數(shù)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;到此類中的關(guān)系有了,下面要做的就是要在Hibernate的映射文件中配置對(duì)象與數(shù)據(jù)間的轉(zhuǎn)換關(guān)系了。局部配置代碼如下:<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對(duì)多關(guān)聯(lián)關(guān)系是用<set>元素來配置的。圖4-4是運(yùn)行時(shí)的截圖,查詢出一個(gè)試題后,可以關(guān)聯(lián)得到它的試題選項(xiàng)。圖:4-4試題關(guān)聯(lián)得到試題選項(xiàng)4.3自動(dòng)組卷模塊該模塊主要是教師錄入試卷的一些參數(shù),供學(xué)生注冊(cè)時(shí)隨機(jī)生成試卷用。其頁面如圖4-5。在該頁面教師要依據(jù)題庫有符合條件的試題的數(shù)量來,填寫各種試題的數(shù)量。這里使用Ajax技術(shù)中的DWR框架,異步獲取試題庫中可用題目數(shù)量,當(dāng)教師選擇試卷的科目和試卷的難度時(shí),系統(tǒng)就會(huì)到數(shù)據(jù)庫中獲取與之匹配的題目數(shù)量,并把結(jié)果顯示出來。具體實(shí)現(xiàn)方法如下。第一步:安裝jar開發(fā)包。從DWR官方網(wǎng)站下載DWR開發(fā)包,這里使用的是DWR2.03這個(gè)開發(fā)包里包含了DWR運(yùn)行所需的所有Java類和相應(yīng)的API文檔。把該jar包放到工程的lib包里。第二步:修改現(xiàn)有工程的web.xml配置文件。參加一個(gè)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應(yīng)用程序,全部以“/dwr/〞起始的URL所指的請(qǐng)求都交給這個(gè)Servlet處理。圖4-5組卷參數(shù)頁面第三步:創(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>這段描述主要是把類轉(zhuǎn)換成Jscript對(duì)象JQuestionDao并且只暴露方法getAviliableCount,該方法用來完成獲取可用試題的數(shù)量。第四步:測試URL,查看是否轉(zhuǎn)換成功在瀏覽器里輸入://:8080/dwr,可以看到已經(jīng)部署的所有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)點(diǎn)擊JQuestionDao進(jìn)入該類的方法部署頁面如圖4-6,在getAviliableCount中分別輸入java,2,111表示java科目中難度為簡單可用范圍是正式測驗(yàn)的問題。點(diǎn)擊Execute可以查看方法的實(shí)際運(yùn)行情況如圖4-7。到此說明DWR正常工作。圖4-6JQuestionDao類圖4-7DWR測試結(jié)果第五步:建立客戶端頁面,利用Javascript遠(yuǎn)程調(diào)用Java類的方法頁面為://:8080/zxcs/teacher/examParamAdd.jsp,局部代碼如下,運(yùn)行效果如圖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>…… //獲取題庫中的已有的個(gè)數(shù) if(strSubName!="") JQuestionDao.getAviliableCount(strSubName,strLevel,"",showCheckValue);使用Ajax可以帶來可見的便捷:1、減輕效勞器的負(fù)擔(dān)。Ajax的原那么是“按需取數(shù)據(jù)〞,可以在相當(dāng)?shù)某潭壬蠝p少冗余請(qǐng)求和響應(yīng)對(duì)效勞器造成的負(fù)擔(dān)。2、無刷新更新頁面,減少用戶心里和實(shí)際等待的時(shí)間。特別地,當(dāng)要讀取大量數(shù)據(jù)時(shí),不會(huì)像Reload那樣出現(xiàn)白屏的情況。Ajax使用XMLRequest對(duì)象發(fā)送請(qǐng)求并的得到效勞器的響應(yīng),在不重載整個(gè)頁面的情況下,使用Javascript操作DOM更新頁面。所以在讀取數(shù)據(jù)的過程中,用戶面對(duì)的不是空白的屏幕,是原來的頁面內(nèi)容〔也可以加點(diǎn)提示信息,讓用戶知道處于讀取數(shù)據(jù)的過程〕,只有當(dāng)數(shù)據(jù)接收完后才更新相應(yīng)的局部內(nèi)容。這種更新是瞬間的,用戶幾乎感覺不到。3、帶來更好的用戶體驗(yàn)。4、可以把以前一些效勞器的負(fù)擔(dān)工作轉(zhuǎn)嫁到客戶端,利用客戶端閑置的能力來處理,減輕效勞器和帶寬的負(fù)擔(dān),節(jié)約空間和帶寬本錢。5、可以調(diào)用外部數(shù)據(jù)。6、基于標(biāo)準(zhǔn)化的并被廣泛支持的技術(shù),無需下載插件或者小程序。7、進(jìn)一步促進(jìn)頁面呈現(xiàn)和數(shù)據(jù)的別離。圖4-8DWR調(diào)用遠(yuǎn)程方法4.4試卷監(jiān)控模塊的功能是對(duì)教師發(fā)布出去的試卷,教師可以監(jiān)控所有注冊(cè)該試卷的學(xué)生和試卷的狀態(tài)。該功實(shí)現(xiàn)方法在于使用應(yīng)用效勞器的application對(duì)象,來保存在線用戶信息,創(chuàng)立一個(gè)session監(jiān)聽器,當(dāng)session失效時(shí)從application對(duì)象中去除該用戶的信息。在監(jiān)控頁面,獲取注冊(cè)了該試卷的所有學(xué)生和試卷的狀態(tài)然后獲取該學(xué)生的在線狀態(tài),通過頁面表格顯示出來。4.5批閱試卷對(duì)于收回的試卷,教師可以批閱其中的主觀題,該模塊是根據(jù)學(xué)生的試卷id獲取試卷中的試題信息包括試題的參考答案和學(xué)生所做的答案,最后教師結(jié)合實(shí)際情況給學(xué)生評(píng)分。4.6成績查詢對(duì)于教師用戶可以查詢參與由自己發(fā)布的試卷的成績。對(duì)于學(xué)生可以查詢自己所有的測試成績。主要是依賴與查詢條件的控制。4.7注冊(cè)考試學(xué)生可以注冊(cè)教師已經(jīng)發(fā)布的試卷,在組卷時(shí),先從試卷參數(shù)表中讀出參數(shù),然后利用這些參數(shù)進(jìn)行組卷。其中從題庫中隨機(jī)抽取n條試題時(shí)使用了mssql的selecttopn*fromtableNameorderbynewid(),而Hibernate的Session接口的Session.createSQLQuery(sql)方法可以生成原生SQL語句,這樣就可以使用它來完成隨機(jī)抽題了。4.8在線測試在線測試主要完成倒計(jì)時(shí)、分頁獲取試題、分頁保存答案、三個(gè)主要的功能。由于需要進(jìn)行異步請(qǐng)求和局部更新頁面所以,這三個(gè)功能都是利用Ajax技術(shù)實(shí)現(xiàn)的,頁面運(yùn)行效果如圖4-倒計(jì)時(shí)當(dāng)頁面加載時(shí),自動(dòng)調(diào)用javaScript腳本利用DWR獲取考試剩余時(shí)間,利用javascript更新顯示時(shí)間區(qū)域秒針顯示。并把獲取時(shí)間的腳本設(shè)置為每一分鐘執(zhí)行一次。當(dāng)剩余時(shí)間為0時(shí)候自動(dòng)調(diào)用結(jié)束考試的方法,同樣此方法也是利用Ajax實(shí)現(xiàn)的。局部代碼如下://取得剩余時(shí)間 functiongetLeftTime(){ JExamDao.getTimes(examId,showTimes); } //顯示出剩余時(shí)間functionshowTimes(date){varlefttimes=$("timespace");if(date<=0){lefttimes.innerHTML=date;saveAnswer();//保存當(dāng)頁答案alert("考試已經(jīng)結(jié)束");JExamDao.endExam(examId,function(){top.location='<%=basePath%>logout.jsp';});}else{ lefttimes.innerHTML="剩余"+date+"分鐘"; showLeftSec();}}//顯示時(shí)間秒數(shù)functionshowLeftSec(){if(leftseconds<0){//如果秒到0就重新更新分鐘 leftseconds=59;//重新把秒針設(shè)為59 getLeftTime();//從數(shù)據(jù)庫中重新獲取剩余時(shí)間 }else{ $("leftsec").innerHTML=""+leftseconds+"秒"; leftseconds--; setTimeout("showLeftSec()",1000);//每秒更新一次秒針}}4.8.2分頁獲取試題獲取試卷中的試題,利用Hibernate的一對(duì)多的關(guān)系可以很容易的獲取試題和它所對(duì)應(yīng)的試題選項(xiàng),通過獲取試題的種類給予用戶不同的界面,如單項(xiàng)選擇題那么顯出單項(xiàng)選擇按鈕,多項(xiàng)選擇題顯示多項(xiàng)選擇按鈕,同時(shí)獲取學(xué)生做過的答案,并將其顯示在頁面上。利用Hibernate中Query接口setFirstResult設(shè)置開始的行數(shù)和setMaxResults設(shè)置最大行數(shù)讀取數(shù)據(jù)庫中的記錄,在頁面結(jié)合javascript動(dòng)態(tài)設(shè)置起始行數(shù)。相關(guān)代碼見附錄。4.8.3分頁保存答案保存答案時(shí)把試題按兩種類型保存,如果是選擇性的題目保存被選中的選項(xiàng)的id,如果是輸入文本性的題目保存其輸入的文本。當(dāng)學(xué)生點(diǎn)擊翻頁按鈕時(shí)觸發(fā)javascript腳本,利用Ajax進(jìn)行保存當(dāng)前頁面的試題答案。4.8.4自動(dòng)閱卷當(dāng)提交試卷時(shí),系統(tǒng)會(huì)自動(dòng)批閱試卷中的單項(xiàng)選擇題、多項(xiàng)選擇題、判斷題。評(píng)分時(shí)候分為兩種,一種是正確答案只有一個(gè)的,即單項(xiàng)選擇題和判斷題。此時(shí)只要比擬學(xué)生提交的答案〔選項(xiàng)的id〕和該試題的正確答案的選項(xiàng)id是否一樣即可。另外一種就是多項(xiàng)選擇題,此時(shí)可先把學(xué)生做的答案即多個(gè)選項(xiàng)的id封裝到一個(gè)Set集合中去,然后在獲取試題的正確選項(xiàng)的Set集合,利用Java中的Set集合equals方法,來判斷學(xué)生是否答對(duì)了此題。局部代碼如下://把學(xué)生所做的答案組合成一個(gè)set集合 if(strAnswer!=null){ String[]tempAnswer=strAnswer.split(","); for(inti=0;i<tempAnswer.length;i++){ IntegertemInt=newInteger(tempAnswer[i]); setStuAnswer.add(temInt);} //獲取問題的正確選項(xiàng)的id集合 while(tempIt.hasNext()){//問題選項(xiàng) TQElementstempQE=(TQElements)tempIt.next(); Integertemp=tempQE.getIntIsanswer(); //把問題的正確答案的選項(xiàng)id放入集合中 if(Value()==1){ IntegerintQEID=tempQE.getIntId(); setQEID.add(intQEID);}}//比照學(xué)生所做的答案集合與問題的正確選項(xiàng)id集合 if(setStuAnswer.size()>0&&setQEID.size()>0 &&setStuAnswer.equals(setQEID)){ corExeIdSet.add(exeID); }}5系統(tǒng)的性能和平安在系統(tǒng)的設(shè)計(jì)和編碼時(shí)候考慮到系統(tǒng)的性能和平安的問題主要采取的策略如下。1.采用數(shù)據(jù)庫連接池。Tomcat提供了一個(gè)較為成熟的數(shù)據(jù)庫連接池DBCP連接池,利用連接池可以使系統(tǒng)減少建立與數(shù)據(jù)庫的連接次數(shù)。節(jié)約系統(tǒng)的珍貴支援,提高系統(tǒng)的負(fù)載量。2.合理配置數(shù)據(jù)庫連接池,以提高系統(tǒng)的性能和平安。當(dāng)web應(yīng)用效勞器發(fā)異常時(shí)候可能會(huì)使當(dāng)前數(shù)據(jù)庫連接失效。而失效的連接如不及時(shí)的回收可能會(huì)造成系統(tǒng)的崩潰。Tomcat配置文件中的可以指定連接池自動(dòng)回收失效的連接代碼如下:<parameter><name>removeAbandoned</name><!--AbandonedDBconnectionsareremovedandrecycled--><value>true</value></parameter><parameter><name>removeAbandonedTimeout</name><!--UsetheremoveAbandonedTimeoutparametertosetthenumberofsecondsaDBconnectionhasbeenidlebeforeitisconsideredabandoned.--><value>60</value></parameter>3.利用Hibernate的Query接口的查詢功能,防止出現(xiàn)SQL注入漏洞。發(fā)生此種情況有主要有兩個(gè)原因。一是如果直接用頁面的參數(shù)拼接SQL語句,如果參數(shù)為SQL語句中的特殊字符如單引號(hào),可能會(huì)造成SQL語法錯(cuò)誤而導(dǎo)致程序出錯(cuò)。例如下面這個(gè)用戶登錄的代碼就會(huì)出錯(cuò)。Stringsql=〞select*fromuserwhereusername=’〞+userName+〞’andpassword=’〞+passWord+〞’〞當(dāng)userName是一個(gè)單引號(hào)時(shí)候就會(huì)導(dǎo)致SQL語法錯(cuò)誤。而采用Hibernate的Query接口時(shí)候,可以使用占位符解決這個(gè)問題。代碼如下:Stringhql=〞fromTuserwhereusername=?Andpassword=?〞Queryquery=Session.CreateQuery(sql);query.setString(1,userName);query.setString(2,passWord);第二種情況是沒有充分考慮到程序的邏輯問題。同樣對(duì)于第一種情況如果userName=“a〞passWord=〞b’or1=1〞。雖然不會(huì)導(dǎo)致SQL語句出錯(cuò),但是這條語句會(huì)使用戶通過驗(yàn)證。解決的方法是改良代碼,先利用Hibernate的Query接口查出符合條件的用戶,然后在取出該用戶的密碼比擬與用戶輸入的密碼是否一致此時(shí)就可以有效的防止SQL注入漏洞了。4.在查詢頁面采用分頁查詢,減輕效勞器與客戶端的負(fù)擔(dān)。利用Hibernate中Query接口setFirstResult設(shè)置開始的行數(shù)和setMaxResults設(shè)置最大行數(shù)讀取數(shù)據(jù)庫中的記錄,在頁面結(jié)合javascript動(dòng)態(tài)設(shè)置起始行數(shù)。5.批量增加和更新數(shù)據(jù)庫。在組卷的時(shí)候,需要大量屢次的向數(shù)據(jù)庫插入和更新數(shù)據(jù)。此次可以利用Hibernate的批量插入和更新減少與數(shù)據(jù)庫的交互次數(shù)提高系統(tǒng)的執(zhí)行效率。局部代碼如下:while(it.hasNext()){ ……//批量插入session.save(examElements);i++;if(i%20==0){//將本批插入的對(duì)象立即寫入數(shù)據(jù)庫并釋放內(nèi)存session.flush();session.clear();}}6.在系統(tǒng)的配置文件中參加默認(rèn)頁面和自己的異常處理。給系統(tǒng)參加一個(gè)默認(rèn)頁面可以防止列表目錄的發(fā)生,同時(shí)指定自己的錯(cuò)誤頁面可以有效的減輕系統(tǒng)暴露代碼信息。利用錯(cuò)誤頁,捕獲自己的異常可以給用戶良好的提示。局部配置代碼如下:<!--歡送頁--> <welcome-file-list> <welcome-file>login.jsp</welcome-file> </welcome-file-list> <!--錯(cuò)誤頁--> <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小結(jié)本系統(tǒng)采用了相關(guān)穩(wěn)定技術(shù)和框架提高系統(tǒng)的可維護(hù)性,在編寫代碼的同時(shí)盡量做的代碼的標(biāo)準(zhǔn)性。在設(shè)計(jì)和實(shí)現(xiàn)系統(tǒng)時(shí)候,注重提高系統(tǒng)的擴(kuò)展性和系統(tǒng)的執(zhí)行效率。然而由于技術(shù)和時(shí)間有限有些方面還需改良。參考文獻(xiàn)[1]RyanAsleson,NathanielT.Schutta.FoundationsofAjax[M].金靈譯人民郵電出版社.2006[2]孫衛(wèi)琴.精通Hibernate[M].北京,電子工業(yè)出版社.2005[3]劉彬.JSP數(shù)據(jù)庫高級(jí)教程[M].北京,清華大學(xué)出版社.2006[4]SueSpielman,MeerajKunnumpurath.J2EE1.4編程指南[M].馬樹奇,金燕譯.北京,電子工業(yè)出版.2005[5]洪峰,吳云飛.AJAX技術(shù)優(yōu)化在線考試流量[J].長沙通信職業(yè)技術(shù)學(xué)院學(xué)報(bào),第5卷第3期2006年9月:56-61[6]柴進(jìn),姚全珠,孫楹,孫榮榮.基于J2EE平臺(tái)的在線考試系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].寧夏工程技術(shù)第1卷第3期2002年11月:235-237[7]柯自聰.Ajax開發(fā)精要[M].北京,電子工業(yè)出版社.2006[8]BrianWright、MichaelFreedman.JSPAPPLICATION DEVELOPMENTINDATAWAREHOUSE[M].北京,北京希望電子出版社.2001[9]BRUCEECKEL.THINKINGINJAVA[M].北京,機(jī)械工業(yè)出版社.2005英文摘要DesignandImplementationoftheJavaLearningPlatformfortheExchangebasedonJspOnlinetestingandQuestionsAbstract:Thisthesisintroducesthestructureofweb-basedapproachandb/smodeofonlinetestingsystem.ThecurrentmorepopularwebapplicationsandframeworkssuchasJSP,Java,AjaxandORMtechnologyisintroducedespecially.Andasatheoreticalbasisandpracticalbasis,withwebapplicationsanddatabasetechnologywedesignedandimplementedanonlinetestingsystem.Thesystemisb/smodetoachieveafunctionoftestingquestionsforthemaintenance,generatingpaperautomatically,markingobjectivequestionsautomatically,reviewingsubjectivequestionsbyteachers,onlinetestingandqueryingtestingresults.Keywords:OnlineTestingJSPAjaxHibernateServlet致謝在這四年的學(xué)習(xí)生活中,學(xué)校嚴(yán)謹(jǐn)?shù)闹螌W(xué)作風(fēng)、良好的學(xué)習(xí)氣氛、老師們認(rèn)真的工作態(tài)度,都給我留下了非常深刻的印象。大學(xué)里我學(xué)到了很多知識(shí),同時(shí)我也學(xué)到了如何學(xué)習(xí)的能力。在各科教師的啟發(fā)和指引下,分析問題的能力有很大提高。整個(gè)大學(xué)生活是我人生中重要的一筆財(cái)富。在我的整個(gè)畢業(yè)設(shè)計(jì)的制作過程中,得到了老師的細(xì)心指導(dǎo)和關(guān)心。在此,我特別表示衷心的感謝!

附錄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在線測試系統(tǒng)</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><!—系統(tǒng)監(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> <!--錯(cuò)誤頁--> <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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論