AJA技術(shù)提升WEB考試系統(tǒng)論文
時(shí)間:2022-03-04 08:18:00
導(dǎo)語:AJA技術(shù)提升WEB考試系統(tǒng)論文一文來源于網(wǎng)友上傳,不代表本站觀點(diǎn),若需要原創(chuàng)文章可咨詢客服老師,歡迎參考。
一、引言
ajax是AsynchronousjavascriptandXML(以及DHTML等)的縮寫。它由幾種技術(shù)組合而成,包括:基于XHTML和CSS標(biāo)準(zhǔn)的表示;使用DocumentObjectModel進(jìn)行動(dòng)態(tài)顯示和交互;使用XMLHttpRequest與服務(wù)器進(jìn)行異步通信;使用javascript進(jìn)行綁定。
傳統(tǒng)的web應(yīng)用程序強(qiáng)制用戶進(jìn)入提交、等待、重新顯示的模式,即用戶的界面操作觸發(fā)HTTP請(qǐng)求,服務(wù)器在接收到請(qǐng)求之后進(jìn)行業(yè)務(wù)邏輯處理,比如保存數(shù)據(jù),然后向客戶端返回一個(gè)HTML頁面。但服務(wù)器處理數(shù)據(jù)的時(shí)候,用戶處于等待的狀態(tài),每一步操作都需要等待,使得Web用戶界面在響應(yīng)靈敏性方面大打折扣。而Ajax帶給用戶完全不同的瀏覽感受。傳統(tǒng)的動(dòng)態(tài)網(wǎng)頁技術(shù)被隱藏到Ajax的后臺(tái)。用戶所看到的只是一個(gè)靜態(tài)頁面,不需要在提交頁面后等待或者主動(dòng)刷新網(wǎng)頁。動(dòng)態(tài)程序反饋的結(jié)果被直接無刷新地顯示在這個(gè)頁面上。因此利用Ajax開發(fā)的Web應(yīng)用程序能夠提供響應(yīng)極其靈敏的Web用戶界面,使得應(yīng)用過程很自然,操作很流暢,并消除了頁面刷新所帶來的閃爍。
二、系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
(一)系統(tǒng)設(shè)計(jì)
在用戶登錄進(jìn)考試系統(tǒng)時(shí),將登錄時(shí)間按用戶ID存入session變量中,以便對(duì)每個(gè)用戶實(shí)現(xiàn)計(jì)時(shí)。
用戶登錄后,利用Ajax技術(shù)在后臺(tái)實(shí)現(xiàn)計(jì)時(shí)功能,由javascript定時(shí)向服務(wù)器查詢考試時(shí)間并實(shí)時(shí)顯示在用戶的WEB頁面上??荚嚂r(shí)間可在JSP的配置文件中給出,計(jì)時(shí)器到規(guī)定時(shí)間后如用戶還未提交試卷,則由系統(tǒng)自動(dòng)提交。
用戶考試過程中,利用Ajax技術(shù)由JavaScr-ipt代碼在后臺(tái)為用戶定時(shí)存盤,一旦系統(tǒng)出現(xiàn)故障,再次進(jìn)入考試系統(tǒng)時(shí),可根據(jù)保存的信息在故障點(diǎn)處繼續(xù)進(jìn)行考試,原來考試的信息可以從服務(wù)器端一次性加載。
試卷的形式可以采用一頁一題的方式,也可采用一頁多題的方式。用戶在答題時(shí),系統(tǒng)在后臺(tái)為用戶預(yù)先從服務(wù)器端讀取下一段的試題,當(dāng)用戶需要下一段試題時(shí),可以很快從客戶端直接加載,而不需要用戶等待服務(wù)器端的數(shù)據(jù),實(shí)現(xiàn)無閃爍、無延遲的效果。
Ajax采用的是一種沙箱安全模型,Ajax代碼(具體而言即XMLHttpRequest對(duì)象)只能對(duì)所在的同一個(gè)域發(fā)送請(qǐng)求,在本地機(jī)器上運(yùn)行的代碼只能對(duì)本地機(jī)器上的服務(wù)器端腳本發(fā)送請(qǐng)求。雖然上述功能的實(shí)現(xiàn)都是基于客戶端腳本,對(duì)于用戶來說是可見的,但是Ajax的沙箱安全模型保證了只有來自考試服務(wù)器端的客戶端腳本才可以與服務(wù)器通信,同時(shí)服務(wù)器端也只接受有訪問信息的客戶端的請(qǐng)求(通過session等技術(shù))。所以該改進(jìn)方案保證了考試系統(tǒng)的準(zhǔn)確性。
(二)系統(tǒng)的實(shí)現(xiàn)
1、XMLHttpRequest對(duì)象。目前主流瀏覽器均支持XMLHttpRequest對(duì)象,但不同的瀏覽器對(duì)該對(duì)象的聲明各不相同,為了使得系統(tǒng)具有通用性,要對(duì)不同情況加以區(qū)分。本文將該功能直接寫在xmlhttp.js文件中,具體實(shí)現(xiàn)請(qǐng)參考文獻(xiàn)。XMLHttpRequest對(duì)象的各種方法和屬性請(qǐng)參考MSXML5.0SDK或其他相關(guān)文檔。
2、時(shí)間控制系統(tǒng)的實(shí)現(xiàn)。首先在服務(wù)器數(shù)據(jù)庫的考生表中設(shè)置“答卷時(shí)間”字段,用于記錄考生剩余考試時(shí)間。該字段值在考試過程中會(huì)以每分鐘減一的頻率被改寫,并在半分鐘之內(nèi)回顯給考生,當(dāng)該字段值減為零或以下時(shí)系統(tǒng)自動(dòng)交卷,結(jié)束考試。在計(jì)時(shí)器的設(shè)計(jì)上,以.NET系統(tǒng)自帶的Timers.Timer組件為基礎(chǔ)進(jìn)行了自定義設(shè)計(jì)。在Global.asax文件中生成并啟動(dòng)自定義計(jì)時(shí)器,由調(diào)用者訂閱其發(fā)出的一分鐘一次的事件,并將自身注冊(cè)為監(jiān)聽Global.timed的監(jiān)聽者。這樣,Global.timed每次觸發(fā)事件時(shí),注冊(cè)者相應(yīng)函數(shù)內(nèi)的時(shí)間更新功能就會(huì)被執(zhí)行,從而達(dá)到考生表中“答卷時(shí)間”字段值每分鐘自動(dòng)減一的功能。由于NET中的Timers.Timer組件是基于服務(wù)器的,并為在多線程環(huán)境中用于輔助線程而設(shè)計(jì)的,服務(wù)器計(jì)時(shí)器可以在線程間移動(dòng)來處理引發(fā)的Elapsed事件,這樣就可以比Windows計(jì)時(shí)器更精確地按時(shí)引發(fā)事件。在客戶端向服務(wù)器端請(qǐng)求時(shí)間時(shí),要根據(jù)XMLHttpRequest對(duì)象的HTTP狀態(tài)碼來操作;在服務(wù)器端,必須將“Cache-Control”頭設(shè)為“no-Cache”來保證每次取得的數(shù)據(jù)都不是從緩存中得到的。下面是計(jì)時(shí)器的一段示例代碼。
客戶端:
<scriptlanguage="javascript"src="xmlhttp.js"></script>
<scriptlanguage="javascript">
functionclockFun(){
varurl="TestTime.jsp";
xmlhttp.open
("get",url,true);//lxmlhttp對(duì)象在xmlhttp.js中聲明;
xmlhttp.onreadystatechange=function(){//指定服務(wù)器返回信息時(shí)客戶端的處理程序
if(xmlhttp.readyState==4){
if(xmlhttp.status==200){//http的狀態(tài)碼
document.getElementById("clock").innerHTML=xmlhttp.responseText;}}}
xmlhttp.send(null);}//發(fā)送請(qǐng)求到http服務(wù)器
functiontimer(){//計(jì)時(shí)器
window.setInterval(''''clockFun()'''',1000);}
</script>
服務(wù)器端(TestTime.jsp)
Calendar
beginTestTime=CalendargetInstance();
beginTestTime.set(……);//省略號(hào)處為登錄時(shí)間;
long
beginTime=beginTestTime.getTimeInMillis();
long
nowTime=Calendar.getInstance().
get''''TimeInMillis();//獲取當(dāng)前時(shí)間
response.setHeader("Cache-Control","no-cache");//數(shù)據(jù)不緩存
longhasTime=nowTime-beginTime;
//如用倒計(jì)時(shí),此處要用總時(shí)長(zhǎng)來減去此值;
response.getWriter().write((newLong(hasTime/60000)).toString}+":"+(newLong((hasTime%60000)/1000)).toString});//以文本方式返回時(shí)間response.getWriter().flush();
3、試卷的定時(shí)存盤和預(yù)讀試卷數(shù)據(jù)的實(shí)現(xiàn)。這兩種功能的實(shí)現(xiàn)也采用Ajax技術(shù),只是由于請(qǐng)求的數(shù)據(jù)量比計(jì)時(shí)器的數(shù)據(jù)量大,所以請(qǐng)求時(shí)采用“POST”方法。同時(shí)要求數(shù)據(jù)以xml格式返回,在客戶端利用DOM的強(qiáng)大功能來實(shí)現(xiàn)對(duì)數(shù)據(jù)的操作。用“POST”,方法請(qǐng)求數(shù)據(jù)時(shí)客戶端要添加Request頭,xmlhttp.setRequestHeader("Content-type","applicatior/x-www-form-urlencoded");服務(wù)器端以xml格式返回?cái)?shù)據(jù)時(shí)要設(shè)置Response響應(yīng)頭response..setContentType("text/xml"};這樣返回客戶端的數(shù)據(jù)才能以xml格式返回。
(三)系統(tǒng)測(cè)試
該系統(tǒng)測(cè)試的客戶端為InternetExplore6.0和FireFox1.0,服務(wù)器端為Windows2003和RedHatAS4+JDK1.5+Tomcat5.5.9,網(wǎng)絡(luò)環(huán)境為服務(wù)器在教育網(wǎng)內(nèi),客戶機(jī)在局域網(wǎng)內(nèi)和遠(yuǎn)程電信網(wǎng)。系統(tǒng)在局域網(wǎng)內(nèi)部和廣域網(wǎng)上的測(cè)試均達(dá)到了預(yù)期效果。
三、結(jié)束語
本文利用Ajax技術(shù)改進(jìn)現(xiàn)有的網(wǎng)上考試系統(tǒng),實(shí)現(xiàn)了在線考試的B/S系統(tǒng),使其達(dá)到了C/S系統(tǒng)所具有的功能,同時(shí)兼?zhèn)淞薆/S系統(tǒng)固有的優(yōu)勢(shì),即能實(shí)現(xiàn)用戶的網(wǎng)上在線考試的功能,又不需要用戶安裝額外的客戶端軟件。新的考試系統(tǒng)具有準(zhǔn)確計(jì)時(shí)、快捷、安全、方便等優(yōu)點(diǎn),從根本上改變了原有網(wǎng)上考試系統(tǒng)的多種弊端。