2011-08-11 64 views
4

我遇到StackOverflowErrors,它提供了GAE上最新版本應用程序的所有請求。我跟蹤了Issue #3588,但因爲記者把它歸咎於第三方庫而關閉,谷歌工程師不想再看。在我的情況下,沒有第三方庫可以負責。我只是在我的頁面模板中做一些非常基本的jsp:include。爲什麼jsp:include(有時)會導致Google App Engine上的StackOverflowErrors?

記錄的錯誤開始是這樣的:

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) 

獲取/的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中的welcome-file定義沒有改變。

谷歌搜索引發了上述問題,但沒有別的。我的下一步將嘗試隔離造成這種情況的確切變化,但其他人可以提供的任何洞察力都將非常有幫助。

+0

對於我來說,當爲一個JSP使用req.getAttribute()/ setAttribute()時,也會發生這種情況......請參閱http://stackoverflow.com/questions/11495170/appengine-development-server-gives-stackoverflowerror-in- jsp/11495569#11495569 –

回答

2

此錯誤是由jsp引起的:包括服務器上不存在的文件。請參閱issue #5564。不知何故,當我部署到Google App Engine時,我的開發環境中存在的某些文件不會上傳(更新:另請參閱issue #5565)。

+0

這是一箇舊的解決方案,但它幫助了我。謝謝Isaac分享您的解決方案。 – Neil

相關問題