応答の計算を完了するのに時間がかかる Java サーブレットがあるとしますが、クライアントが終了するのを待つのではなく、中間応答を確認したいとします。たとえば、次の 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 をローカルで実行してサーブレットにアクセスすると、計算全体が完了する<h1>
前に が表示されます。
ただし、サーバーで実行し、Apache 経由でアクセスすると、要求全体が完了した後<h1>
にのみ応答が返されます (つまり、受信するはずの画面ではなく、空白の画面が表示されます)。
この問題は AJP または Apache のどこかにあるのではflush()
ないかと考えています。
サーバーでは、Tomcat 6、Apache 2.2.21、および AJP 1.3 を使用しています