无法在JSP中设置标头。 响应已经提交

WebSphere记录警告消息“SRTServletRes W警告:无法设置标头。 对于一个JSP请求已经提交的响应。 我稍后需要在代码中使用respone标头。 我做了一些研究,并了解到Servlet正在尝试向输出流发送更多数据,但该流已经提交。 我不明白为什么这只发生在这个特定的JSP上,因为这个Servlet代码适用于其他JSP。 此页面未重定向,我收到响应,没有响应标头。

提交响应时,意味着至少已将头文件发送到客户端。 在响应已提交时,您无法设置/更改标头,因为为时已晚。

只要满足以下一个或多个条件,就会提交响应:

  • 已调用HttpServletResponse#sendRedirect()
  • 已经通过Servlet或JSP将超过2K写入响应输出。
  • 编写了大于0K但小于2K的内容,并且通过Servlet或JSP在响应输出流上调用了flush()

2K缓冲区限制可在appserver的配置中配置。

您需要重新排列代码逻辑,以便它只在提交响应之前设置标头。 您不应该使用JSP内部/中间的scriptlet来设置/更改响应头。 您应该只在继续链之前在Filter执行此操作,或者在分派请求之前在页面控制器Servlet此操作。 还要注意JSP包含文件都不会调用它们。