【问题标题】:send data from servlet java to jsp将数据从servlet java发送到jsp
【发布时间】:2013-05-27 05:40:57
【问题描述】:

我正在用 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");
    }


}

【问题讨论】:

  • 无法清楚地理解您在寻找什么,请用一些代码更新您的问题,并且可能会逐步解释您正在尝试做什么以及您遇到的问题。谢谢
  • 我的观点是,当servlet通过回调方法接收消息时,我无法在jsp页面中打印它们

标签: java jsp servlets refresh


【解决方案1】:

在您的 servlet 中实现回调方法来接收聊天消息是错误的方法。一个 servlet 将针对浏览器请求调用一次,创建 HTML 页面并将其发送回浏览器。之后,servlet 和网页之间就没有这种联系了。

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

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

【讨论】:

  • 这个方案的问题是不能跨浏览器
  • 嗯,根据 Atmosphere 支持的 Web 服务器和浏览器站点 github.com/Atmosphere/atmosphere/wiki/…,所有主要的 Web 浏览器都受支持。对于旧的浏览器版本,您至少可以使用长轮询作为后备。但大气只是一个例子。还有其他几个 Websocket 框架。如果不直接支持 Websocket,它们中的大多数都支持某种回退机制。但是没有什么能阻止您自己使用裸 Websocket API。
  • 您可以从 java servlet 调用 javascript 函数。如果是这样,你怎么办?
  • servlet 代码在服务器端运行,而您的 JavaScript 函数驻留在客户端(浏览器)上。所以 servlet 不能直接调用 JavaScript 函数。您可以将消息存储在服务器端并在下次客户端发出请求时传递它们,或者您可以使用某种推送技术(如 websockets)将消息直接发送到客户端(可能会调用您的 JavaScript 函数)。但这超出了简单 servlet 的能力。
猜你喜欢
  • 2014-07-21
  • 1970-01-01
  • 1970-01-01
  • 2013-08-13
  • 1970-01-01
  • 2019-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多