sof*_*sof 7 java tomcat servlets tomcat7
我测试HttpResponse#flushBuffer
及PrintWriter#flush
上Tomcat 7
下方,但它似乎是回应,而忽略了他们比尽快冲洗过线的内容符合市场预期.
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");
}
}
Run Code Online (Sandbox Code Playgroud)
在延迟之后,浏览器一起显示"hi"和"bye".这是不正当行为还是打算?
@编辑
根据@Tomasz Nurkiewicz
我的建议,我再次测试,curl
然后问题就消失了.似乎标准的浏览器和tcp/ip monitor
包small pieces of contents
来自同一个http响应将它们组合在一起.
@EDIT 2
它也观察到,HttpResponse#flushBuffer
并且PrintWriter#flush
驱动Tomcat 7
发送客户端分块数据.
小智 6
我刚才有同样的问题.要阻止浏览器等待页面完成加载,然后才能进行任何渲染,您需要从以下开始:
response.setContentType("text/html;charset=UTF-8");
Run Code Online (Sandbox Code Playgroud)
APIflushBuffer()
非常精确:
强制将缓冲区中的任何内容写入客户端。调用此方法会自动提交响应,这意味着将写入状态代码和标头。
因此,要么 Tomcat 没有按照规范实现(更积极地缓冲,如果太小则保持刷新),要么客户端(浏览器)在实际渲染之前等待更多输入。
归档时间: |
|
查看次数: |
6739 次 |
最近记录: |