我可以在servlet中关闭包装器输入流或输出流类吗?

时间:2014-06-05 06:02:58

标签: java servlets inputstream outputstream

我有一个代码......

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()的关闭不是必需的,但关闭Stream类是正确的,它包装了输入流和输出流。它们会产生一些问题或抛出异常。

2 个答案:

答案 0 :(得分:1)

Java SE中的包装器流/读取器/写入器关闭底层流(当它们关闭时),因此如果要保持它们打开,请不要关闭包装器。

编辑: Reader close()文档可能会更好地解释。包装器(如InputStreamReader)通常会为接口扩展此类,而不会覆盖文档。

如果ObjectOutputStream的情况类似,您可以查看source中的行为。

答案 1 :(得分:0)

让我们从The Java EE 5 Tutorial - Filtering Requests and Responses开始,详细解释它,以及如何使用HttpServletResponseWrapperHttpServletRequestWrapper

自定义请求和响应的示例