AppEngine Development Server gives StackOverflowEr

2019-07-15 05:59发布

I'm using the following code in a JSP file which I serve from an AppEngine serlvet.

<script type="text/javascript" >
    var role = <%= request.getAttribute("role") %>;
</script>

The variable is set from a Servlet using:

req.setAttribute("role", role );
req.getRequestDispatcher("index.jsp").forward(req, resp);

The code runs fine on AppEngine production but in the local development server I get the following straight away:

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)

this goes on like forever. While debugging, I can also see that the Servlet code is called endless times.

I found a few references to a similar problem with AppEngine production but found no workable fix for AppEngine development server.

Any idea ??

2条回答
对你真心纯属浪费
2楼-- · 2019-07-15 06:31

I ran into a similar issue when forwarding to a JSP from a servlet using Google App Engine without even explicitly setting any variables, all I had was the line:

req.getRequestDispatcher("game.jsp").forward(req, resp);

In my case it turned out to because in web.xml I had the following line (note the catch-all url-pattern:

<servlet-mapping>
    <servlet-name>GameServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

I think this was also catching the JSP path and therefore looping. When I change it too not be a catch-all it works. As in:

<servlet-mapping>
    <servlet-name>GameServlet</servlet-name>
    <url-pattern>/game</url-pattern>
</servlet-mapping>
查看更多
倾城 Initia
3楼-- · 2019-07-15 06:36

Are you sure you are setting the attribute in the response?

req.setAttribute("role", role );

It seems like you are setting it in the request that has come in to the servlet and not to the response you are sending out.

查看更多
登录 后发表回答