为什么jsp:include(有时)导致Google App Engine上出现StackOverflowErrors?

时间:2011-08-11 13:10:21

标签: java google-app-engine jsp jspinclude

我遇到了StackOverflowErrors所有对GAE上最新版应用程序的请求。我追踪了Issue #3588,但由于记者将其归咎于第三方图书馆并且谷歌工程师不想进一步查看,因此关闭了。就我而言,没有第三方库可以归咎于此。我只是在做一些非常基本的jsp:包含在我的页面模板中。

记录的错误如下所示:

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有关:包括某种方式。我的应用程序的先前版本工作并使用jsp:include,但是这个较新的版本也使用jsp:param和一些EL语法。那些可能与问题有关,或者他们可能没有。这一切都在开发中。该问题仅在部署到GAE后出现,此时所有页面请求都会导致500个服务器错误,并且日志显示此StackOverflowError。记录的堆栈跟踪都没有提到我的任何代码。

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

谷歌搜索出现了上面链接的问题,但没有别的。我接下来的步骤将是尝试隔离导致此问题的确切更改,但是其他人可以提供的任何洞察都会非常有用。

1 个答案:

答案 0 :(得分:2)

此错误是由jsp引起的:包括服务器上不存在的文件。见issue #5564。在部署到Google App Engine时,我的开发环境中存在的某些文件无法上传(更新:另请参阅issue #5565)。