【发布时间】:2012-07-06 00:03:52
【问题描述】:
如何将文本输出流式传输到浏览器上的页面以显示可能需要大约 15 到 20 秒的操作进度?我已经尝试直接写入HttpServletResponse 的输出流,但用户仍然看到完整的输出整个过程完成后。
这是我迄今为止尝试过的
@RequestMapping(value = "/test")
public void test(HttpServletResponse response)
throws IOException, InterruptedException {
response.getOutputStream().println("Hello");
response.getOutputStream().flush();
Thread.sleep(2000);
response.getOutputStream().println("How");
response.getOutputStream().flush();
Thread.sleep(2000);
response.getOutputStream().println("are");
response.getOutputStream().flush();
Thread.sleep(2000);
response.getOutputStream().println("you");
response.getOutputStream().flush();
}
【问题讨论】:
-
您是否尝试过在每次发送数据后刷新输出流?
-
@Luciano 我已经将我迄今为止尝试过的内容添加到了问题中。当我从 Chrome 查看页面时,这不起作用
-
我认为你最好的选择是另一种方法:在 javascript 中使用一个计时器,它使用 ajax 每 1 秒(或半秒)从 /test 获取数据,并且 /test 将返回任何没有'在调用它之前没有被发送。
-
@Luciano 你建议的是我的后备计划,无论如何我可能最终都会使用它。但是,如果我的问题有一个有效的答案,我可以看到这是在没有异步作业执行器和状态管理的情况下完成的,我觉得这会更优雅。
-
您也可以尝试使用 Web 套接字,但这需要对您的应用程序进行更多更改。
标签: java servlets spring-mvc