4

我遇到StackOverflowErrors了对 GAE 上最新版本应用程序的所有请求。我找到了Issue #3588,但由于记者将其归咎于第三方库,而 Google 工程师不想再看下去,所以该问题已关闭。就我而言,没有第三方库可以责备。我只是在我的页面模板中做一些非常基本的 jsp:includes。

记录的错误如下所示:

java.lang.StackOverflowError
at java.util.HashMap.removeEntryForKey(HashMap.java:565)
at java.util.HashMap.remove(HashMap.java:555)
at org.mortbay.util.AttributesMap.removeAttribute(AttributesMap.java:51)
at org.mortbay.jetty.servlet.Dispatcher$ForwardAttributes.setAttribute(Dispatcher.java:441)
at org.mortbay.jetty.servlet.Dispatcher$ForwardAttributes.removeAttribute(Dispatcher.java:461)
at org.mortbay.jetty.servlet.Dispatcher$IncludeAttributes.setAttribute(Dispatcher.java:549)
at org.mortbay.jetty.servlet.Dispatcher$IncludeAttributes.removeAttribute(Dispatcher.java:569)
at org.mortbay.jetty.servlet.Dispatcher$IncludeAttributes.setAttribute(Dispatcher.java:549)
at org.mortbay.jetty.servlet.Dispatcher$IncludeAttributes.removeAttribute(Dispatcher.java:569)
at org.mortbay.jetty.servlet.Dispatcher$IncludeAttributes.setAttribute(Dispatcher.java:549)
at org.mortbay.jetty.servlet.Dispatcher$IncludeAttributes.removeAttribute(Dispatcher.java:569)

Get/setAttribute 调用会重复一段时间,然后...

at org.mortbay.jetty.servlet.Dispatcher.include(Dispatcher.java:145)
at com.google.apphosting.runtime.jetty.ResourceFileServlet.serveWelcomeFileAsForward(ResourceFileServlet.java:340)
at com.google.apphosting.runtime.jetty.ResourceFileServlet.maybeServeWelcomeFile(ResourceFileServlet.java:281)
at com.google.apphosting.runtime.jetty.ResourceFileServlet.doGet(ResourceFileServlet.java:142)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at org.mortbay.jetty.servlet.Dispatcher.include(Dispatcher.java:192)
at 

并且该块也重复。

问题 3588 的记者和我都相信这与 jsp:include 不知何故有关。我的应用程序的前一个版本工作并使用了 jsp:include,但这个新版本也使用了 jsp:param 和一些 EL 语法。这些可能与问题有关,也可能与问题无关。这一切都在开发中。该问题仅在部署到 GAE 后才会出现,此时所有页面请求都会导致 500 个服务器错误,并且日志会显示此 StackOverflowError。记录的堆栈跟踪都没有在任何地方提及我的任何代码。

堆栈跟踪还提到了 MaybeServeWelcomeFile 和 serveWelcomeFileAsForward。使用这个最新版本,我在 web.xml 中的欢迎文件定义没有任何变化。

谷歌搜索出现了上面链接的问题,但没有别的。我的下一步将尝试找出导致此问题的确切变化,但其他人可以提供的任何见解都会非常有帮助。

4

1 回答 1

2

这个错误是由jsp引起的:包含服务器上不存在的文件。请参阅问题 #5564。不知何故,当我部署到 Google App Engine 时,我的开发环境中存在的某些文件没有被上传(更新:另见问题 #5565)。

于 2011-08-11T17:25:45.423 回答