2014-06-05 75 views
0

我有一個這樣的代碼......我可以關閉servlet中的包裝器輸入流或輸出流類嗎?

class DemoServlet extends HttpServlet 
{  
    doPost(HttpReqeust httpRequest,HttpResponse httpResponse) 
     { 
      try { 
       ObjectInputStream input=new ObjectInputStream(httpRequest.getInputStream()); 
       Object ojb=input.readObject(); 
       ObjectOutputStream output=new ObjectOutputStream(httpResponse.getOutputStream()); 
       } 
      catch(Exception ex){ 
        ex.printStackTrace(); 
       } 
      finally{ 
       input.close(); // it is necessary to close or it will handle by the servlet container to 
       output.close(); // the outputstream or inputstream. 
      } 
     }} 

我知道,收盤httpRequest.getInputStream()和httpResponse.getOutputStream()不是必需的,但是是不是要關閉其包裝InputStream的Stream類和outputstream.Is他們創建一些問題或拋出異常。

+0

查找到自定義的請求和響應嘗試用資源模式一起解釋了The Java EE 5 Tutorial - Filtering Requests and Responses。你可能會泄漏流。捕捉所有例外通常是不好的做法。 –

回答

1

Java SE中的封裝流/讀取器/編寫器關閉底層流(當它們關閉時),因此如果要保持打開狀態,請不要關閉包裝器。

編輯: Readerclose()文檔可能解釋更好。包裝器(如InputStreamReader)通常在不覆蓋文檔的情況下爲接口擴展此類。

ObjectOutputStream的情況下,您可以檢查source中的行爲。

+0

你可以用一些例子來詳細說明你的答案嗎?所以,我可以正確理解它,並提前致謝。 – Sahil

+0

@Sahil增加了一些例子,希望它有幫助。 –

+0

這意味着總體結論是,如果我關閉ObjectInputStream或ObjectOutputStream,那麼我的httpRequest.getInputStream()或httpResponse.getOutputStream()也分別關閉。所以,你想說最好保持它們打開,以後它是由容器自動關閉。我對嗎 ? – Sahil