2011-04-03 102 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