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

Sus*_*ndi 10 java websphere jsp servlets

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

Bal*_*usC 25

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

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

  • HttpServletResponse#sendRedirect() 被称为.
  • 已经通过Servlet或JSP将超过2K写入响应输出.
  • 超过0K但小于2K已被写入 flush()被援引在响应输出流,无论是由servlet或JSP.

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

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