JAVA使用tomcat在jsf应用程序上运行lang.StackOverflowerError
嗨,我正在试图找出stackoverflow错误
我所知道的只是错误的来源
org.apache.catalina.core.ApplicationDispatcher.setAttribute on line 278
但我不知道是什么引起的
跟踪错误的最佳方法是什么?这就像在干草堆里捞针,因为有50多个班级
我如何知道哪个方法调用它来获取错误?(例如,我希望打开调试模式以跟踪此stackoverflow的哪个方法)
# 1 楼答案
在
TOMCAT_HOME/logs/
文件夹(tomcat6&;7)中,有一个catalina.yyyy-mm-dd.log
文件,其中包含所有记录的消息(包括应用程序引发的异常)。获取最新(今天的)日志文件,并查看引发异常的位置(通常是错误发生的最近时间)# 2 楼答案
如果看不到stacktrace和解释/理解重复模式,就很难确定真正的原因
但是,在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
# 3 楼答案
跟踪错误的最佳方法是查看堆栈跟踪,可能存在递归现象,您的跟踪可能会有重复的方法调用序列
# 4 楼答案
我有这个问题,对我来说,这似乎是一个bug——创建一个空的faces配置。xml使它消失了(这是一个解决办法)。还配置/安装了CDI