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

Dmi*_*riy 1 servlets

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

ska*_*man 6

Servlet规范似乎清晰明确:

void reset()

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

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

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