亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我應該關閉servlet輸出流嗎?

我應該關閉servlet輸出流嗎?

守候你守候我 2019-11-29 11:08:50
我應該負責關閉HttpServletResponse.getOutputStream()(或getWriter()或什至inputstream),還是應該將其留給容器?protected void doGet(HttpServletRequest request, HttpServletResponse response)    throws ServletException, IOException {    OutputStream o = response.getOutputStream();    ...     o.close(); //yes/no ?}
查看完整描述

2 回答

?
湖上湖

TA貢獻2003條經驗 獲得超2個贊

您確實不需要這樣做。

經驗法則:如果您沒有使用自己創建/打開它new SomeOutputStream(),則不需要自己關閉它。例如new FileOutputStream("c:/foo.txt"),如果它是一個,那么您顯然需要自己關閉它。

有些人仍然這樣做的原因僅僅是為了確保不會再將任何內容寫入響應主體。如果發生這種情況,則將IllegalStateException在appserver日志中導致,但這不會影響客戶端,因此客戶端仍會獲得正確的響應。這也是一種較容易的調試,可以發現請求-響應鏈中的潛在問題,這些乍看之下不會發現。例如,其他事情正在將更多數據附加到響應主體,位于鏈的更下游。

在初學者中看到的另一個原因是,他們只是想防止更多數據寫入響應主體。當JSP在響應中不正確地發揮作用時,您經常會看到這種情況。他們只是忽略IllegalStateException日志中的。不用說,這個特定目的是有害的。


查看完整回答
反對 回復 2019-11-29
?
莫回無

TA貢獻1865條經驗 獲得超7個贊

如果您打開了另一個InputStream對其進行包裝,則可能要關閉該流,因為該容器將看不到包裝流的可見性,包裝流可能包含未提交的字節。理想情況下,如果它是BufferedOutputStream之類的,則只刷新()包裝的數據流,但是我發現在使用CipherOutputStream時此類不會完全寫入數據(在這種情況下,我有充分的理由相信)。在這種情況下,有必要調用close()以便客戶端獲得正確的響應。

查看完整回答
反對 回復 2019-11-29
  • 2 回答
  • 0 關注
  • 1259 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號