Java 是否應(yīng)該在HttpServletResponse.getOutputStream()/getWriter()上調(diào)用.close()?
通常,你不應(yīng)該關(guān)閉流。在Servlet完成作為Servlet請求生命周期的一部分運行之后,Servlet容器將自動關(guān)閉流。
例如,如果你關(guān)閉流,那么在實現(xiàn)Filter的情況下將不可用。
說了這么多,只要你關(guān)閉它,只要你不嘗試再次使用它,都不會發(fā)生任何不良情況。
編輯:另一個篩選器鏈接
EDIT2:adrian.tarau是正確的,因為如果你想在Servlet完成其操作后更改響應(yīng),則應(yīng)創(chuàng)建一個擴展HttpServletResponseWrapper的包裝器并緩沖輸出。這是為了防止輸出直接進入客戶端,還允許你保護servlet是否關(guān)閉流,如以下摘錄(強調(diào)我的話):
修改響應(yīng)的過濾器通常必須 在將響應(yīng)返回給客戶端之前捕獲該響應(yīng)。實現(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)閉輸出流。另一方面,我不認為在這種情況下有需要關(guān)閉的基礎(chǔ)資源。套接字的打開/關(guān)閉在HTTP級別進行管理,以允許諸如持久連接之類的事情。
相關(guān)文章:
1. android - NavigationView 的側(cè)滑菜單中如何保存新增項(通過程序添加)2. tp5 不同控制器中的變量調(diào)用問題3. 微信小程序可以用gulp,webpack嗎?4. mysql服務(wù)無法啟動1067錯誤,誰知道正確的解決方法?5. ueditor上傳服務(wù)器提示后端配置項沒有正常加載,求助!!!!!6. python - 為什么正常輸出中文沒有亂碼,zip函數(shù)之后出現(xiàn)中文編程unicode編碼的問題,我是遍歷輸出的啊。7. 老師 我是一個沒有學過php語言的準畢業(yè)生 我希望您能幫我一下8. 這段代碼既不提示錯誤也看不到結(jié)果,請老師明示錯在哪里,謝謝!9. php7.3.4中怎么開啟pdo驅(qū)動10. 提示語法錯誤語法錯誤: unexpected ’abstract’ (T_ABSTRACT)
