TOMCAT SESSION的持久化方法

Tomcat5.5.12 实现Session持久化的配置:

为什么要持久化SESSION:
 在客户端每个用户的Session对象存在Servlet 容器中,如果Tomcat服务器重起/当机的话该session就会丢失,而客户端的操作应为session的丢失而造成数据丢失,而且当前用户访问量巨大,每个用户的Session里存放大量的数据的话,那么就很占用服务器大量的内存,从而是服务器的性能受到影响。

 

TOMCAT持久化办法:
 Tomcat里,系统提供Session的持久化策略。其中对session的存储提供两种办法,一个是本地文件存储,一个是数据库存储

 


进入tomcat的配置文档目录/conf,可以看到context.xml文件,我们将在这里配置Session持久化,配置后将对所有的站点生效。
打开context.xml,在<Context>节点下添加如下<Manager>节点:
<Manager className="org.apache.catalina.session.PersistentManager" >
    debug=0
    saveOnRestart="true"
    maxActiveSession="-1"
    minIdleSwap="-1"
    maxIdleSwap="-1"
    maxIdleBackup="-1"
    <Store className="org.apache.catalina.session.FileStore" directory="../session" />//这里代表的是文件持久化.也可               //以自己实现Store
</Manager>

JDBCStore配置:

<Store calssName="org.apache.catalina.JDBCStore" driverName="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost/tomsessionDB?user=root&password="
sessionTable="tomcat_session" sessionIdCol="session_id" sessionDataCol="session_data"
sessionValidCol="session_valid" sessionMaxInactiveCol="max_inactive"
sessionLastAccessedCol="last_access" sessionAppCol="app_name" checkInterval="60" debug="99" />
---------表
create table tomcat_session(session_id,session_data,session_valid,max_inactive,last_access,app_name)

 


className:Session的管理类,tomcat将会通过定义的接口来应用该类生成的对象。
 debug:Session管理器的跟踪级别。
saveOnRestart:(true/false)配置服务重启工程中对session的处理,若为true,则关闭前把有效的session保存,启动后重新载入

maxActiveSession:活动状态Session的最大数,为-1时则不限制,否则Session Manager将会把超出的Session对象转移到Session Store中。

minIdleSwap:Session不活动的最短时间,超过该时间,Session Manager 可能会把该Session对象转移到Session Store中,单位为秒。

maxidleSwap:Session不活动的最长时间,超过该时间,Session Manager 将会把该Session对象转移到Session Store中,该Session将不在内存中。

maxidleBackup: Session不活动的最长时间,超过该时间,Session Manager 将会把该Session对象备份到Session Store中,但该Session对象依然存在内存中。

<Store>指定实现持久化的类和Session存放的文件位置,如该例子中指定的类是:org.apache.catalina.session.FileStore,而Session对象存放的目录则是tomcat根目录下的 session文件夹(当然自己创建)

 


配置完后可以写一个简单的jsp页面,在页面上显示本次用户访问的Session ID,然后重起tomcat,再刷新该页面,可以看到该Session Id不变,而在/session目录下自动生成一个以session id为名,以“session”为扩展名的文件。该Session的持久化配置成功

 

 

 

TOMCAT的另一种SESSION持久化方法:

继承StardSession,实现相应方法。当往SESSION里面保存属性的时候,调用setAttribute方法,setAttribute方法的实现大概如下:

MemcacheClient mc =new MemcacheClient();

public void setAttribute(String name, Object value) {

        String key = name + this.getId();
        if(mc.keyExists(key)){
            mc.replace(key, value);
        }else{
              mc.set(key, value);
         }
    }

使用SESSIONID+属性名.通MemcachedClient.set()方法存入Memcached中.具体实现在附件中(有借用他人代码)

Context.xml配置文件

<Manager className="org.apache.catalina.session.MemcachedManager" debug=0
    saveOnRestart="true"
    maxActiveSession="-1"
    minIdleSwap="-1"
    maxIdleSwap="-1"
    maxIdleBackup="-1" serverlist="127.0.0.1:11211" >

zz:http://blog.csdn.net/onlyzhangqin/archive/2008/09/06/2890592.aspx

Tomcat5.5.12 实现Session持久化的配置:

为什么要持久化SESSION:
 在客户端每个用户的Session对象存在Servlet 容器中,如果Tomcat服务器重起/当机的话该session就会丢失,而客户端的操作应为session的丢失而造成数据丢失,而且当前用户访问量巨大,每个用户的Session里存放大量的数据的话,那么就很占用服务器大量的内存,从而是服务器的性能受到影响。

 

TOMCAT持久化办法:
 Tomcat里,系统提供Session的持久化策略。其中对session的存储提供两种办法,一个是本地文件存储,一个是数据库存储

 


进入tomcat的配置文档目录/conf,可以看到context.xml文件,我们将在这里配置Session持久化,配置后将对所有的站点生效。
打开context.xml,在<Context>节点下添加如下<Manager>节点:
<Manager className="org.apache.catalina.session.PersistentManager" >
    debug=0
    saveOnRestart="true"
    maxActiveSession="-1"
    minIdleSwap="-1"
    maxIdleSwap="-1"
    maxIdleBackup="-1"
    <Store className="org.apache.catalina.session.FileStore" directory="../session" />//这里代表的是文件持久化.也可               //以自己实现Store
</Manager>

JDBCStore配置:

<Store calssName="org.apache.catalina.JDBCStore" driverName="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost/tomsessionDB?user=root&password="
sessionTable="tomcat_session" sessionIdCol="session_id" sessionDataCol="session_data"
sessionValidCol="session_valid" sessionMaxInactiveCol="max_inactive"
sessionLastAccessedCol="last_access" sessionAppCol="app_name" checkInterval="60" debug="99" />
---------表
create table tomcat_session(session_id,session_data,session_valid,max_inactive,last_access,app_name)

 


className:Session的管理类,tomcat将会通过定义的接口来应用该类生成的对象。
 debug:Session管理器的跟踪级别。
saveOnRestart:(true/false)配置服务重启工程中对session的处理,若为true,则关闭前把有效的session保存,启动后重新载入

maxActiveSession:活动状态Session的最大数,为-1时则不限制,否则Session Manager将会把超出的Session对象转移到Session Store中。

minIdleSwap:Session不活动的最短时间,超过该时间,Session Manager 可能会把该Session对象转移到Session Store中,单位为秒。

maxidleSwap:Session不活动的最长时间,超过该时间,Session Manager 将会把该Session对象转移到Session Store中,该Session将不在内存中。

maxidleBackup: Session不活动的最长时间,超过该时间,Session Manager 将会把该Session对象备份到Session Store中,但该Session对象依然存在内存中。

<Store>指定实现持久化的类和Session存放的文件位置,如该例子中指定的类是:org.apache.catalina.session.FileStore,而Session对象存放的目录则是tomcat根目录下的 session文件夹(当然自己创建)

 


配置完后可以写一个简单的jsp页面,在页面上显示本次用户访问的Session ID,然后重起tomcat,再刷新该页面,可以看到该Session Id不变,而在/session目录下自动生成一个以session id为名,以“session”为扩展名的文件。该Session的持久化配置成功

 

 

 

TOMCAT的另一种SESSION持久化方法:

继承StardSession,实现相应方法。当往SESSION里面保存属性的时候,调用setAttribute方法,setAttribute方法的实现大概如下:

MemcacheClient mc =new MemcacheClient();

public void setAttribute(String name, Object value) {

        String key = name + this.getId();
        if(mc.keyExists(key)){
            mc.replace(key, value);
        }else{
              mc.set(key, value);
         }
    }

使用SESSIONID+属性名.通MemcachedClient.set()方法存入Memcached中.具体实现在附件中(有借用他人代码)

Context.xml配置文件

<Manager className="org.apache.catalina.session.MemcachedManager" debug=0
    saveOnRestart="true"
    maxActiveSession="-1"
    minIdleSwap="-1"
    maxIdleSwap="-1"
    maxIdleBackup="-1" serverlist="127.0.0.1:11211" >

猜你喜欢

转载自aguang520.iteye.com/blog/1552656