首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我应该关闭servlet outputstream吗?

我应该关闭servlet outputstream吗?
EN

Stack Overflow用户
提问于 2009-12-02 07:52:19
回答 2查看 39.8K关注 0票数 59

可能重复:

Should one call .close() on HttpServletResponse.getOutputStream()/.getWriter()?

我应该负责关闭HttpServletResponse.getOutputStream() (或getWriter(),甚至输入流),还是应该把它留给容器?

代码语言:javascript
复制
protected void doGet(HttpServletRequest request, HttpServletResponse response) 
   throws ServletException, IOException {
    OutputStream o = response.getOutputStream();
    ... 
    o.close(); //yes/no ?
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-12-02 08:02:53

你确实不需要这样做。

经验法则:如果你没有使用new SomeOutputStream()自己创建/打开它,那么你就不需要自己关闭它。例如,如果它是一个new FileOutputStream("c:/foo.txt"),那么您显然需要自己关闭它。

有些人仍然这样做的原因只是为了确保不会再向响应正文中写入任何内容。如果发生这种情况,则会在应用程序服务器日志中导致IllegalStateException,但这不会影响客户端,因此客户端仍会获得正确的响应。这也是一种更容易的调试,可以发现请求-响应链中的潜在问题,这些问题乍一看是看不到的。例如,其他东西正在将更多的数据附加到响应体中链中更靠下的某个位置。

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

票数 78
EN

Stack Overflow用户

发布于 2009-12-02 07:54:18

不你不需要关闭它。如果这样做,基本上就结束了对客户端的响应。在关闭流之后,您不能向客户端发送任何其他内容,直到下一个请求。你没有打开流,所以你不必关闭它。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1829784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档