如何从Java Spring MVC 3.0 Webapp流式传输文本响应

Dan*_*ish 6 java servlets spring-mvc

如何将文本输出流式传输到浏览器上的页面以显示可能需要大约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();
}
Run Code Online (Sandbox Code Playgroud)

tha*_*guy 2

我不是 Spring MVC 专家,但我认为你会做一些类似发送“已接受”202 响应代码的事情,这表明服务器已收到请求并将进行一些异步处理。通常,服务器提供一个 URL 以允许客户端发出有关操作状态的请求。您尝试做的事情违反了服务器/客户端关系的通常工作方式。客户端调用服务器,服务器响应然后关闭连接。您在什么情况下尝试这样做以及出于什么原因?也许我可以提供更多见解或想出另一种方法来做到这一点?

  • 感谢您的关注!基本上,我想为用户提供请求作业执行的能力,能够监视进度并在作业完成后更新其视图。我可以看到如何通过使作业执行器异步并在“会话”中维护某些状态并从 UI 进行轮询来完成此操作。*但是*如果我的问题有一个有效的答案,我可以看到这是在没有异步执行器和状态管理的情况下完成的。 (2认同)