2014-06-05 42 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