【发布时间】:2014-04-01 07:49:37
【问题描述】:
我有下面的JSP来测试问题
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<jsp:useBean id="testBean" class="java.util.ArrayList" scope="session"/>
<%
testBean.add(System.currentTimeMillis());
for(Object o : testBean){
%>
<%=o.toString()%><br>
<%}%>
如果工作正常,它应该打印最后一页重新加载毫秒的列表。它确实可以在开发服务器上工作,但不能在真正的 GAE 部署上工作。即:
1396278093202
1396336675208
1396337414384 // <- Changes on each page refresh!?!?
在 GAE 上,在 1-3 次重新加载后会失去状态,并且列表停止增长,因此只有最后一个元素在重新加载时更改其值。 bean 有时也会在应用程序更新后幸存下来,所以我猜这可能是内存缓存问题。
仅scope="session" 会出现此问题。 scope="application"没有问题。
这是一种已知行为吗?是否有任何解决方法或想法?
我使用的是 gae 1.9.1,会话已启用。
更新:
会话属性处理似乎完全崩溃了:
<%
java.util.ArrayList testBean2= (ArrayList) session.getAttribute("testBean2");
if(testBean2==null){
testBean2= new java.util.ArrayList();
session.setAttribute("testBean2",testBean2);
}
testBean2.add(System.currentTimeMillis());
%>
该属性在第二次刷新后失去其状态.. 因此,从会话中检索列表时,列表的大小始终为 1。
更新 2
我自己找到了解决方法。看我的回答。
【问题讨论】:
标签: java jsp google-app-engine session