【问题标题】:java.lang.stackoverflowerror on jsf application with tomcat带有tomcat的jsf应用程序上的java.lang.stackoverflowerror
【发布时间】:2011-08-17 13:38:02
【问题描述】:

您好,我正在尝试找出 stackoverflow 错误。

我只知道错误来自

org.apache.catalina.core.ApplicationDispatcher.setAttribute 上线 278

但我不知道是什么原因造成的。

跟踪错误的最佳方法是什么?这就像在干草堆里找一根针,因为有 50 多个班级。

我如何知道哪个方法调用它来获取错误? (比如我想打开调试模式来跟踪这个stackoverflow)。

【问题讨论】:

  • 无论如何,请分享堆栈跟踪。重复的模式可以说明原因。
  • java.lang.StackOverflowError 通常是由无限递归调用引起的。您有权访问堆栈跟踪吗?

标签: java jsf tomcat stack-overflow


【解决方案1】:

如果不查看堆栈跟踪并解释/理解重复模式,就很难确定真正的原因。

但是,可能导致 JSF Web 应用程序中出现StackOverflowError 的最常见的初学者错误如下:

  • FacesServlet 映射无效。例如。映射到*.jsp,而视图本身已经是*.jsp。你应该把它映射到别的东西上,例如*.jsf。当您将 JSF2 与 Facelets 一起使用时,这不是必需的。视图和映射都可以是*.xhtml

  • 具有无效文件扩展名的 JSF 视图文件。例如。 实际上有一个page.jsf 文件而不是page.jsppage.xhtmlFacesServlet 映射到*.jsf

我敢打赌,您的问题是由上述任何一个原因引起的。其他可能的原因通常归结为支持 bean 类中的错误代码,但通常不会在跟踪的重复部分涉及容器的内部类,例如 org.apache.catalina.core.ApplicationDispatcher

【讨论】:

  • 你在打赌吗?你愿意在桌子上放多少? :p
  • @The Elite:嗯,在南非和你一起喝一罐啤酒,包括机票。
【解决方案2】:

跟踪错误的最佳方法是查看堆栈跟踪,可能存在递归,您的跟踪可能会有重复的方法调用序列。

【讨论】:

    【解决方案3】:

    TOMCAT_HOME/logs/ 文件夹(Tomcat 6 和 7)中,有一个 catalina.yyyy-mm-dd.log 文件,其中包含所有记录的消息(包括应用程序抛出的异常)。获取最新的(今天的)日志文件并查看引发异常的位置(通常是最近发生错误的时间)。

    【讨论】:

      【解决方案4】:

      我遇到了这个问题,对我来说这似乎是一个错误 - 创建一个空 faces-config.xml 使它消失(是解决方法)。 CDI 也被配置/安装。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-21
        • 2017-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-20
        • 1970-01-01
        • 2018-09-10
        相关资源
        最近更新 更多