【问题标题】:What harm is caused by java.lang.IllegalStateException: Response already committedjava.lang.IllegalStateException: Response has been committed 有什么危害
【发布时间】:2010-01-06 10:43:23
【问题描述】:

我的 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)

截断。查看完整堆栈跟踪的日志文件

我想知道如果不加以修复会造成什么危害?这个错误在我加入团队之前就已经在我的应用程序中出现了,这是否严重到可以称为“需要立即修复”?

【问题讨论】:

    标签: jsp jakarta-ee weblogic


    【解决方案1】:

    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) 在我看来,查看库源代码是快速调试依赖于框架的问题的最佳方式。
    【解决方案2】:

    这意味着应用程序在响应发送后尝试发送 HTTP 标头。这会造成什么样的伤害取决于应用程序。

    大多数情况下,浏览器可以容忍丢失的 HTTP 标头,但是,例如,如果您想指定一个特殊的 Content-Type,这可能会成为问题。

    尽管如此,我建议您找到问题的根本原因,以避免任何令人困惑或“奇怪”的结果。

    【讨论】:

      【解决方案3】:

      这取决于,错误的含义是您已写入 HttpResponse 对象并开始发送响应(通过调用 flush()、sendError() 或 sendRedirect()),因此可能会向响应流添加任何内容(或标题等)或后续操作(例如,您调用了flush(),现在您调用了sendError())请求将丢失。

      【讨论】:

      • 请原谅我的经验不足,但我并不清楚。我们的 struts 应用程序有一些 DispatchAction 类,其中通过调用适当的 BusinessDeleegators 来执行业务逻辑,一旦一切正常,该方法通过在 ActionMapping 实例上调用 findForward 来返回。你看到这里有问题吗..?
      • 除非您的业务逻辑向您的响应对象发送消息,否则不会。我对struts不太熟悉,所以我不能真正在那个级别做出智能响应,我只能说,根据我对基本servlet的经验,我通过多次“提交”响应对象看到了这个错误。抱歉,我无法提供更多帮助。
      猜你喜欢
      • 2020-03-13
      • 2018-09-26
      • 2013-07-05
      • 2019-10-14
      • 1970-01-01
      • 1970-01-01
      • 2021-03-23
      • 2015-09-12
      • 2011-09-17
      相关资源
      最近更新 更多