//設(shè)置輸出類容的類型,按照下面設(shè)置后flush()才會起作用
response.setContentType("text/html; charset=UTF-8");
request.setCharacterEncoding("UTF-8");
PrintWriter writer = response.getWriter();
for(int index = 0 ;index < 5 ;index++){
writer.write("你好!<br />");
writer.flush();
try {
Thread.sleep(1000);
} catch (InterruptedException e) { }
}
writer.close();
/***
不設(shè)置ContentType直接使用flush()不會有作用。
如果要flush()起作用,必須先向緩沖區(qū)填充一定的內(nèi)容(測試為1024個字符)。
網(wǎng)上看到的原因是容器認(rèn)為緩沖區(qū)的內(nèi)容過少發(fā)送的效率不高。
設(shè)置了ContentType為text/html后,flush()就會立即起作用。
可能是因?yàn)閯討B(tài)生成Html的時候加載數(shù)據(jù)比較耗時,可以先返回后讓瀏覽器解析樣式。(個人猜想)
上面的內(nèi)容沒有在任何的官方文檔中看到。唯一在官方文檔中看到和內(nèi)容大小有關(guān)系的是關(guān)于Buffer大小的設(shè)置:
setBufferSize
public void setBufferSize(int size)
- Sets the preferred buffer size for the body of the response. The servlet container will use a buffer at least as large as the size requested. The actual buffer size used can be found using
getBufferSize
.A larger buffer allows more content to be written before anything is actually sent, thus providing the servlet with more time to set appropriate status codes and headers. A smaller buffer decreases server memory load and allows the client to start receiving data more quickly.
This method must be called before any response body content is written; if content has been written or the response object has been committed, this method throws an IllegalStateException
.
- Parameters:
size
- the preferred buffer size- Throws:
java.lang.IllegalStateException
- if this method is called after content has been written- See Also:
getBufferSize()
, flushBuffer()
, isCommitted()
, reset()
http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/ServletResponse.html#setBufferSize(int)
***/
@Source:
@Author:zlong
posted on 2016-10-09 18:22
jidebingfeng 閱讀(1276)
評論(0) 編輯 收藏