如何使用Ajax连接到Java servlets?
问题描述:
我正在开发一个使用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?
答
你需要做一个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¶meter2=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。