我目前正在研究部署在OracleAS服务器上的Java EE应用程序(Struts 1.1)(非常古老的技术......)
从页面上的会话重新加载数据存在问题。
简而言之,根据浏览器的不同,会话的行为也不尽相同。我一直在尝试在Eclipse + Tomcat上调试它,并且我看到的行为(假设也存在相同的错误,我猜测OracleAS上的行为是相同的):
在Firefox上我第一次打电话
session.setAttribute("myobject",myform);
我检查时指出的参考是:
com.project.ObjectForm@1a0e2d1 [.....]
在下一页上,当我加载相同的对象(从未再次使用setAttribute修改)时:
ObjectForm myform = session.getAttribute("myobject");
现在引用
com.project.ObjectForm@1a0e2d1 [.....]
值是相同的,子对象的引用也一样,一切正常。
在IE和Chrome上,当我使用setAttribute(...)和 com.project.ObjectForm@1ee2c5 时,引用会更改( com.project.ObjectForm@ad8e84 )我使用getAttribute(...)再次加载到下一页,测试的页面与具有相同用户数据的Firefox完全相同,等等...更糟糕的是,有些数据实际上已经丢失了! ObjectForm的字符串示例之一从 forward = success 转到 forward = ,因此该错误!
我的第一个问题是:这一切都正常吗?为什么哦为什么会话(服务器端)的行为会因浏览器的不同而有所不同,我不是会话专家,所以我假设我的知识缺乏?
第二个是:我的数据实际上是否可能与我自己的setAttribute和getAttribute相比有所改变(因为在firefox上引用看起来是相同的,如果我要更改对象,它会直接在我的会议?)?
我已经检查了传递的浏览器数据,jsessionid在两种情况下都很好,所以它似乎不是来自这里。