2

我在从serlvetJSP提供的文件中使用以下代码。AppEngine

<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 开发服务器的可行修复。

任何想法 ??

4

2 回答 2

4

我在使用 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>
于 2015-09-09T01:06:07.640 回答
0

您确定要在响应中设置属性吗?

req.setAttribute("role", role );

似乎您是在进入 servlet 的请求中设置它,而不是在您发送的响应中设置它。

于 2012-07-15T20:59:08.377 回答