调用HttpServletResponse.reset()会重置OutputStream,以便再次获取吗?

时间:2010-10-12 23:58:42

标签: servlets

这是一种情况。自定义servlet获取编写器并且它将执行一些工作,但是发生异常,因此由某些servlet框架进行控制。该框架具有直接在浏览器中报告问题的能力。因此,它会重置当前响应并获取输出流以报告问题。由于Writer已从响应对象中获取,因此会引发异常。那么问题又是,应该重置功能让忘记返回的流或作者,还是提出异常是合法的? Servlet规范没有给出明确的答案,所以我希望在社区的帮助下。是的,我不仅是servlet框架的开发人员,我也是servlet容器的开发人员,所以我需要知道每个组件的适当行为。

1 个答案:

答案 0 :(得分:6)

Servlet规范似乎是clear and unambiguous

  

void reset()

     

清除缓冲区中存在的所有数据以及状态代码和标头。如果已提交响应,则此方法将抛出IllegalStateException

换句话说,如果已将足够的数据写入响应,以便超出内存缓冲区,那么该数据将被“提交”,即实际发送到客户端。在那之后,响应无法重新定位,如果你尝试,将抛出异常。

如果可行,最好缓冲您的响应数据,以避免在生成数据的过程中出现异常的可能性。这使您可以选择将其移除并呈现错误响应。但是,出于性能和/或可伸缩性的原因,这并不总是一种选择。