Possible Duplicate:
Should one call .close() on HttpServletResponse.getOutputStream()/.getWriter()?
我是否负责关闭 HttpServletResponse.getOutputStream() (或 getWriter() 甚至输入流) 还是我应该把它留在容器里?
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
OutputStream o = response.getOutputStream();
...
o.close(); //yes/no ?
}
最佳答案
您确实不需要这样做。
拇指规则:如果您没有使用 new SomeOutputStream()
自己创建/打开它,那么您不需要自己关闭它。例如,如果它是一个 new FileOutputStream("c:/foo.txt")
,那么您显然需要自己关闭它。
有些人仍然这样做的原因只是为了确保不会再向响应正文写入任何内容。如果它曾经发生,那么这将在 appserver 日志中导致 IllegalStateException
,但这不会影响客户端,因此客户端仍然会得到正确的响应。这也是一种更容易调试的方法,可以发现请求-响应链中的潜在问题,而这些问题您乍一看是看不到的。例如,其他东西正在将更多数据附加到响应正文中更下游的某个位置。
您在初学者中看到的另一个原因是他们只是想防止将更多数据写入响应正文。当 JSP 错误地在响应中发挥作用时,您经常会看到这种情况。他们只是忽略日志中的 IllegalStateException
。不用说,这个特殊的目的是不好的。
关于java - 我应该关闭 servlet 输出流吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1829784/