【发布时间】:2012-04-12 20:32:22
【问题描述】:
我在下面的Tomcat 7 上测试了HttpResponse#flushBuffer 和PrintWriter#flush,但似乎响应宁愿忽略它们,而不是像预期的那样尽快通过网络刷新内容。
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
PrintWriter pw = response.getWriter();
pw.println("say hi now");
pw.flush();
response.flushBuffer();
try {
Thread.sleep(5000);
} catch (Exception e) {
}
pw.println("say bye in 5 seconds");
}
}
延迟后浏览器同时显示“hi”和“bye”。这是不当行为还是故意的?
@EDIT
根据@Tomasz Nurkiewicz 的建议,我再次使用curl 进行了测试,然后问题就消失了。似乎标准浏览器和 tcp/ip monitor 从同一个 http 响应中打包 small pieces of contents 以将它们一起呈现。
@EDIT 2
还观察到HttpResponse#flushBuffer 和PrintWriter#flush 都驱动Tomcat 7 发送客户端chunked data。
【问题讨论】:
-
我相信这是一个应用服务器配置。请参阅my post。
标签: java tomcat servlets tomcat7