AJA技術提升WEB考試系統論文

時間:2022-03-04 08:18:00

導語:AJA技術提升WEB考試系統論文一文來源于網友上傳,不代表本站觀點,若需要原創文章可咨詢客服老師,歡迎參考。

AJA技術提升WEB考試系統論文

一、引言

ajax是AsynchronousjavascriptandXML(以及DHTML等)的縮寫。它由幾種技術組合而成,包括:基于XHTML和CSS標準的表示;使用DocumentObjectModel進行動態顯示和交互;使用XMLHttpRequest與服務器進行異步通信;使用javascript進行綁定。

傳統的web應用程序強制用戶進入提交、等待、重新顯示的模式,即用戶的界面操作觸發HTTP請求,服務器在接收到請求之后進行業務邏輯處理,比如保存數據,然后向客戶端返回一個HTML頁面。但服務器處理數據的時候,用戶處于等待的狀態,每一步操作都需要等待,使得Web用戶界面在響應靈敏性方面大打折扣。而Ajax帶給用戶完全不同的瀏覽感受。傳統的動態網頁技術被隱藏到Ajax的后臺。用戶所看到的只是一個靜態頁面,不需要在提交頁面后等待或者主動刷新網頁。動態程序反饋的結果被直接無刷新地顯示在這個頁面上。因此利用Ajax開發的Web應用程序能夠提供響應極其靈敏的Web用戶界面,使得應用過程很自然,操作很流暢,并消除了頁面刷新所帶來的閃爍。

二、系統的設計與實現

(一)系統設計

在用戶登錄進考試系統時,將登錄時間按用戶ID存入session變量中,以便對每個用戶實現計時。

用戶登錄后,利用Ajax技術在后臺實現計時功能,由javascript定時向服務器查詢考試時間并實時顯示在用戶的WEB頁面上。考試時間可在JSP的配置文件中給出,計時器到規定時間后如用戶還未提交試卷,則由系統自動提交。

用戶考試過程中,利用Ajax技術由JavaScr-ipt代碼在后臺為用戶定時存盤,一旦系統出現故障,再次進入考試系統時,可根據保存的信息在故障點處繼續進行考試,原來考試的信息可以從服務器端一次性加載。

試卷的形式可以采用一頁一題的方式,也可采用一頁多題的方式。用戶在答題時,系統在后臺為用戶預先從服務器端讀取下一段的試題,當用戶需要下一段試題時,可以很快從客戶端直接加載,而不需要用戶等待服務器端的數據,實現無閃爍、無延遲的效果。

Ajax采用的是一種沙箱安全模型,Ajax代碼(具體而言即XMLHttpRequest對象)只能對所在的同一個域發送請求,在本地機器上運行的代碼只能對本地機器上的服務器端腳本發送請求。雖然上述功能的實現都是基于客戶端腳本,對于用戶來說是可見的,但是Ajax的沙箱安全模型保證了只有來自考試服務器端的客戶端腳本才可以與服務器通信,同時服務器端也只接受有訪問信息的客戶端的請求(通過session等技術)。所以該改進方案保證了考試系統的準確性。

(二)系統的實現

1、XMLHttpRequest對象。目前主流瀏覽器均支持XMLHttpRequest對象,但不同的瀏覽器對該對象的聲明各不相同,為了使得系統具有通用性,要對不同情況加以區分。本文將該功能直接寫在xmlhttp.js文件中,具體實現請參考文獻。XMLHttpRequest對象的各種方法和屬性請參考MSXML5.0SDK或其他相關文檔。

2、時間控制系統的實現。首先在服務器數據庫的考生表中設置“答卷時間”字段,用于記錄考生剩余考試時間。該字段值在考試過程中會以每分鐘減一的頻率被改寫,并在半分鐘之內回顯給考生,當該字段值減為零或以下時系統自動交卷,結束考試。在計時器的設計上,以.NET系統自帶的Timers.Timer組件為基礎進行了自定義設計。在Global.asax文件中生成并啟動自定義計時器,由調用者訂閱其發出的一分鐘一次的事件,并將自身注冊為監聽Global.timed的監聽者。這樣,Global.timed每次觸發事件時,注冊者相應函數內的時間更新功能就會被執行,從而達到考生表中“答卷時間”字段值每分鐘自動減一的功能。由于NET中的Timers.Timer組件是基于服務器的,并為在多線程環境中用于輔助線程而設計的,服務器計時器可以在線程間移動來處理引發的Elapsed事件,這樣就可以比Windows計時器更精確地按時引發事件。在客戶端向服務器端請求時間時,要根據XMLHttpRequest對象的HTTP狀態碼來操作;在服務器端,必須將“Cache-Control”頭設為“no-Cache”來保證每次取得的數據都不是從緩存中得到的。下面是計時器的一段示例代碼。

客戶端:

<scriptlanguage="javascript"src="xmlhttp.js"></script>

<scriptlanguage="javascript">

functionclockFun(){

varurl="TestTime.jsp";

xmlhttp.open

("get",url,true);//lxmlhttp對象在xmlhttp.js中聲明;

xmlhttp.onreadystatechange=function(){//指定服務器返回信息時客戶端的處理程序

if(xmlhttp.readyState==4){

if(xmlhttp.status==200){//http的狀態碼

document.getElementById("clock").innerHTML=xmlhttp.responseText;}}}

xmlhttp.send(null);}//發送請求到http服務器

functiontimer(){//計時器

window.setInterval(''''clockFun()'''',1000);}

</script>

服務器端(TestTime.jsp)

Calendar

beginTestTime=CalendargetInstance();

beginTestTime.set(……);//省略號處為登錄時間;

long

beginTime=beginTestTime.getTimeInMillis();

long

nowTime=Calendar.getInstance().

get''''TimeInMillis();//獲取當前時間

response.setHeader("Cache-Control","no-cache");//數據不緩存

longhasTime=nowTime-beginTime;

//如用倒計時,此處要用總時長來減去此值;

response.getWriter().write((newLong(hasTime/60000)).toString}+":"+(newLong((hasTime%60000)/1000)).toString});//以文本方式返回時間response.getWriter().flush();

3、試卷的定時存盤和預讀試卷數據的實現。這兩種功能的實現也采用Ajax技術,只是由于請求的數據量比計時器的數據量大,所以請求時采用“POST”方法。同時要求數據以xml格式返回,在客戶端利用DOM的強大功能來實現對數據的操作。用“POST”,方法請求數據時客戶端要添加Request頭,xmlhttp.setRequestHeader("Content-type","applicatior/x-www-form-urlencoded");服務器端以xml格式返回數據時要設置Response響應頭response..setContentType("text/xml"};這樣返回客戶端的數據才能以xml格式返回。

(三)系統測試

該系統測試的客戶端為InternetExplore6.0和FireFox1.0,服務器端為Windows2003和RedHatAS4+JDK1.5+Tomcat5.5.9,網絡環境為服務器在教育網內,客戶機在局域網內和遠程電信網。系統在局域網內部和廣域網上的測試均達到了預期效果。

三、結束語

本文利用Ajax技術改進現有的網上考試系統,實現了在線考試的B/S系統,使其達到了C/S系統所具有的功能,同時兼備了B/S系統固有的優勢,即能實現用戶的網上在線考試的功能,又不需要用戶安裝額外的客戶端軟件。新的考試系統具有準確計時、快捷、安全、方便等優點,從根本上改變了原有網上考試系統的多種弊端。