【问题标题】:AppEngine Development Server gives StackOverflowError in JSPAppEngine 开发服务器在 JSP 中给出 StackOverflowError
【发布时间】:2012-07-14 18:16:15
【问题描述】:

我在 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 eclipse-plugin gae-eclipse-plugin


    【解决方案1】:

    我在使用 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>
    

    【讨论】:

      【解决方案2】:

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

      req.setAttribute("role", role );
      

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

      【讨论】:

      • 我已经为我使用 requestdispatcher 在 JSP 中设置属性的方式添加了一行。据我所知,这是正确的。它确实适用于 AppEngine 生产
      • @SaadFarooq 是的,你的权利。你的代码很好。我会仔细检查您的 appengine-web.xml 我所看到的是,有时包含或排除定义解决了不同的部署和本地问题,并且可能由于找不到类似于stackoverflow.com/questions/7026447/… 的资源而导致 stackoverflow 错误,然后再次 .jsps不应用作静态文件。如果你使用 req.setAttribute("role", role ); 会发生什么?出来了,页面是否得到服务?
      • 是的..如果我把它拿出来,页面就会被送达
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-09
      相关资源
      最近更新 更多