我应该closuresservlet输出stream吗?

可能重复:
应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()吗?

我负责closuresHttpServletResponse.getOutputStream()(或getWriter()甚至inputstream)还是应该把它留给容器?

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { OutputStream o = response.getOutputStream(); ... o.close(); //yes/no ? } 

你确实不需要这样做。

拇指规则:如果您没有使用new SomeOutputStream()自己创build/打开它,那么您不需要自己closures它。 如果它是例如一个new FileOutputStream("c:/foo.txt") ,那么你显然需要自己closures它。

有些人还是这么做的原因,只是为了确保没有什么会写入响应机构。 如果它发生,那么这将在appserver日志中导致IllegalStateException ,但是这不会影响客户端,所以客户端仍然得到正确的响应。 这也是一个更容易的debugging,可以发现请求 – 响应链中潜在的问题,而您一眼就看不到这些问题。 例如,其他的东西就是将更多的数据附加到链中更下面的响应主体。

你在初学者中看到的另一个原因是,他们只是想阻止更多的数据写入响应主体。 当JSP在响应中错误地扮演angular色时,您经常会看到这种情况。 他们只是忽略日志中的IllegalStateException 。 不用说,这个特定的目的是不好的

不,你不需要closures它。 如果你是基本结束对客户的回应。 closuresstream之后,直到下一个请求才能向客户端发送任何其他内容。 你没有打开stream,所以你不必closures它。