求救:WAS日志总是打印 WARNING: Cannot set status. Response already committed
WAS部署了一套应用,由于用户比较庞大,服务器压力很大,上线3个月,已经宕机4、5次了,查看日志,老有警告[09-8-18 15:30:28:343 CST] 00001d9c SRTServletRes W WARNING: Cannot set status. Response already committed.
[09-8-18 15:30:28:343 CST] 00001d9b SRTServletRes W WARNING: Cannot set status. Response already committed.
[09-8-18 15:30:28:343 CST] 00001d9c SRTServletRes W WARNING: Cannot set header. Response already committed.
[09-8-18 15:30:28:343 CST] 00001d9b SRTServletRes W WARNING: Cannot set header. Response already committed.
[09-8-18 15:30:28:343 CST] 00001d9c SRTServletRes W WARNING: Cannot set status. Response already committed.
[09-8-18 15:30:28:343 CST] 00001d9c SRTServletRes W WARNING: Cannot set header. Response already committed.
[09-8-18 15:30:28:343 CST] 00001d9c SRTServletRes W WARNING: Cannot set status. Response already committed.
[09-8-18 15:30:28:343 CST] 00001d9c SRTServletRes W WARNING: Cannot set header. Response already committed.
[09-8-18 15:30:28:359 CST] 00001d9c SRTServletRes W WARNING: Cannot set status. Response already committed.
[09-8-18 15:30:28:359 CST] 00001d9c SRTServletRes W WARNING: Cannot set header. Response already committed.
应用使用的是 Struts2.0 Spring2.5 ,请高手帮忙! --------------------编程问答-------------------- 有人知道是什么问题吗? --------------------编程问答-------------------- 代码写的有问题。当我们往 out 里面写过东西了就不能再 getWriter 或 getOutputStream() 又来写东西,也不能 sendRediect;反过来,如果 sendRedirect 就不能再 out.write 或 getWriter /getoutputStream 之类的再写响应内容,因为已经通过 sendRedirect 响应过了。
这个问题两个可能导致 IllegalStateException,从你的 Response already committed 看来,好像是下面的第一点:
一、
HTTP 的工作中,
一种响应是正常的,也就是当你有答复时,往输出给客户端浏览器的 socket 中写出 HTTP HEAD 内容 + HTTP Body 内容。
另一种是发送重定向,这个时候你只能往 socket 中写出 HTTP HEAD 内容,BODY 是不允许的,因为 redirect 表示答复由另一个 URL 给出,所以就不要再多此一举了。
上面两种方式只能取其一。
二、你不能用 JSP 内置变量 out 的同时又 getWriter 或 get response 的 output stream。
--------------------编程问答--------------------
正解
补充:企业软件 , WebSphere