VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2957|回复: 18

求教一个关于session的问题,各位大虾帮帮忙了!

[复制链接]

1

主题

5

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-3-21 10:30:01 | 显示全部楼层 |阅读模式
是这样的,我参与了一个大型的web项目,前台是用的struts开发的,在编写应用的时候,因为有些前台应用需要大量的业务数据(是公共数据,很多前台展示都需要,大概十几个表中的数据,每个表大概有100行),为了防止反复读取数据库,在每次用户登录的时候(初始化session的时候)我把数据放入十几个Arraylist中(基本上一个表对应一个ArrayList),在把ArrayList通过session.setAttribute放入session中,这样页面使用的时候就可以直接从session中读取数据就可以了。
但是,在后来测试的时候发现,在有些时候显示某个ArrayList中数据的时候会出现乱码,或者其它的本不该出现的数据,
比如:本来ArrayList中应该保存:“性别 ,男 ,女”
      结果显示的结果是:“学生分布情况,东城分校,………………”这本来是其它的几个ArrayList中内容,怎么穿到这个Arraylist中了?莫非是内存或者页面的问题?

这个现象是很随机搞不清为什么,请教各位达人指点一下。多谢了。

怀疑可能的问题:

问题发生的可能原因
(1)服务器版本问题
(2)可能发生了内存的重叠:因为多个用户初始化session的时候,都是复制锁定的代码表中的数据到自己的session中,结合linux的内存管理机制,可能发生的页面重叠的情况。
(3)此外,JAVA的数据存储机制大都是以堆的方式,可能造成了内存数据的重叠

有人遇到过类似的情况吗?给说说吧!
回复

使用道具 举报

0

主题

12

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-6-27 15:00:01 | 显示全部楼层
如果数据量大不要放session里了,那样很占内存的
回复

使用道具 举报

1

主题

5

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
 楼主| 发表于 2020-7-1 09:30:01 | 显示全部楼层
我知道是这样的,但是迫不得已,没办法了,是不是在session中存有大量数据就会有这种情况呢?
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-7-4 12:15:01 | 显示全部楼层
贴点代码来看看。
回复

使用道具 举报

0

主题

6

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-7-4 18:15:02 | 显示全部楼层
哦 第一次见这么玩的   很费内存吧
回复

使用道具 举报

0

主题

9

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
发表于 2020-7-12 13:15:01 | 显示全部楼层
第一 请问你是用什么实现数据持久化
第二 请问你如何处理session的问题
回复

使用道具 举报

1

主题

5

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
 楼主| 发表于 2020-7-13 13:30:01 | 显示全部楼层
initsession  
初始化session  
import  javax.servlet.http.HttpSession;  

public  class  InitSession  {  
   public  InitSession()  {  
   }  

   /**  
     *  初始化session中应保存的变量,包括code和logger.  
     *  @param  session  HttpSession  
     *  @throws  Exception  
     */  
   public  static  void  init(HttpSession  session)  throws  Exception  {  
       initCode(session);  
//        initLogger(session);  
   }  

   /**  
     *  初始化code.  
     *  @param  session  HttpSession  
     *  @throws  Exception  
     */  
   private  static  void  initCode(HttpSession  session)  throws  Exception  {  
       if(session.getAttribute(  "_CodeManager  ")!=null)return;  
//        CommonLogger.getInstance().getLogger().info(  "开始初始化code  ");  

       CodeManager  codeManager  =  CodeManager.getInstance();  
       codeManager.initCode();  
       session.setAttribute(  "_CodeManager  ",  codeManager);  
       session.setAttribute(  "_auditState  ",  codeManager.queryAuditState());  
       session.setAttribute(  "_census  ",  codeManager.queryCensus());  
       session.setAttribute(  "_educationalLevel  ",  codeManager.queryEducationalLevel());  
       session.setAttribute(  "_education  ",  codeManager.queryEducation());    //教委专业代码  
       session.setAttribute(  "_studentType  ",  codeManager.queryStudentType());  
       session.setAttribute(  "_subschool  ",  codeManager.querySubschool());  
       session.setAttribute(  "_station  ",codeManager.queryStation());  
       session.setAttribute(  "_testSubject  ",  codeManager.queryTestSubject());  
       session.setAttribute(  "_year  ",  codeManager.queryYear());  
//        System.out  .println(  "dddd  "+codeManager.queryYear().size()  )  ;  
       session.setAttribute(  "_manageType  ",codeManager.queryManageType());  
       session.setAttribute(  "_stuType  ",codeManager.queryStuType());  
       session.setAttribute(  "_classGrade  ",codeManager.queryClassgrade());  
       session.setAttribute(  "_distributed  ",codeManager.queryDistributed());  
       session.setAttribute(  "_examSort  ",codeManager.queryExamSort());//考试类别
       session.setAttribute(  "_examSchoolType  ",codeManager.queryExamSchoolType());//考试单位类型  
       session.setAttribute(  "_examItem  ",codeManager.queryExamItem());//考试项目  
       session.setAttribute(  "_employState  ",codeManager.QueryEmployState()  )  ;//聘任状态  
       session.setAttribute(  "_statusState  ",codeManager.queryStatusState()  )  ;  
       session.setAttribute(  "_RewardPunishmentCode  ",codeManager.queryRewardPunishmentCode()  )  ;  
       session.setAttribute(  "_RewardLevelCode  ",codeManager.queryRewardLevelCode()  )  ;  
       session.setAttribute(  "_UndoSignalCode  ",codeManager.queryUndoSignalCode()    )  ;  
       session.setAttribute(  "_RewardPunishmentReason  ",codeManager.queryRewardPunishmentReason()  )  ;  
       session.setAttribute(  "_englishDegree  ",codeManager.queryEnglishDegree());//英语审批代码  

       session.setAttribute(  "_socialCourse  ",codeManager.querySocialCourse());//社会课程代码(学位)  

       session.setAttribute(  "_punishiment  ",codeManager.queryPunishment());//学位惩罚审批代码  
       session.setAttribute(  "_score  ",codeManager.queryScore());//成绩代码  
       session.setAttribute(  "_teachDep  ",codeManager.queryTeachDep());//教学部门  
       session.setAttribute(  "_institution  ",codeManager.queryInstitution());//机构  
       session.setAttribute(  "_firstFocus  ",codeManager.queryFirstFocus());//首再次  
       session.setAttribute(  "_examTypeAlias  ",codeManager.queryExamTypeAlias());//考核方式别名  
       session.setAttribute(  "_startMark  ",codeManager.queryStartMark());//启用标志(课程、教学点专业)  
       session.setAttribute(  "_approveMark  ",codeManager.queryApproveMark());//课程审批标志  
       session.setAttribute(  "_cancelMark  ",codeManager.queryCancelMark());//课程停开标志  
       session.setAttribute(  "_mediaType  ",  codeManager.queryMediaType());  //媒体类型  
       session.setAttribute(  "_haveMark  ",  codeManager.queryHaveMark());  //有无代码表  
       session.setAttribute(  "_generalCourse  ",  codeManager.queryGeneralCourse());  //课程总表  
       session.setAttribute(  "_generalCourse_IdName  ",  codeManager.queryGeneralCourse_IdName());  //课程总表  
       session.setAttribute(  "_transCode  ",  codeManager.queryTransCode());  //传输代码  
         session.setAttribute(  "_transCodeUp  ",  codeManager.queryTransCodeUp());  //上传传输代码  
           session.setAttribute(  "_transCodeReceive  ",  codeManager.queryTransCodeReceive());  //接收传输代码  
       session.setAttribute(  "_openSpeciality  ",  codeManager.queryOpenSpeciality());  //开设专业  
       session.setAttribute(  "_credentialType  ",  codeManager.queryCredentialType());  //证件类型  
       session.setAttribute(  "_socialSubjcetSort  ",codeManager.querySocialSubjcetSort());//社会科目类别  
       session.setAttribute(  "_examStateCode  ",codeManager.queryExamStateCode());//审核状态代码表  
       session.setAttribute(  "_netExamCourse  ",codeManager.queryNetExamCourse());//网考科目  
       CommonLogger.getInstance().getLogger().debug(  "初始化code完成  ");  
   }
}
回复

使用道具 举报

1

主题

14

帖子

12.00

积分

新手上路

Rank: 1

积分
12.00
发表于 2020-7-16 12:45:02 | 显示全部楼层
倒,说了半天是乱码问题,我以为是什么呢,全部改成UTF-8格式就好了撒,
回复

使用道具 举报

1

主题

5

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
 楼主| 发表于 2020-7-17 08:15:01 | 显示全部楼层
大哥,看清楚了,不是乱码问题,对应的 session.setAttribute取出来的项不是乱码,而是不正确的数据,例如:本来 session.getAttribute(“sex”)中应该取到“男”“女”,但是现在取到的是别的项的内容例如:“北京”“石家庄”“济南”…………。而且这个现象是不可再现的,他会随时地、随地的、在不同的机子上,欧然的冒出来,所以才弄不清怎么回事,现在主要是怀疑是内存的问题,怀疑session发生了重叠。不知道有人遇到过这种情况没有。
回复

使用道具 举报

0

主题

7

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-7-17 12:00:01 | 显示全部楼层
尽量别这么写,如果不跨页面可以直接再封装一次到VECTOR里,然后提交到下以页,或者声称个临时文件再读取,或者在数据库声称临时表,你这样搞肯定会出问题,而且不规律的问题,根源你就找微软好了,毕竟不了解SESSION核心机智
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表