0

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

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

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

在 jsp 中......我正在获取列表并打印其大小,然后单击链接我调用另一个 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 :(
4

1 回答 1

1

你确定你得到了正确的会话吗?我的理解是你应该像这样获得它:

this.getThreadLocalRequest().getSession();

这就是我所做的以及推荐的Google AppEngine 会话示例

这里也有更多讨论

我应该何时以及如何使用 ThreadLocal 变量?

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

于 2012-07-27T22:31:08.943 回答