我有一个代码......
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类是正确的,它包装了输入流和输出流。它们会产生一些问题或抛出异常。
答案 0 :(得分:1)
Java SE中的包装器流/读取器/写入器关闭底层流(当它们关闭时),因此如果要保持它们打开,请不要关闭包装器。
编辑:
Reader close()
文档可能会更好地解释。包装器(如InputStreamReader)通常会为接口扩展此类,而不会覆盖文档。
如果ObjectOutputStream的情况类似,您可以查看source中的行为。
答案 1 :(得分:0)
让我们从The Java EE 5 Tutorial - Filtering Requests and Responses开始,详细解释它,以及如何使用HttpServletResponseWrapper和HttpServletRequestWrapper
自定义请求和响应的示例