Ajax技術に基づいて、試験のカウントダウンを実現し、自動的に答案用紙を提出します。
1.概要
オンラインテストシステムを開発するには、試験時間と自動で答案用紙を提出することが不可欠です。答案用紙の更新ができないため、Ajaxを使って更新なしを実現する必要があります。この例を実行して、アクセス準備試験ページindex.jspにおいて、このページで「試験開始」ボタンをクリックすると、試験開始ページが図10.1に示されているように、ページは自動的に時間がかかり、試験時間が終わると、自動的に値上げされます。
2.技術上のポイント
主にAjax非同期提出技術とServlet技術を利用して実現された。テストページに表示されるタイミングはServletで設定されており、Ajaxの非同期を通じてServletを要求することで、サーバから最新のタイムアウトデータを取得する必要があります。メンテナンスとコードの再利用を容易にするために、Ajaxの要求方法をJSファイルにパッケージすることができます。この方法は共通の方法として、プログラムで使用する時に直接呼び出すことができます。
3.具体的な実現コード
JSファイルにXMLttpRequestオブジェクトを構築し、要求方法を下記のコードに示します。
オンラインテストシステムを開発するには、試験時間と自動で答案用紙を提出することが不可欠です。答案用紙の更新ができないため、Ajaxを使って更新なしを実現する必要があります。この例を実行して、アクセス準備試験ページindex.jspにおいて、このページで「試験開始」ボタンをクリックすると、試験開始ページが図10.1に示されているように、ページは自動的に時間がかかり、試験時間が終わると、自動的に値上げされます。
2.技術上のポイント
主にAjax非同期提出技術とServlet技術を利用して実現された。テストページに表示されるタイミングはServletで設定されており、Ajaxの非同期を通じてServletを要求することで、サーバから最新のタイムアウトデータを取得する必要があります。メンテナンスとコードの再利用を容易にするために、Ajaxの要求方法をJSファイルにパッケージすることができます。この方法は共通の方法として、プログラムで使用する時に直接呼び出すことができます。
3.具体的な実現コード
JSファイルにXMLttpRequestオブジェクトを構築し、要求方法を下記のコードに示します。
/**
* XMLHttpRequest
* @param reqType: (GET POST)
* @param url:
* @param async:
* @param resFun:
* @param parameter :
* @return :XMLHttpRequest
*/
function httpRequest(reqType,url,async,resFun,parameter){
var request = null;
if( window.XMLHttpRequest ){ // IE , XMLHttpRequest
request = new XMLHttpRequest();
}else if( window.ActiveXObject ){ //IE , XMLHttpRequest
var arrSignatures = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP", "Microsoft.XMLHTTP", "MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP"];
for( var i = 0; i < arrSignatures.length; i++ ){
request = new ActiveXObject( arrSignatures[i] );
if( request || typeof( request ) == "object" )
break;
}
}
if( request || typeof( request ) == "object" ){
if(reqType.toLowerCase()=="post"){ // POST
request.open(reqType, url, true); //
// MIME
request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
request.onreadystatechange = resFun; //
parameter = encodeURI(parameter); //
request.send(parameter); //
}
else{ // GET
url = url+"?"+parameter;
request.open(reqType, url, true); //
request.onreadystatechange = resFun; //
request.send(null); //
}
}
else{
alert( " Ajax!" );
}
return request;
}
(1)ユーザーアクセスの初期ページであるindex.jspページを新規作成します。ページには主に「試験開始」ボタンが含まれています。このボタンのOclickイベントは試験ウィンドウを開くJavaScript関数を呼び出します。キーコードは以下の通りです。
function showWindow(){ window.open('StartExam?action=startExam','','width=750,height=500,scrollbars=1');
}
(2)StartExamというServlet実装クラスを新たに作成します。このクラスは作成試験の開始時間と残り時間を使います。このクラスでは、試験時間を記録するためにグローバル変数examTimeを作成します。この変数の値はweb.xmlで設定されています。キーコードは以下の通りです。
<servlet>
<servlet-name>StartExam</servlet-name>
<servlet-class>com.lh.servlet.StartExam</servlet-class>
<init-param>
<param-name>examTime</param-name>
<param-value>20</param-value>
</init-param>
</servlet>
(3)StartExam類では、ページを試験開始ページに転送するための方法startExam()を作成します。キーコードは以下の通りです。
public void startExam(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
HttpSession session = request.getSession();
request.setAttribute("time", examTime); //
session.setAttribute("startTime1",new Date().getTime()); //
request.getRequestDispatcher("startExam.jsp").forward(request, response);
}
(4)showStartTime.jspページを新設し、時間開始時間を出力する。キーコードは以下の通りです。
<%@page contentType="text/html" pageEncoding="GBK"%>
${showStartTime}
(5)show RemanTime.jspページを新設し、時間の残り時間を出力する。キーコードは以下の通りです。
<%@page contentType="text/html" pageEncoding="GBK"%>
${showRemainTime}
(6)試験開始ページstartExam.jspページを新設し、このページでAjax要求方法を呼び出してStartExam類を要求し、試験の開始時間と残り時間を取得する。キーコードは以下の通りです。
var request1= false;
var request2 = false;
// Servlet
function showStartTime(){
var url = "StartExam";
// &nocache="+new Date().getTime(),
var parameter="action=showStartTime&nocache="+new Date().getTime();
request1 = httpRequest("post",url,true,callbackFunc,parameter);
}
//
function callbackFunc(){
if( request1.readyState==4 ){
if( request1.status == 200 ){
showStartTimediv.innerHTML=request1.responseText;
}
}
}
// Servlet
function showRemainTime(){
var url = "StartExam";
var parameter="action=showRemainTime&nocache="+new Date().getTime();
request2 = httpRequest("post",url,true,callbackFunc_R,parameter);
}
//
function callbackFunc_R(){
if( request2.readyState==4 ){
if( request2.status == 200 ){
h=request2.responseText;
showRemainTimediv.innerHTML=h;
h=h.replace(/\s/g,""); // Unicode
showRemainTimediv.innerHTML=h;
if(h=="00:00:00"){
form1.submit();
}
}
}
}
(7)ページローディング後の自動時間計測を実現するためには、試験開始ページの「body」タブでオンラインイベントを通じてWindows.set Interval()メソッドからshow StartTime()関数とshow Remail Time()関数を呼び出す必要があります。キーコードは以下の通りです。
<body onLoad="showStartTime();showRemainTime();" onkeydown="keydown()">
以上はAjax技術に基づいて試験のカウントダウンを実現し、自動的に答案用紙を提出することについての知識を紹介しました。皆様に何か質問があれば、メッセージをください。ここでも私たちのサイトを応援してくれてありがとうございます。