2011-04-03 48 views
1

我正在開發一個使用java的聊天客戶端。我能夠連接到gtalk以及使用SMACK API進行聊天。現在我需要對jsp servlets和ajax做同樣的事情。如何使用Ajax連接到Java servlets?

我可以進行身份​​驗證並僅通過jsp和servlet獲取好友列表。但是我必須使用Ajax進行聊天(這樣纔不會刷新頁面)。

用於發送和接收消息我在java中使用API​​的類。代碼如下:

public void sendMessage(String message, String to) throws XMPPException 
{ 
Chat chat = connection.getChatManager().createChat(to, this); 
chat.sendMessage(message); 
} 

public void processMessage(Chat chat, Message message) 
{ 
if(message.getType() == Message.Type.chat) 
System.out.println(chat.getParticipant() + " says: " + message.getBody()); 
} 

現在我該如何在Ajax中做同樣的事情?我可以和ajax一起使用API​​方法嗎?或者在servlet中使用它們,並從servlet中獲得ajax的響應並在頁面上填充msg?

回答

0

你需要做一個XML HTTP請求的Servlet爲你需要在你的HTML的JavaScript一個XML HTTP對象/ JSP頁面

var myxmlhttpobj=new GetXmlHttpObject(); 
function GetXmlHttpObject() 
    { 
     if (window.XMLHttpRequest) 
     { 
      // code for IE7+, Firefox, Chrome, Opera, Safari 
      return new XMLHttpRequest(); 
     } 
     if (window.ActiveXObject) 
     { 
      // code for IE6, IE5 
      return new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
     return null; 
    } 

現在,你需要給Servlet的請求由javascript的

var url="urlofServlet"; 
var para="parmeter1=value1&parameter2=valu2; 
myxmlhttpobj.open("POST",url,true); 
myxmlhttpobj.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
myxmlhttpobj.setRequestHeader("Content-length", para.length); 
myxmlhttpobj.setRequestHeader("Connection", "close"); 
myxmlhttpobj.onreadystatechange=ajaxComplete; 
myxmlhttpobj.send(para); 

在你需要處理結果的服務器發回的字符串:

PrintWriter out=response.getWriter(); 

///Process the input 

Write the out put 

out.println(outputAsString); 

當請求回來的myxmlhttpobj.onreadystatechange=ajaxComplete;將被稱爲

function ajaxComplete(){ 


    if(myxmlhttpobj.readyState==4){ 

     ///Display the result on the HTML/JSP Page 

    } 
} 

這將有助於...

也看看jQuery Ajax API