我遇到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定義沒有改變。
谷歌搜索引發了上述問題,但沒有別的。我的下一步將嘗試隔離造成這種情況的確切變化,但其他人可以提供的任何洞察力都將非常有幫助。
對於我來說,當爲一個JSP使用req.getAttribute()/ setAttribute()時,也會發生這種情況......請參閱http://stackoverflow.com/questions/11495170/appengine-development-server-gives-stackoverflowerror-in- jsp/11495569#11495569 –