我正在用Java实现一个项目,我实现了一个聊天,只有当我收到无法打印网页的消息时,一切都很完美。 在我的Servlet中,我有一个在消息到达时调用的回调方法,实际上如果你看到它们在控制台中存在,但是如果你使用RequestDispatcher将它们发送到jsp,则无法让它们看到。
我想知道jsp页面是否有一个系统监听servlet中的回调方法?
显然,这个系统不应该经常调用我有类似荒谬的课程。
这样我就可以打印收到的邮件了。
这是我的代码我把评论放在哪里我应该打印最终在jsp页面中找到,或者通过传递参数post或get来做重定向
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String strJid = (String) request.getParameter("jid");
String strMessage = (String) request.getParameter("textMessage");
Connection connection = (Connection)getServletContext().getAttribute("classConnection");
ChatManager chatManager = connection.getChatManager();
Chat newChat = chatManager.createChat(strJid, new MessageListener(){
@Override
public void processMessage(Chat chat, Message message){
//from here I have to print the message.getBody () in jsp page,
//how can I do? I'm happy also reload the page and pass as a parameter to get or post
}
});
try{
newChat.sendMessage(strMessage);
}
catch(XMPPException e){
System.out.println("Errore invio messaggio");
}
}
答案 0 :(得分:0)
在servlet中实现回调方法以接收聊天消息是错误的方法。对于浏览器请求,将调用一次servlet,创建HTML页面并将其发送回浏览器。之后,servlet和网页之间没有这种连接。
在传统的Web编程中,浏览器和服务器之间的所有通信都由客户端启动。服务器无法向客户端发送消息。变通办法是长轮询请求。
但是现在你可以使用Websockets。有几个框架支持客户端和服务器端的Websockets。其中一个是Atmosphere。他们的tutorial是聊天应用程序。