嗨,我试图找出stackoverflow错误。
我只知道错误来自
org.apache.catalina.core.ApplicationDispatcher。setAttribute on line278
但我不知道是什么引起的。
跟踪错误的最佳方法是什么?这就像大海捞针一样,因为有50多个课程。
我怎么知道哪个方法调用这个得到一个错误?(就像我想要打开调试模式来跟踪这个stackoverflow一样)。
如果没有看到堆栈跟踪并解释/理解重复模式,很难确定真正的原因。
然而,在JSF web应用程序中最常见的可能导致StackOverflowError
的初学者错误如下:
-
无效的
FacesServlet
映射。例如,映射到*.jsp
上,而视图本身已经是*.jsp
。你应该把它映射到别的东西上,比如*.jsf
。当您将JSF2与Facelets一起使用时,这是不必要的。视图和映射都可以是*.xhtml
。 -
具有无效文件扩展名的JSF视图文件。例如实际上具有
page.jsf
文件而不是page.jsp
或page.xhtml
,而FacesServlet
被映射到*.jsf
上。
我敢打赌你的病是由这两个原因之一引起的。其他可能的原因通常归结为后台bean类中的错误代码,但它通常不会在跟踪的重复部分中涉及容器的内部类,如org.apache.catalina.core.ApplicationDispatcher
。
跟踪错误的最佳方法是查看堆栈跟踪,可能有一些递归正在进行,您的跟踪可能会有重复的方法调用序列
在TOMCAT_HOME/logs/
文件夹(Tomcat 6 &7),有一个catalina.yyyy-mm-dd.log
文件,包含所有记录的消息(包括由应用程序抛出的异常)。获取最新的(今天的)日志文件并查看抛出异常的位置(通常是错误发生的最近时间)。
我有这个问题,对我来说,这似乎是一个错误-创建一个空的faces-config.xml使它消失(是解决方案)。还配置/安装了CDI。