关于HTTPSession的问题

本文介绍了在使用Tomcat服务器时遇到的持久化问题,包括客户端访问导致的大量HttpSession对象消耗内存,以及如何通过持久化技术解决服务器内存利用率低的问题。文中详细解释了Session持久化的原理、作用以及Tomcat中两种主要的持久化方式:StandardManager和PersistentManager。同时,提供了具体的操作步骤,即在Tomcat服务关闭后,删除工作目录下的session.ser文件以解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目今天报了如下的一个错误:

[html]  view plain copy print ?
  1. 严重: IOException while loading persisted sessions: java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: com.xxt.user.bean.FunctionBean    
  2. java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: com.xxt.user.bean.FunctionBean    

项目关闭后重启有时会报这个错:

解决办法:

 

[html]  view plain copy print ?
  1. public class FunctionBean implements Serializable//实现Seriablizable接口    

tomcat6 中关闭服务会自动把session持久化 存储在work目录下的 一个session.ser ,删除即可。


为什么需要持久化


       客户端访问了某个能开启会话功能的资源, web服务器就会创建一个与该客户端对应的HttpSession对象,每个HttpSession对象都要站用一定的内存空间。如果在某一时间段内访问站点的用户很多,web服务器内存中就会积累大量的HttpSession对象,消耗大量的服务器内存,即使用户已经离开或者关闭了浏览器,web服务器仍要保留与之对应的HttpSession对象,在他们超时之前,一直占用web服务器内存资源。

      web服务器通常将那些暂时不活动但未超时的HttpSession对象转移到文件系统或数据库中保存,服务器要使用他们时再将他们从文件系统或数据库中装载入内存,这种技术称为Session的持久化。

       将HttpSession对象保存到文件系统或数据库中,需要采用序列化的方式将HttpSession对象中的每个属性对象保存到文件系统或数据库中;将HttpSession对象从文件系统或数据库中装载如内存时,需要采用反序列化的方式,恢复HttpSession对象中的每个属性对象。所以存储在HttpSession对象中的每个属性对象必须实现Serializable接口


Session的持久化的作用

  

  1.提高服务器内存的利用率,保证那些暂停活动的客户端在会话超时之前继续原来的会话

  2.在多台web服务器协同对外提供服务的集群系统中,使用Session的持久化技术,某台服务器可以将其中发生改变的Session对象复制给其他服务器。保证了在某台服务器停止工作后可以由其他服务器来接替它与客户端的会话

  3.在一个web应用程序重启时,服务器也会持久化该应用程序中所有HttpSession对象,保证客户端的会话活动仍可以继续。

 Tomcat使用Session Manager 类来管理Session的持久化,他提供了两个SessionManager类

[html]  view plain copy print ?
  1. org.apache.catalina.session.StandardManager  
  2. org.apache.catalina.session.PersistentManager  

StandardManager是tomcat默认使用的,在web应用程序关闭时,对内存中的所有HttpSession对象进行持久化,把他们保存到文件系统中。默认的存储文件为:

<tomcat 安装目录>/work/Catalina/<主机名>/<应用程序名>/sessions.ser

PersistentManager比StandardManager更为灵活,只要某个设备提供了实现org.apache.catalina.Store接口的驱动类,PersistentManager就可以将HttpSession对象保存到该设备

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值