刷新输出流在 Tomcat 下的 Servlet 中通过 AJP 被忽略



>假设我有一个Java Servlet,它需要一段时间才能完成它的响应计算,但我希望客户端看到中间响应,而不是等待它完成。例如,假设我有以下 doGet 代码:

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
    resp.setContentType("text/html");
    PrintWriter out = new PrintWriter(resp.getOutputStream());
    out.println("<h1>The Title</h1>");
    out.flush();
    // ... some computation that takes a while
    // ... now print the result via out
    out.close();
}

当我在本地运行Tomcat并访问Servlet时,我可以看到整个计算完成之前的<h1>

但是,当我在我的服务器上运行它并通过 Apache 访问它时,我只会在整个请求完成后得到响应(换句话说,我得到一个空白屏幕而不是我希望收到的<h1>)。

我怀疑问题出在 AJP 或 Apache 的某个地方,似乎它忽略了对flush()的调用,但我似乎找不到问题所在。

在服务器上,我使用的是Tomcat 6,Apache 2.2.21和AJP 1.3

事实证明,

我所需要的只是为 Tomcat 构建基于 APR 的原生库。根据此处的说明正确构建和安装后,它与 AJP 配合使用良好。

最新更新