1

假设我有一个 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

4

1 回答 1

1

结果我只需要为 Tomcat 构建基于 APR 的 Native 库。根据此处的说明正确构建和安装它后,它与 AJP 配合得很好。

于 2012-06-18T06:04:21.610 回答