【问题标题】:Printing Data from Servlet to browser asynchronously将数据从 Servlet 异步打印到浏览器
【发布时间】:2013-05-23 13:00:49
【问题描述】:

我正在尝试按顺序将数据发送到网页,我确实知道 HTML 是如何工作的,并且最可能的答案是 ajax,但要求是只能使用 java 和 html。页面通常在其容器中编译,然后将输出作为响应发送到浏览器,我想做类似以下的事情,而不使用 AJAX。

这必须发送日期并将其打印回浏览器而不加载所有 5 个日期...例如,新日期必须每 5 秒出现在网页上,而不是全部在 25 秒内出现。

有什么想法吗?

        for (int i = 1; i <= 5; i++) {
        out.println("<p>#" + i + " " + new Date() + "</p>");
        out.flush();
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
        }
    }

【问题讨论】:

  • 隐藏那些&lt;p&gt;s 然后通过javascript显示出来怎么样。否则我认为这里没有任何简单的解决方案。 Servlet 不使用魔法;)它们依赖于 HTML 的单向性,但您知道这一点。
  • 无法隐藏它们,我必须在生成数据时将其打印出来。不使用 ajax 或 javascript .... 但据我所知,这不能仅使用 HTML 来完成....
  • HTML 是一种文档描述语言。让它感觉活着的一切都是javascript。 HTML5 正在反对这一点,你仍然需要 javascript 来实现重要的事情。为什么不允许使用 AJAX 或 JS?
  • Comet is an umbrella term, encompassing multiple techniques for achieving this interaction. All these methods **rely on features included by default in browsers, such as JavaScript**, rather than on non-default plugins. Comet 可以做到这一点,但不知道它是否真的适合。

标签: java servlets asynchronous println


【解决方案1】:

解决办法:

OutputStream 直接打印到浏览器中,但由于我有一个代理在工作,所以代理正在缓存数据,因为它正在被打印出来,绕过代理解决了这个问题。输出流在它和浏览器之间没有缓存,允许它直接打印到浏览器的输出中。

通过此示例,您可以看到数据被逐行打印到浏览器窗口中,它不会在显示数据之前等待整整 25 秒。

public void doGet(HttpServletRequest 请求, HttpServletResponse 响应)抛出 ServletException, IO异常{ response.setContentType(CONTENT_TYPE); response.setHeader("CacheControl", "no-cache"); //PrintWriter out = response.getWriter();

OutputStreamWriter osr = new OutputStreamWriter(response.getOutputStream());
BufferedWriter br = new BufferedWriter(osr);

br.append("<html>");
br.append("<head><title>Load</title></head>");
br.append("<body>");
for (int i = 1; i <= 5; i++) {
    br.append("<div>#" + i + " " + new Date() + "</div>");
    br.flush();
    try {
        Thread.sleep(5000);
    } catch (InterruptedException e) {
        System.out.println("Cannot sleep");
    }
}
br.append("</body></html>");

br.close();

}

【讨论】:

    猜你喜欢
    • 2016-02-16
    • 2014-03-01
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多