我在weblogic 10.3控制台日志中不断出现以下错误
java.lang.IllegalStateException: Response already committed
at weblogic.servlet.internal.ServletResponseImpl.objectIfCommitted(ServletResponseImpl.java:
1462)
at weblogic.servlet.internal.ServletResponseImpl.sendError(ServletResponseImpl.java:601)
at org.apache.struts.action.RequestProcessor.processMapping(RequestProcessor.java:658)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:193)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
截断。请参阅日志文件以获取完整的堆栈跟踪
我想知道如果留下不固定的话会造成什么伤害?在我加入团队之前,这个错误一直出现在我的应用程序中,这是否足以成为“需要立即修复”的资格?
答案 0 :(得分:10)
Struts是开源的。只需检查第658行之前的RequestProcessor
来源(如堆栈跟踪中所述):
// No mapping can be found to process this request
String msg = getInternal().getMessage("processInvalid", path);
log.error(msg);
response.sendError(HttpServletResponse.SC_NOT_FOUND, msg);
请参阅评论:No mapping can be found to process this request
。这是问题的根本原因。但是,显示错误消息的sendError()
调用也无法完成,因为响应已经提交。显然有两件事情是失败的:缺少一个映射,Struts映射的默认工作已经以不正确的方式以编程方式接管。
答案 1 :(得分:0)
这意味着应用程序尝试在发送响应后发送HTTP标头。这会带来什么样的伤害取决于应用程序。
大多数情况下,浏览器可以容忍丢失的HTTP标头,但是,例如,如果要指定特殊的Content-Type
,这可能会成为一个问题。
尽管如此,我建议你找出问题的根本原因,以避免任何令人困惑或“奇怪”的结果。
答案 2 :(得分:0)
这取决于,错误的含义是你已经写入你的HttpResponse对象并开始发送响应(通过调用flush(),sendError()或sendRedirect()),因此可能会对响应流添加任何内容(或者标题等)或者确实后续的操作(例如,你调用了flush(),现在你正在调用sendError())请求将丢失。