Java 是否應(yīng)該在HttpServletResponse.getOutputStream()/。getWriter()上調(diào)用.close()?
通常,你不應(yīng)該關(guān)閉流。在Servlet完成作為Servlet請求生命周期的一部分運(yùn)行之后,Servlet容器將自動關(guān)閉流。
例如,如果你關(guān)閉流,那么在實(shí)現(xiàn)Filter的情況下將不可用。
說了這么多,只要你關(guān)閉它,只要你不嘗試再次使用它,都不會發(fā)生任何不良情況。
編輯:另一個篩選器鏈接
EDIT2:adrian.tarau是正確的,因?yàn)槿绻阆朐赟ervlet完成其操作后更改響應(yīng),則應(yīng)創(chuàng)建一個擴(kuò)展HttpServletResponseWrapper的包裝器并緩沖輸出。這是為了防止輸出直接進(jìn)入客戶端,還允許你保護(hù)servlet是否關(guān)閉流,如以下摘錄(強(qiáng)調(diào)我的話):
修改響應(yīng)的過濾器通常必須 在將響應(yīng)返回給客戶端之前捕獲該響應(yīng)。實(shí)現(xiàn)此目的的方法是將生成響應(yīng)的servlet傳遞給替代流。替身流阻止servlet在完成時關(guān)閉原始響應(yīng)流,并允許過濾器修改servlet的響應(yīng)。
解決方法我無法通過一些Google搜索找到權(quán)威的答案。在Java Servlet中,可以通過response.getOutputStream()或response.getWriter()訪問響應(yīng)主體。寫入流后,是否應(yīng)該在此流上調(diào)用.close()?
一方面,Blochian鼓勵始終關(guān)閉輸出流。另一方面,我不認(rèn)為在這種情況下有需要關(guān)閉的基礎(chǔ)資源。套接字的打開/關(guān)閉在HTTP級別進(jìn)行管理,以允許諸如持久連接之類的事情。
相關(guān)文章:
1. javascript - 我是做web前端的,公司最近有一個項(xiàng)目關(guān)于數(shù)據(jù)統(tǒng)計(jì)的!2. javascript - vue過渡效果 css過渡 類名的先后順序3. MySQL主鍵沖突時的更新操作和替換操作在功能上有什么差別(如圖)4. javascript - 在ie下為什么會出現(xiàn)這種情況呢 《 無法獲取未定義或 null 引用的屬性“l(fā)ength”》 ?請大神指教。5. css右浮動字的順序顛倒了6. 數(shù)據(jù)庫 - Mysql的存儲過程真的是個坑!求助下面的存儲過程哪里錯啦,實(shí)在是找不到哪里的問題了。7. ios - 類似微博首頁,一張圖的時候是如何確定圖大小的?8. javascript - vuejs+elementui 購物車價格計(jì)算,點(diǎn)擊加減號修改數(shù)量總價都不會改變,但是計(jì)算執(zhí)行了9. javascript - 如何使用loadash對[object,object,object]形式的數(shù)組進(jìn)行比較10. html5和Flash對抗是什么情況?
