可能重复:
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 ?
}
发布于 2009-12-02 08:02:53
你确实不需要这样做。
经验法则:如果你没有使用new SomeOutputStream()
自己创建/打开它,那么你就不需要自己关闭它。例如,如果它是一个new FileOutputStream("c:/foo.txt")
,那么您显然需要自己关闭它。
有些人仍然这样做的原因只是为了确保不会再向响应正文中写入任何内容。如果发生这种情况,则会在应用程序服务器日志中导致IllegalStateException
,但这不会影响客户端,因此客户端仍会获得正确的响应。这也是一种更容易的调试,可以发现请求-响应链中的潜在问题,这些问题乍一看是看不到的。例如,其他东西正在将更多的数据附加到响应体中链中更靠下的某个位置。
你在启动器中看到的另一个原因是,他们只是想防止更多的数据被写入响应体。当JSP错误地在响应中扮演角色时,您经常会看到这种情况。它们只是忽略日志中的IllegalStateException
。不用说,这个特定的目的是不好的。
发布于 2009-12-02 07:54:18
不你不需要关闭它。如果这样做,基本上就结束了对客户端的响应。在关闭流之后,您不能向客户端发送任何其他内容,直到下一个请求。你没有打开流,所以你不必关闭它。
https://stackoverflow.com/questions/1829784
复制相似问题