2013-05-31 52 views
0

我正在做一个java项目,在这个项目中我实现了一个聊天,只有当我收到消息我无法打印网页时,所有东西都能正常工作。 在我的Servlet中,我有一个回调方法,在消息到达时调用,实际上如果您在控制台中看到它们,但是如果使用RequestDispatcher将它们发送给jsp,则无法让它们看到。从servlet java发送数据到jsp

我想知道如果有一个JSP页面监听在servlet回调方法的系统?

显然,这个系统不应该不断地调用该类我有一些荒谬的那样。

这样我就可以打印我收到的消息。


这是我的代码,我把一个评论,我应该打印最终找到在jsp页面,或通过传递参数发布或获取

 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通过回调方法接收消息,我不能在jsp页面打印出来 –

回答

0

要在你的servlet实现的回调方法进行重定向接收聊天消息是错误的方法。一个servlet将被调用一次,用于浏览器请求,创建HTML页面并将其发送回浏览器。之后,servlet和网页之间就没有这种连接。

在传统的网页编程中,浏览器和服务器之间的所有通信都由客户端启动。服务器无法向客户端发送消息。解决方法是长轮询请求。

但现在你可以使用Websockets。有几个框架支持客户端和服务器端的Websockets。其中之一是Atmosphere。他们的tutorial是一个聊天应用程序。

+0

这种解决方案的问题在于,它不是跨浏览器 –

+0

嗯,根据大气的支持的Web服务器和浏览器网站https://github.com/Atmosphere/atmosphere/wiki/Supported-WebServers-and-Browsers支持所有主流网页浏览器。使用旧浏览器版本,您至少可以使用长轮询作为后备。但大气只是一个例子。还有几个其他的Websocket框架。如果不直接支持Websockets,它们大多支持某种回退机制。但是没有什么能阻止你自己使用纯粹的Websocket API。 – vanje

+0

你可以从java servlet调用一个javascript函数。 如果是这样,你怎么办? –