在Google App Engine上维护会话中的列表对象

时间:2012-07-27 19:06:21

标签: java google-app-engine

我在GAE中遇到了一个独特的问题。请注意我在下面描述的问题仅在我将代码部署到GAE但在本地工作正常时...请帮助人....

我有一个servlet代码,它在session属性中设置一个List对象,并将请求转发给JSP,如下所示:

        HttpSession session=request.getSession();
        session.setAttribute("msgListS", msgList);
        request.getRequestDispatcher("/WEB-INF/jsp/downloadpdf.jsp").forward(request, response);

在jsp ....我正在获取List并打印它的大小,然后点击链接我调用另一个servlet。 JSP代码如下:

        List<Message> msgList=(List<Message>)session.getAttribute("msgListS");
        out.println("The total messages are : "+msgList.size());
        session.setAttribute("msgListS", msgList);  

现在在最后一个servlet中我再次获取List对象,但是这里的大小与列表的实际大小不同。在jsp中它显示正确,但在这个servlet中显示大小为1.请帮助.... servlet代码:

       HttpSession session=request.getSession(false);
       List<Message> msgList=(List<Message>)session.getAttribute("msgListS");
       out.println("The total messages are : "+msgList.size());


    On local machine it is working absolutely fine but GAE has above problem :(

1 个答案:

答案 0 :(得分:1)

您确定正确接收会话吗?我的理解是你应该这样得到它:

this.getThreadLocalRequest().getSession();

这就是我所做的和推荐的Google AppEngine Session Example

此处还有更多讨论

When and how should I use a ThreadLocal variable?

显示潜在的缺点(内存泄漏)......不确定它是否适用虽然我只是为了参考而提及它。