`
tmj_159
  • 浏览: 699775 次
  • 性别: Icon_minigender_1
  • 来自: 永州
社区版块
存档分类
最新评论

tomcat session 持久化

 
阅读更多

        最近对tomcat比较感兴趣,会陆续的发一些学习tomcat的心得。

 

        今天看的是tomcat session持久化,关于session持久化我上官网上除了API没有找到相关的文档,只有在其它论坛网站上有很多哥们提到了。

 

         所谓session持久化就是将内存中的session保存到磁盘(文件)中,Tomcat有两种标准的持久化方案:

一种是保存在文件,另外一种是保存在数据库中。虽然session持久化用的很少,了解下还是可以的。

        默认情况下Tomcat提供的是StandardManager管理

org.apache.catalina.session.StandardManager

        StandardManager 里面提供了很多参数来管理,诸如maxActiveSessions,pathname,

maxInactiveInterval.... 还提供了load和unload方法来加载和持久化session。

修改配置文件catalina_home/conf/context.xml,取消注释的Manager

<!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->

        当你正常关闭(直接关闭进程不算)tomcat的时候,tomcat会将session保存在 catalina_home/work/catalina/localhost/项目名称/session.ser文件中。

       一、保存在文件中

        StandardManager可以保存在文件中,还有FileLoad也可以保存在文件中,不过FileLoad需要PersistentManager的帮助。这对我们来说更加的方便了,因为持久化逻辑,和持久化的动作分开了。

我们在catalina_home/conf/context.xml中添加如下配置信息:

<Manager className="org.apache.catalina.session.PersistentManager">
	debug=0
        saveOnRestart="true"
	maxActiveSession="-1"
	minIdleSwap="-1"
	maxIdelSwap="-1"
	<Store className="org.apache.catalina.session.FileStore" directory="../session"/>
    </Manager>

    重启之后,让服务器产生session,然后正常关闭。

    持久化的session文件在catalina_home/work/catalina/localhost/session下

 

二、保存在数据库中

    使用tomcat中

org.apache.catalina.JDBCStore

    具体参数看源码吧,这里我上网上找了一个配置:

<Store calssName="org.apache.catalina.JDBCStore" driverName="com.mysql.jdbc.Driver" 
connectionURL="jdbc:mysql://localhost/session?usename=xxx&password=xxx" 
sessionTable="session" sessionIdCol="session_id" sessionDataCol="session_data" 
sessionValidCol="sessionValid" sessionMaxInactiveCol="maxInactive" 
sessionLastAccessedCol="lastAccess" sessionAppCol="appName" checkInterval="60" debug="99" /> 

 这样就能把session 保存到数据库中了。

 

三、自定义存储方式

    看看三个类之间的关系:

StandardManager extends ManagerBase

PersistentManager extends PersistentManagerBase
PersistentManagerBase extends ManagerBase

FileStore extends StoreBase
JDBCStore extends StoreBase

   

        所以我们如果想改变存储的方式,如果想存缓存中(eg: memcached这样的)

我们可以写一个类继承StoreBase即可,我这里写了一个简单的,里面什么功能都没有,只是一些简单的systemout 来演示下:

package cn.tang;

import org.apache.catalina.Session;
import org.apache.catalina.session.StoreBase;

public class MySessionStore extends StoreBase{

	public Session load(String s) throws ClassNotFoundException, IOException {
		System.out.println("---------invoke load method------------");
		return null;
	}

	public void remove(String s) throws IOException {
		System.out.println("---------invoke remove method------------");
	}

	public void save(Session session) throws IOException {
		System.out.println("---------invoke save method------------");
	}

	public void clear() throws IOException {
		System.out.println("---------invoke save method------------");
	}

	public int getSize() throws IOException {
		System.out.println("---------invoke save method------------");
		return 0;
	}

	public String[] keys() throws IOException {
		System.out.println("---------invoke save method------------");
		return null;
	}
	
}

 打成一个jar包,放入catalina_home/lib中,同理修改context.xml文件

<Manager className="org.apache.catalina.session.PersistentManager">
	debug=0
        saveOnRestart="true"
	maxActiveSession="-1"
	minIdleSwap="-1"
	maxIdelSwap="-1"
	<Store className="cn.tang.MySessionStore"/>
    </Manager>

 重启之后,你会发现每个方法会有输出,关于如果写入到第三方缓存中,这是另一个话题了,有机会再说。

PS: 关于Session和Memcached已经有成熟的解决方案了,感兴趣的可以看下面的链接,

https://github.com/magro/memcached-session-manager

 

 

分享到:
评论

相关推荐

    Tomcat_Session的持久化

    Tomcat_Session的持久化,详细讲解tomcatsession管理的原理和持久化原理

    TOMCAT SESSION的持久化方法

    博文链接:https://wangxuliangboy.iteye.com/blog/237534

    Session持久化

    在tomcat实现对session的持久化,如果浏览的用户过大,避免服务器的内存消耗太大,影响性能。

    Tomcat7基于Redis的Session共享

    原理就是继承tomcat的manager接口,接管session的持久化工作 2.使用 ◦使用的时候就是Maven打包,放到tomcat的lib里面 (主要是三个包:commons-pool2-2.3.jar;jedis-2.7.3.jar;tomcat7-redis-cluster-1.0.0.jar) ...

    Tomcat8基于Redis的Session共享

    原理就是继承tomcat的manager接口,接管session的持久化工作 2.使用 ◦使用的时候就是Maven打包,放到tomcat的lib里面 (主要是三个包:commons-pool2-2.3.jar;jedis-2.7.3.jar;tomcat7-redis-cluster-1.0.0.jar) ...

    tomcat-redis-session-manager-by-eguid.zip

    实现tomcat 8及以后版本的tomcat集群的session持久化操作,基于redis实现tomcat容器的session的持久化 tomcat-redis-session-manager-by-eguid.jar+jedis-2.9.0.jar+commons-pool2-2.2.jar集合包

    Tomcat集群Session共享

    Tomcat集群解决Session共享的方案: 1. 基于Cookie+Redis+Filter解决方案实现过程优缺点踩坑 2. Tomcat内置的Session复制方案实现过程优...4. 基于Session持久化方案 5. 基于Spring-Session无侵入性方案实现过程优缺点

    tomcat-redis-session-manager-by-eguid.jar

    实现tomcat 8及以后版本的tomcat集群的session持久化操作,基于redis实现tomcat容器的session的持久化 本项目是基于jcoleman的二次开发版本 1、修改了小部分实现逻辑 2、去除对juni.jar包的依赖 3、去除无效代码和老...

    通过Nginx+Tomcat+Redis实现持久会话

    Redis的特点就是可以将session持久化。样才能真正实现后台多个Tomcat负载平衡,用户请求能够发往任何一个tomcat主机。 keeplived、zabbix与ansible暂不在本文章的范围当中,会在之后的文章逐一进行讲解 实验架构图 ...

    Tomcat中的Session与Cookie深入讲解

    前言 ...本文首发于公众号顿悟源码. 解决办法就是使用 Cookie,它由服务器返回给浏览器,浏览器缓存并在每次请求时将 cookie 数据提交到服务器。Cookies 在请求中以明文传输,且大小限制 4KB,显然把所有状态数据保存...

    谈谈业务中使用分布式的场景1

    2.集群中,各个应用服务器提供了session复制的功能,tomcat和jboss都实现了这样的功能 3.session的持久化,使用数据库来保存session

    how-tomcat-works

    4.2.1 持久化连接 18 4.2.2 编码 18 4.2.3 状态码100的使用 19 4.3 Connector接口 19 4.4 HttpConnector类 20 4.4.1 创建ServerSocket 20 4.4.2 维护HttpProcessor对象池 20 4.4.3 提供Http请求服务 21 4.5 ...

    编程入门_Eclipse教程

    4.1.1. 对持久化对象的要求 35 4.1.2. OID 36 5. Eclipse使用技巧 36 5.1. 一般插件安装 36 5.2. 自定义注释 37 5.3. 常用的快捷键 37 5.4. 代码编写小技巧 37 5.5. Eclipse中恢复已删除文件 37 5.6. Eclipse中轻松...

    SSH的jar包.rar

    SSH 通常指的是 Struts2 做前端控制器,Spring 管理各层的组件,Hibernate 负责持久化层。 一个请求在Struts2框架中的处理大概分为以下几个步骤: 1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求 2、这...

    仿当当网mvc架构设计

    具体描述:独立完成项目的各个开发模块,本系统采用了典型MVC的三层架构,利用jsp实现表现层,struts实现业务逻辑,hibernate作数据持久化处理。利用hibernate的事务逻辑线程session实现事务的统一处理。Jsp只负责...

    How Tomcat Works: A Guide to Developing Your Own Java Servlet Container

    4.2.1 持久化连接 18 4.2.2 编码 18 4.2.3 状态码100的使用 19 4.3 Connector接口 19 4.4 HttpConnector类 20 4.4.1 创建ServerSocket 20 4.4.2 维护HttpProcessor对象池 20 4.4.3 提供Http请求服务 21 4.5 ...

    尚硅谷_Redis.docx

    在本课程中,你将了解Redis是什么、能干什么、如何用,了解NoSQL的使用场景和概念,快速掌握Redis的安装配置、五大数据类型、常用操作命令、Redis持久化、主从复制、事务控制以及用Jedis操作进行Java开发等知识。...

    尚硅谷Redis入门视频

    在本课程中,你将了解Redis是什么、能干什么、如何用,了解NoSQL的使用场景和概念,快速掌握Redis的安装配置、五大数据类型、常用操作命令、Redis持久化、主从复制、事务控制以及用Jedis操作进行Java开发等知识。...

    hibernate 教程

    第一个可持久化类 1.3. 映射cat 1.4. 与猫同乐 1.5. 结语 2. 体系结构 2.1. 总览 2.2. JMX集成 2.3. JCA支持 3. SessionFactory配置 3.1. 可编程配置方式 3.2. 获取SessionFactory...

Global site tag (gtag.js) - Google Analytics