天天看點

Struts、Servlet對Ajax的簡單實作

 

筆者是在SSH項目中實作的Ajax,用于異步驗證使用者輸入的登入名是否已經注冊。以下是相關過程

第一步:建構XMLHttpRequest對象

常見的操作是這樣的

<script language="JavaScript" type="text/JavaScript">
<!- -    var xmlHttp;
	function createXMLHttpRequest(){
		if(window.ActiveXObject){
			xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
		else if(window.XMLHttpRequest){
			xmlHttp = new XMLHttpRequest();
		}
	} //- -> 
</script>
           

由于不同的浏覽器之間的相容性問題,如IE浏覽器的IE5的XMLHttpRequest對象的建立需要使用Microsoft.XMLHTTP對象,而IE6則需要Msxml2.XMLHTTP對象,而其他浏覽器一般直接使用XMLHttpRequest對象。為了最大限度地相容不同浏覽器的不同版本之間的問題,采用如下方式初始化XMLHttpRequest對象

<script language="JavaScript" type="text/JavaScript">
	var xmlHttp = null;
	try{
		xmlHttp  = new XMLHttpRequest();
	}catch(msfirstkind){
		try{
			xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); //IE6對象
		}catch(mssecondkind){
			try{
				xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); //IE5對象
			}catch(faild){
				xmlHttp = null;
			}
		}
	}

</script>
           

第二步:建構激發異步驗證的js函數

在事件被激發後,然後調用callBack函數來執行伺服器端的通訊

xmlHttp.open("get/post", uri, true/false, userName,  userPwd); //通常前三個參數比較重要,第一個是向伺服器發送請求的類型,第二個參數是伺服器處理請求的action位址,第三個參數是是否通過異步的方式來發送請求。最後兩個是可選參數,用來指定使用者名和密碼。

xmlHttp.onreadystatechange = callback;  //注意,這裡調用回調函數一定不能加上括号,否則xmlHttp.status的狀态一直都是1.

xmlHttp.send(NULL);  //配合open()函數操作,當open()函數指定了發送請求的方式為get時可以發送字元串,當指定為post時,可以發送XML文檔

第三步:編寫回調函數

function callback(){
	if(xmlHttp.readyStatus == 4){//如果已從伺服器收到了完整的響應資料
		if(xmlHttp.stats == 200){//當伺服器傳回正确響應時
		{
			……//更新view層的相關邏輯操作
		}
	}
}
           

至此,Ajax的實作流程已經完成,然後,在servlet的java bean或Struts的action中返還相應的驗證結果即可。

以action為例

public String checkUserName() throws Exception{
	HttpServletResponse response = ServletActionContext.getResponse();  //獲得HttpServletResponse對象
	PrintWriter writer = response.getWriter();    //獲得輸出流,用以向ajax發送資料
	if(….){
		writer.print("true");          //如果業務邏輯驗證為真,則向ajax發送字元串"true",ajax通過xmlHttp.responseText擷取内容
	}
	else if(….){
		writer.print("false");   //如果業務了邏輯驗證為假,則向ajax發送字元串"false"
	}
	writer.close();   
	return SUCCESS;
}

           

struts.xml檔案配置

…..
	<package name="default" class="struts-default">
		<actioin name="checkUserName" class="className" method="methodName">
			<result name="success">/index.jsp</result>
		</action>
	</package>
           

繼續閱讀