我在 JSP
文件中使用以下代码,该文件由 AppEngine
Serlvet 提供。
<script type="text/javascript" >
var role = <%= request.getAttribute("role") %>;
</script>
该变量是通过 Servlet
设置的,使用:
req.setAttribute("role", role );
req.getRequestDispatcher("index.jsp").forward(req, resp);
代码在 AppEngine 生产中运行良好,但在本地开发服务器中我立即得到以下信息:
Problem accessing /. Reason:
INTERNAL_SERVER_ERROR
Caused by:
java.lang.StackOverflowError
at org.mortbay.jetty.servlet.Dispatcher$ForwardAttributes.setAttribute(Dispatcher.java:438)
at org.mortbay.jetty.servlet.Dispatcher$ForwardAttributes.setAttribute(Dispatcher.java:438)
at org.mortbay.jetty.servlet.Dispatcher$ForwardAttributes.setAttribute(Dispatcher.java:438)
at org.mortbay.jetty.servlet.Dispatcher$ForwardAttributes.setAttribute(Dispatcher.java:438)
at org.mortbay.jetty.servlet.Dispatcher$ForwardAttributes.setAttribute(Dispatcher.java:438)
at org.mortbay.jetty.servlet.Dispatcher$ForwardAttributes.setAttribute(Dispatcher.java:438)
at org.mortbay.jetty.servlet.Dispatcher$ForwardAttributes.setAttribute(Dispatcher.java:438)
这种情况会永远持续下去。在调试时,我还可以看到Servlet代码被无限次调用。
我发现了一些与 AppEngine 生产类似的问题的引用资料,但没有找到针对 AppEngine 开发服务器的可行修复程序。
有什么想法吗?
最佳答案
当使用 Google App Engine 从 servlet 转发到 JSP 时,我遇到了类似的问题,甚至没有显式设置任何变量,我所拥有的只是这行:
req.getRequestDispatcher("game.jsp").forward(req, resp);
就我而言,结果是因为在 web.xml 中我有以下行(注意包罗万象的 url 模式:
<servlet-mapping>
<servlet-name>GameServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
我认为这也捕获了 JSP 路径并因此循环。当我改变它时,它也不是包罗万象的。如:
<servlet-mapping>
<servlet-name>GameServlet</servlet-name>
<url-pattern>/game</url-pattern>
</servlet-mapping>
关于google-app-engine - AppEngine 开发服务器在 JSP 中给出 StackOverflowError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11495170/