Hallo
I've got a basic site that just display objects within a table inside
the datastore. The site works when I use the demo server packaged with
the eclipse plugin, but not when I deploy the site live at the google
app engine.
As soon as I return the data from the servlet to my jsp I get the
following traceback:
Uncaught exception from servlet
java.lang.StackOverflowError
at java.util.HashMap.removeEntryForKey(Unknown Source)
at java.util.HashMap.remove(Unknown Source)
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
$ForwardAttributes.setAttribute(Dispatcher.java:441)
at org.mortbay.jetty.servlet.Dispatcher
$ForwardAttributes.removeAttribute(Dispatcher.java:461)
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
$ForwardAttributes.setAttribute(Dispatcher.java:441)
and it just loop the above till the page is full.
my JSP file:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ page import="com.google.appengine.api.users.User" %>
<%@ page import="net.qsens.healthwindow.webmonitor.object.Log" %>
<%@ page import="java.util.List" %>
<%
User user = (User) request.getAttribute("user");
String authURL = (String) request.getAttribute("authURL");
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://
www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=ISO-8859-1">
<title>QSENS Web Monitor</title>
</head>
<body>
<div align="right">
Hi there, <%= user.getNickname() %> | <a href="<%= authURL %>">Log
out</a>
</div>
<form action="" method="POST" enctype="multipart/form-data">
Report Type: <select name="share">
<option value="private">SDE</option>
<option value="public">SWE</option>
</select><br/>
Last 10 Logs:<br>
<table border="1">
<tr>
<td>Date</td>
<td>System</td>
<td>Message</td>
</tr>
<%
List<Log> logs =
(List<Log>) request.getAttribute("logs");
if (logs.size() > 0) {
for (int i = 0; i < logs.size(); i++) {
Log log = logs.get(i);
%>
<tr>
<td><%=log.getDate()%></td>
<td><%=log.getSystem()%></td>
<td><%=log.getMessage()%></td>
</tr>
<%
}
}
%>
</table>
</form>
<hr>
<a href="/">Back</a>
</body>
</html>
My servlet:
package net.qsens.healthwindow.webmonitor.servlet;
import java.io.IOException;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.List;
import javax.jdo.PersistenceManager;
import javax.jdo.Query;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.qsens.healthwindow.webmonitor.datastore.PMF;
import net.qsens.healthwindow.webmonitor.object.Log;
import com.google.appengine.api.blobstore.BlobKey;
import com.google.appengine.api.users.User;
import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;
@SuppressWarnings("serial")
public class ReportServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws
IOException, ServletException {
UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();
String authURL = (user != null) ?
userService.createLogoutURL("/")
: userService.createLoginURL("/");
PersistenceManager pm = PMF.get().getPersistenceManager();
Query query = pm.newQuery(Log.class);
query.declareImports("import
com.google.appengine.api.users.User");
query.declareParameters("User userParam");
List<Log> results = (List<Log>) query.execute(user);
String[] errors = req.getParameterValues("error");
if (errors == null) errors = new String[0];
req.setAttribute("errors", errors);
req.setAttribute("logs", results);
req.setAttribute("authURL", authURL);
req.setAttribute("user", user);
RequestDispatcher dispatcher =
req.getRequestDispatcher("WEB-INF/pages/Report.jsp");
dispatcher.forward(req, resp);
}
}
I already stepped through the code and it finds the data in the
servlet corretly.
Please can someone help me?
Regards
Matthew Kelly
--
You received this message because you are subscribed to the Google Groups
"Google App Engine for Java" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/google-appengine-java?hl=en.