我需要刷新servlet输出流吗?

Car*_*ayo 30 java servlets outputstream

我是否需要从HttpServletResponse中"刷新"OutputStream?

我已经看到了应该关闭servlet输出流吗?我不需要关闭它,但我不清楚是否需要冲洗它.我也应该从容器中得到它吗?

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
   throws ServletException, IOException {
   byte[] response = getResponse();
   String responseType = getResponseType();

   response.setContentLength(response.length);
   response.setContentType(responseType);
   response.getOutputStream().write(response);
   response.getOutputStream().flush(); // yes/no/why?
}
Run Code Online (Sandbox Code Playgroud)

Bal*_*usC 47

你不需要.servletcontainer将为您刷新并关闭它.顺便说一下,已经隐含地调用了flush.

另请参见Servlet 3.1规范的第5.6章:

5.6关闭响应对象

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

  • serviceservlet方法的终止.
  • 响应setContentLengthsetContentLengthLong方法中指定的内容量大于零并已写入响应.
  • sendError方法被调用.
  • sendRedirect方法被调用.
  • complete方法在AsyncContext被调用.

调用flush仍然运行servlet的服务通常是不仅有利于当你有相同的流多个作家,你要切换的作家(如混合二进制/字符数据文件),或当你想保持流指针开放在不确定的时间(例如日志文件).


mdr*_*drg 5

我猜你在其他问题中得到的答案同样适用于这里:如果它是你的流,请刷新并关闭它。否则,除非另有说明,否则流创建者应该这样做。