//設(shè)置輸出類容的類型,按照下面設(shè)置后flush()才會(huì)起作用
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()不會(huì)有作用。
如果要flush()起作用,必須先向緩沖區(qū)填充一定的內(nèi)容(測(cè)試為1024個(gè)字符)。
網(wǎng)上看到的原因是容器認(rèn)為緩沖區(qū)的內(nèi)容過(guò)少發(fā)送的效率不高。
設(shè)置了ContentType為text/html后,flush()就會(huì)立即起作用。
可能是因?yàn)閯?dòng)態(tài)生成Html的時(shí)候加載數(shù)據(jù)比較耗時(shí),可以先返回后讓瀏覽器解析樣式。(個(gè)人猜想)
上面的內(nèi)容沒(mé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)
***/
posted @
2016-10-09 18:22 jidebingfeng 閱讀(1274) |
評(píng)論 (0) |
編輯 收藏