0

我正在尝试按顺序将数据发送到网页,我确实知道 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) {
        }
    }
4

1 回答 1

0

解决方案 :

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

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

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 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();

}

于 2013-05-24T06:30:32.433 回答