Session钝化机制
HttpSession中的对象状态:
绑定:session.setAttribute
解除绑定:session.removeAttribute
钝化:将session对象持久化到存储设备上
活化:将session对象从存储设备上恢复
当多个用户同时在线时session内存的开销很大,为了提高服务器性能使用Session钝化机制。


web应用程序被重新加载情况:web.xml修改,Spring.xml修改,Tomcat reload等。

HttpSession绑定接口HttpSessionBindingListener和钝化活化接口HttpSessionListener
创建JavaBean实现接口,而不是创建监听器。因为监听的是一个对象的状态,而不是监听器状态。
当将JavaBean对象存入session中就会触发绑定方法。当保存对象的session对象被remove时,触发解除绑定方法。

钝化活化必需要实现Serializable序列化接口,才能使得session对象钝化活化生效。
在context.xml中配置SessionManageer管理器
一个javaBean实现HttpSessionBindingListener可以监听绑定和解绑;
实现HttpSessionActivationListener和Serializable接口可以监听钝化和活化
Persistentmanager
tomcat中两种session钝化管理器和机制:StandardManager
钝化活化的含义:钝化:将session从内存中持久到服务器文件或者数据库系统中(服务器完成),活化:需要时反序列化回内存
3.监听绑定到HttpSession域对象中的对象的(绑定、解绑;钝化、活化)事件的监听器
绑定到HttpSession域中的对象状态的事件监听器
绑定到HttpSession域中的对象有多种状态如下:
绑定(相当于保存,通过session.setAttribute()把对象保存到域对象session中)——>解除绑定 (相当于session.removeAttribute()) 钝化(将session对象持久化到存储设备上)——>活化(从存储设备上进行恢复)
Session钝化机制:session正常情况下,存储在服务器内存当中,服务器会对每一个在线用户创建一个session对象,当在线用户很多时,session内存的开销将是巨大的,会直接影响Web服务器的性能,Session的钝化机制就解决了这个问题。
Session钝化机制本质:把服务器不经常使用的session对象暂时序列化到系统文件或者数据库内存当中,当使用的时候,反序列化到服务器内存当中,整个过程由服务器自动完成。
Tomcat中有两种Session钝化管理器(Session钝化机制由SessionManager管理)
第一种钝化管理器:StandardManger,有两种情况,第一种情况,当Tomcat服务器被关闭或重启时,Tomcat服务器会将当前内存中的Session对象钝化到服务器文件系统中,第二种情况是Web应用程序被重新加载时(重新覆盖web.xml,或者从新覆盖Spring.xml,或者在Tomcat服务器里点击重新加载按钮时),内存中的Session对象也会被钝化到服务器的文件系统中,钝化后的文件会保存到Tomcat目录下的work/Catalina/hostname/applicationname/SESSION.ser,当Tmocat服务器重新启动时,这个文件就会被加载,然后就会被删掉,也是默认的StandardManger。

第二种钝化管理器:Persistentmanager,它在Tomcat下的conf下的context.xml中进行配置,首先在钝化的基础上进行了扩张。前两种如上,第三种情况,可以配置主流内存的Session对象数目,将不长使用的Session对象保存到文件系统或数据库,当用时再重新加载,默认情况下,Tomcat提供了两个钝化驱动类,一个是FileStore另一个是JDBCStore。


Servlet规范提供了两个接口(这两个监听器不需要在web.xml中进行注册)
HttpSessionBindingListener接口:提供了绑定方法valueBound()
和解除绑定方法valueUnbound()。
HttpSessionActivationListener:提供了钝化方法sessionWillPassivate()和活化方法sessionDidActivate()。
创建的这个类不是监听器,而是一个普通javaBean,因为这个状态指的是session当中的对象,是对象的状态,而不是监听器的状态,当前端页面把这个对象存入session中,就会触发相应(添加和移除)事件。
HttpSessionActivationListener接口:如果想实现钝化和活化,一定要实现序列化接口Serializable
session钝化与活化
监听器的分类-按监听事件划分: 1、监听器绑定到HttpSession域中的某个对象的状态事件监听器; 2、HttpSession中的对象状态: (1)绑定:通过setAttribute(); (2)解除绑定:removeAttribute(); (3)钝化:将session对象序列化到存储设备上 (4)活化:将session对象从存储设备上进行恢复 3、session钝化机制: (1)把服务器中不常使用的session对象暂时的序列化到系统文件或是数据库中,当使用时反序列化到内存中,整个过程有服务器自动完成。 (2)session的钝化机制由SessionManager管理 4、实现绑定和解除绑定,创建一个【普通的javabean】绑定和解除绑定需实现【HttpSessionBindingListener】接口; 实现钝化和活化,需实现HttpSessionActivationListener接口和Serializable接口
HttpSession:




钝化活化的session保存对象必须实现serializable接口.
bindinglistener无需在web.xml中注册,直接继承接口之后,在javaBean被绑定到session中就会被触发
将不常使用的session序列化到文件或是数据库中以减轻内存开销
StandardManager和PersistentManager
1.当Tomcat服务器被关闭或重启时,tomcat服务器会将当前内存中的Session对象钝化到服务器文件系统中
2.当Web应用程序被重新加载时,内存中的Session对象也会被钝化到服务器的文件系统中。
3-1.钝化后的文件被保存:Tomcat安装路径/work/Catalina/hostname/applicationname/SESSIONS.ser
3-2.可配置主流内存的Session对象数目,将不常使用的Session对象保存到文件系统或数据库,当用时再重新加载。默认情况下,两个钝化驱动类:FileStore和JDBCStore。
活化:从硬盘上读取到内存中
纯化:从内存中写到硬盘上
Tomcat中两种Session钝化管理器1
按监听的事件划分03
Session钝化机制
得分很高的发挥
@Listener---两个Session钝化管理器
StandardManager和PersistentManager
1.当Tomcat服务器被关闭或重启时,tomcat服务器会将当前内存中的Session对象钝化到服务器文件系统中
2.当Web应用程序被重新加载时,内存中的Session对象也会被钝化到服务器的文件系统中。
3-1.钝化后的文件被保存:Tomcat安装路径/work/Catalina/hostname/applicationname/SESSIONS.ser
3-2.可配置主流内存的Session对象数目,将不常使用的Session对象保存到文件系统或数据库,当用时再重新加载。默认情况下,两个钝化驱动类:FileStore和JDBCStore。
@Listener---Session钝化机制
把服务器中不常使用的session对象暂时的序列化到系统文件或是数据库中,当使用时反序列化到内存中,整个过程有服务器自动完成。