我在下面的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”.这是不正当行为还是打算?
@编辑
根据@Tomasz Nurkiewicz的建议,我再次用curl测试然后问题就消失了.似乎标准浏览器和tcp / ip监视器从同一个http响应中打包小块内容以将它们一起呈现.
@EDIT 2
还观察到HttpResponse #flushBuffer和PrintWriter#flush驱动Tomcat 7发送客户端chunked data.