如何使用Ajax连接到Java servlet?

我正在使用java开发一个聊天客户端。 我能够连接到gtalk以及使用SMACK API聊天。 现在我需要对jsp servlet和ajax做同样的事情。

我可以进行身份​​validation并仅使用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中做同样的事情? 我可以将API方法与ajax一起使用吗? 或者在servlet中使用这些并使用ajax从servlet获取响应并填充页面上的msg?

看看DWR

您需要向Servlet发出XML Http请求,以便在HTML / JSP页面的javascript中创建XML Http对象

 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; } 

现在您需要从javascript向Servlet发出请求

 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 。