java - 我应该关闭 servlet 输出流吗?

标签 java servlets

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/

相关文章:

java - 如何设置 JRViewer 导出选项?

java - 覆盖 Tomcat 基本身份验证

java - 如何提取 key :value from html

java - 如何从 strings.xml 中获取字符串值并将其放入 arraylist [android]

java - 将父类(super class)对象放入下限通配符列表时出错

Java Servlet 容器性能?

java - Reveal/know/get 发送页面使用servlet中的request或session

java - Spring Security、Spring MVC 和登录 session

java - netbeans构建Maven项目jar文件,无需依赖jar文件

java - Java 中的 Memento 不通过撤消更新状态