Java webapp在Linux上产生StackOverflow异常

问题描述 投票:0回答:2

我有一个在Tomcat 9上运行的Java-web应用程序。它在Windowns机器上运行良好。但是在Debian Linux服务器上部署这个应用程序后,我在某些特定页面上遇到了java.lang.StackOverflow异常。这是stacktrace日志的开头:

27-Dec-2017 08:54:43.746 SEVERE [https-jsse-nio-9443-exec-3] 
org.apache.catalina.core.ApplicationDispatcher.invoke Servlet.service() for 
servlet [jsp] threw exception
java.lang.StackOverflowError
at java.io.UnixFileSystem.canonicalize0(Native Method)
at java.io.UnixFileSystem.canonicalize(UnixFileSystem.java:172)
at java.io.File.getCanonicalPath(File.java:618)
at org.apache.catalina.webresources.AbstractFileResourceSet.file(AbstractFileResourceSet.java:90)

请在这里查看完整的堆栈跟踪:https://pastebin.com/0AmFDY8F

据我所知,在Jasper编译JSP页面源时出现异常,并且它与Linux路径/目录的解析有某种关系。有人可以帮我弄清楚究竟是什么问题吗?如果问题可能与此相关,我没有创建任何符号链接。

java linux tomcat web stack-overflow
2个回答
0
投票

根据您的堆栈跟踪,问题是由于无法找到Spring框架解析的特定路径引起的:

org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154)

...

引起:java.io.IOException:JSPException包括路径'/struct/context/tutorials.jsp'。

Spring框架很可能使用规范路径来解析文件,并且它可能失败,因为框架中存在与您正在部署的Unix系统类型相关的一些怪癖。

请在Spring文档中引用它:

默认脚本支持大多数Linux发行版,并在CentOS和Ubuntu上进行测试。其他平台,如OS X和FreeBSD,将需要使用自定义embeddedLaunchScript。

请注意,Debian未列出。希望这会让你走上正确的道路。 如果我在这里追逐一只红鲱鱼,我很抱歉 - 但你没有给我们太多的帮助。


0
投票

最后我发现导致StackOverflow异常的原因。我有一个递归的JSP标记调用来呈现<select>标记的嵌套选项。删除递归后,异常消失了。当然,这只是一种解决方法,所以我仍然想知道为什么它在Windows上运行良好而在Linux上运行不正常。

© www.soinside.com 2019 - 2024. All rights reserved.