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

时间:2012-05-16 08:33:31

标签: java apache servlets mod-jk 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

1 个答案:

答案 0 :(得分:1)

原来我需要的是为Tomcat构建基于APR的Native库。根据说明here正确构建和安装后,它可以与AJP一起使用。