应该关闭/刷新Response.getWriter()

pvg*_*ijn 2 java servlets response

当一个Web应用程序我注意到resonse.getWriter()有人调用并输出它时,它PrintWriter永远不会刷新也不会关闭.

没有进一步的写入,所以我可以安全地冲洗或关闭它.该应用程序似乎工作正常,没有关闭编写器,并在org.apache.catalina.connector.CoyoteAdapter调用finishResponse()/finishRequest()无论如何,但这是tomcat的内部工作,似乎错误依赖.

关闭作者似乎是错误的,因为我不确定我是否真的response.getWriter()打电话给作家.(通常不认为)

法拉盛似乎更像是一个好主意,但我确信这是否被认为是"正确"的方式.

没有做任何冲洗或关闭感觉就像我可能在某些情况下泄漏资源.

Ste*_*n C 7

你并不需要flush()close()Writer.

以下是Servlet 3.1规范所说的内容:

5.6关闭响应对象

关闭响应时,容器必须立即将响应缓冲区中的所有剩余内容刷新到客户端.以下事件表明servlet已满足请求并且响应对象将被关闭:

  • 终止servlet的服务方法.
  • 诸如此类

由此我们可以推断,当服务方法返回或由于异常而终止时,应该刷新响应.

我找不到任何明确声明你不需要close()响应Writer的东西.但是,由于Web容器管理套接字,因此在请求生命周期(或连接生命周期......如果使用持久连接)时不能正确关闭它们将是疯狂的.因此,我认为可以安全地假设如果你忽略了呼叫就不会有资源泄漏close().(当然,没有一个精心设计的网络容器.)


另一方面,如果您知道编写器或输出流是当前请求的响应流/写入器,那么在请求处理结束时,您的servlet代码刷新和/或关闭它们是没有害处的.