教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

Java培訓(xùn)之HttpServletResponse的輸出問題

更新時(shí)間:2016年06月29日18時(shí)09分 來源:傳智播客Java篇培訓(xùn)學(xué)院 瀏覽次數(shù):

1 response的輸出流
response對象有g(shù)etWriter()和getOutputStream()兩個(gè)方法,它們都是用來向客戶端響應(yīng)用的流對象,不過一個(gè)是字符流,另一個(gè)是字節(jié)流。
  • PrintWriter getWriter():獲取響應(yīng)字符流,用來向客戶端響應(yīng)二進(jìn)制數(shù)據(jù),例如圖片;
  • ServletOutputStream getOutputStream():獲取響應(yīng)字節(jié)流,用來向客戶端響應(yīng)文本數(shù)據(jù),例如HTML代碼。
這兩者之前只能使用其中一個(gè),也就是說,要么使用字符流,要么使用字節(jié)流,不能兩者兼得。如果在獲取其中一個(gè)流對象后,再去獲取另一個(gè)流,那么就會(huì)出現(xiàn)異常。
2 刷新輸出流
response內(nèi)部的輸出流有8KB的緩沖區(qū),如果緩沖區(qū)滿了的話,那么response會(huì)自動(dòng)去提交,即把緩沖區(qū)內(nèi)容輸出給客戶端。這時(shí)調(diào)用response的isCommited()方法返回的就是true,表示response已經(jīng)提交過至少一次了。
也可以在緩沖區(qū)沒有裝滿時(shí)調(diào)用response.flushBuffer()方法刷新輸出流,把緩沖區(qū)中的數(shù)據(jù)發(fā)送到客戶端去。同樣,這也會(huì)導(dǎo)致response的isCommited()方法返回的就是true,表示response已經(jīng)提交過至少一次了。
其實(shí)也可以調(diào)用response.getWirter().flush()方法達(dá)到與調(diào)用response.flushBuffer()相同的效果。這兩種方式基本相同!
一旦response的isCommited()方法返回true,這說明服務(wù)器已經(jīng)至少把狀態(tài)碼、響應(yīng)頭等數(shù)據(jù)發(fā)送給客戶端了,也就是說已經(jīng)開始向客戶響應(yīng)了。
但是,這里你要注意一下,不是說服務(wù)器向客戶端發(fā)送了數(shù)據(jù),就表示數(shù)據(jù)一定會(huì)顯示在瀏覽器上。因?yàn)榭蛻舳说臑g覽器也許會(huì)有自己的緩存,在瀏覽器的緩存沒有滿之前,瀏覽器是不會(huì)去顯示的。例如IE8和Google瀏覽器就是這樣,但FireFox會(huì)馬上顯示數(shù)據(jù)!
測試得到IE8的緩存為16KB,只要響應(yīng)數(shù)據(jù)大于16KB就會(huì)在IE8上顯示出來。、

本文版權(quán)歸傳智播客Android培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!
作者:傳智播客Android培訓(xùn)學(xué)院
首發(fā):http://fskzgqt.cn/Android
0 分享到:
和我們在線交談!