Java 是否應(yīng)該在HttpServletResponse.getOutputStream()/。getWriter()上調(diào)用.close()?
通常,你不應(yīng)該關(guān)閉流。在Servlet完成作為Servlet請(qǐng)求生命周期的一部分運(yùn)行之后,Servlet容器將自動(dòng)關(guān)閉流。
例如,如果你關(guān)閉流,那么在實(shí)現(xiàn)Filter的情況下將不可用。
說(shuō)了這么多,只要你關(guān)閉它,只要你不嘗試再次使用它,都不會(huì)發(fā)生任何不良情況。
編輯:另一個(gè)篩選器鏈接
EDIT2:adrian.tarau是正確的,因?yàn)槿绻阆朐赟ervlet完成其操作后更改響應(yīng),則應(yīng)創(chuàng)建一個(gè)擴(kuò)展HttpServletResponseWrapper的包裝器并緩沖輸出。這是為了防止輸出直接進(jìn)入客戶(hù)端,還允許你保護(hù)servlet是否關(guān)閉流,如以下摘錄(強(qiáng)調(diào)我的話(huà)):
修改響應(yīng)的過(guò)濾器通常必須 在將響應(yīng)返回給客戶(hù)端之前捕獲該響應(yīng)。實(shí)現(xiàn)此目的的方法是將生成響應(yīng)的servlet傳遞給替代流。替身流阻止servlet在完成時(shí)關(guān)閉原始響應(yīng)流,并允許過(guò)濾器修改servlet的響應(yīng)。
解決方法我無(wú)法通過(guò)一些Google搜索找到權(quán)威的答案。在Java Servlet中,可以通過(guò)response.getOutputStream()或response.getWriter()訪(fǎng)問(wèn)響應(yīng)主體。寫(xiě)入流后,是否應(yīng)該在此流上調(diào)用.close()?
一方面,Blochian鼓勵(lì)始終關(guān)閉輸出流。另一方面,我不認(rèn)為在這種情況下有需要關(guān)閉的基礎(chǔ)資源。套接字的打開(kāi)/關(guān)閉在HTTP級(jí)別進(jìn)行管理,以允許諸如持久連接之類(lèi)的事情。
相關(guān)文章:
1. apache web server 怎么限制某一個(gè)網(wǎng)站對(duì)服務(wù)器資源的占用?2. docker網(wǎng)絡(luò)端口映射,沒(méi)有方便點(diǎn)的操作方法么?3. docker start -a dockername 老是卡住,什么情況?4. java中返回一個(gè)對(duì)象,和輸出對(duì)像的值,意義在哪兒5. css3 - 純css實(shí)現(xiàn)點(diǎn)擊特效6. mysql - 在不允許改動(dòng)數(shù)據(jù)表的情況下,如何優(yōu)化以varchar格式存儲(chǔ)的時(shí)間的比較?7. 安全性測(cè)試 - nodejs中如何防m(xù)ySQL注入8. docker - 各位電腦上有多少個(gè)容器啊?容器一多,自己都搞混了,咋辦呢?9. javascript - 關(guān)于apply()與call()的問(wèn)題10. html5 - 請(qǐng)問(wèn)現(xiàn)在主流的前端自動(dòng)化構(gòu)建工具是哪個(gè)?
