是这样的,我参与了一个大型的web项目,前台是用的struts开发的,在编写应用的时候,因为有些前台应用需要大量的业务数据(是公共数据,很多前台展示都需要,大概十几个表中的数据,每个表大概有100行),为了防止反复读取数据库,在每次用户登录的时候(初始化session的时候)我把数据放入十几个Arraylist中(基本上一个表对应一个ArrayList),在把ArrayList通过session.setAttribute放入session中,这样页面使用的时候就可以直接从session中读取数据就可以了。
但是,在后来测试的时候发现,在有些时候显示某个ArrayList中数据的时候会出现乱码,或者其它的本不该出现的数据,
比如:本来ArrayList中应该保存:“性别 ,男 ,女”
结果显示的结果是:“学生分布情况,东城分校,………………”这本来是其它的几个ArrayList中内容,怎么穿到这个Arraylist中了?莫非是内存或者页面的问题?
这个现象是很随机搞不清为什么,请教各位达人指点一下。多谢了。
怀疑可能的问题:
问题发生的可能原因
(1)服务器版本问题:在tomcat5.0上,发生session存取错误的几率比在tomcat4.1上大很多
(2)可能发生了内存的重叠:因为多个用户初始化session的时候,都是复制锁定的代码表中的数据到自己的session中,结合linux的内存管理机制,可能发生的页面重叠的情况。
(3)此外,JAVA的数据存储机制大都是以堆的方式,可能造成了内存数据的重叠
(4)具体说明参考网页:
http://www.jdon.com/jive/article.jsp?forum=16&thread=18806
http://www.yuanma.org/data/2006/1128/article_1872.htm
http://e-docs.bea.com/wls/docs70/webapp/sessions.html#100770
(5)TOMCAT5注重了软件工程,代码写的很工整,效率没有提高很多。session的存储结构是一个类似HASHMAP的结构。HASH结构对于KEY的排序是乱的,主要根据HASH码和容量决定次序的。
有人遇到过类似的情况吗?给说说吧!
------解决方案--------------------
看看你的代码是怎么样动作的。
------解决方案--------------------
请问session=request.getSession(true)和session=request.getSession(false)
有什么区别?