各位大神,小弟最近在学这个JSP+SERVLET。发现呢,这个session占用内存的问题。比方说,我有一个对象User,包括了属性ID,username,password,address,sex,age...等。我是将id放到session中,以后页面用到User的时候查询数据库好呢?还是直接将得到的User放到seesion,以后seesion.getAttribute()好呢?这样就不用查询数据库了

解决方案 »

  1.   

    既然用到了session为嘛不直接从session里面取呢,这能耗费多少资源
      

  2.   

    其实我想问,存放User的时候,session是存的什么东西?是User这个引用,还是User的所有属性
      

  3.   

    其实Session就类似一个Map类型,主键就是你的sessionId,键值就是你存放的数据(你可以将这个也理解成一个Map,嵌套在上一个Map里的)。Session的失效期可以在web.xml中设置。楼主说的两种方式,都是可以的。根据不同的环境,各有优缺点。如果将数据都放在Session中,则在一定程度上消耗了内存空间,可是效率较高,也方便使用。如果采用使用userId去从数据库中去取的话,可能节约了内存。但是每次从库中取也很消耗资源,而且操作也不方便。如果你的程序针对每次操作都要校验权限等的话,我建议你将User直接都放在Session里。毕竟Session过期后会自动清除相关空间。希望说的能帮上楼主。继续交流。
      

  4.   

    因为我的User中的属性有很多,如果有200个用户去访问的话,我担心会崩溃
      

  5.   

    如果出于性能考虑,尽量避免使用session,用request吧
      

  6.   

    怎么样单独销毁某一个session么?
      

  7.   

    放在session中的信息必须是在多个页面经常用到的,应该是出于这样的出发点来考虑的,刚才你问的 是放一个对象的 其实放对象比放某个属性要好 这样就利用了封装的特点 不然的话又何必专门把User拿来弄一个类呢  你要明白session是服务器端的 而request是客户端的 但是request的范围只存在于两个之间传递才行 在多个页面无法取到 除非连续传递