博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tomcat 学习笔记之 Session管理
阅读量:6893 次
发布时间:2019-06-27

本文共 1918 字,大约阅读时间需要 6 分钟。

hot3.png

1、Catalina 通过一个 Session 管理器的组件来管理建立的Session 对象

  • 该组件由 org.apache.catalina.Manager 接口表示
  • Session 管理器必须与一个 Context 关联
  • Session 管理器负责,创建、更新、销毁 Session 对象
  • 当有请求到来时,会返回一个有效的Session 对象

默认情况下,Session 管理器会将Session 对象放入内存中

  • 也可以持久化,存入数据库中或文件存储器中

2、Session 对象

  • 在Servlet 编程中,Session 由 javax.servlet.http.HttpSession 接口表示
  • tomcat 中,由 org.apache.catalina.session 包下的StandardSession 类
  • 实际使用中,StandardSessionFacade 外观类

85429083ec92f58558d9e43bd052011443e.jpg

  • Session接口是做外 Catalina 内部的外观类使用的

f246c77c1c60fa654c827d18a21b914aa2c.jpg

StandardSession 类

  • 实现了 javax.servlet.http.HttpSession 接口
  • 实现了 org.apache.catalina.Session 接口
  • 实现了 Serializable 接口
  • 如下是比较重要的私有化变量

cedb450cfea939d5b216564a3f47e761218.jpg

StandardSessionFacade 类

  • 为了传递Session 对象给serlvet 实例,其实传递的是外观类
  • 仅仅实现了 HttpSession 接口
  • 对方问做了限制

3、Manager

  • Session 管理器是Manager 接口的实例
  • org.apache.catalina.session.ManagerBase 工具类
  • 该类提供了常见功能的实现
  • ManagerBase 有俩直接子类:StandardManager 和 PersistentManagerBase

StandardManager

  • Catalina 运行时,StandardManager 将Session 对象存入内存
  • Catalina 关闭时,所有session 存入到一个文件

PersistentManagerBase

  • 有一类session管理器会将session 对象存储到辅助存储器
  • PersistentManagerBase 是这种管理器的基类

7b46920535398e5c5a35934e2373566e555.jpg

Manager 接口

fb548b8bc8b6082621e313a9b1ce1b5b1c4.jpg

0784fc0b4a1e7732c1f1ca59c2bef93cc8a.jpg

ManagerBase 类

  • Context 容器的所有Session 活动对象,存入map中

191394e4f25664b3c341d674d50370e5e95.jpg

StandardManager 类

  • 是Manager 接口的标准实现
  • 该类实现了 LifeCycle 接口,这样就可以由与其相关的 Context 容器启动和关闭
  • Session 还要销毁那些已经失效的Session对象

PersistentManagerBase 类

  • 所有持久化Session 管理器的父类
  • 具有备份和换出Session 对象的任务

换出:

  • 当Session 对象数量超出 maxActeSessions 所指的上限时
  • 或者闲置了过长时间时
  • 既然Session 对象可以被换出,所以查找时内存中找不到,就会去存储器查找

 备份:

  • 仅仅会备份那些空闲时间超过 maxIdleBackUp 指定的值得session 对象

PersistentManager 类 

  • 继承自PersistentManagerBase 类
  • 并没多添加其他方法,只是多了两个属性

1befe7750e358a4f4e7830a9dd6735161e8.jpg

DistributedManager 类

  • 继承自PersistentManagerBase 类
  • 用于两个或多个节点集群环境
  • 集群环境中,必须使用DistributedManager 作为session管理器,支持复制session对象(该类主要功能)
  • 为了实现复制session对象的目的,创建和销毁Session对象时,DistributedManager会向其他节点发送消息

为了与集群中其他节点 发送接收消息

  • org.apache.catalina.clust 包中提供了一些可供使用的工具类
  • ClusterSender 向其他节点发送消息
  • ClusterReceiver 接收其他节点发送的信息

3、存储器

  • 存储器是实现了 org.apache.catalina.Store 接口的实例
  • 是为Session 管理器的Session 对象提供持久化存储器的一个组件

9178b2e95ee658ea25e0080899a488435ac.jpg

  • Store 接口类结构图

1dcdbc01c5b76fac820b173dc4907df7d5a.jpg

StoreBase 类

  • 一个抽象类,提供基本功能
  • 两个直接子类,FileStore 类和 JDBCStore 类

转载于:https://my.oschina.net/u/3847203/blog/1855980

你可能感兴趣的文章
管道和重定向
查看>>
如何用外部程序优化SQL语句中的IN和EXISTS
查看>>
make 中的路径搜索(十二)
查看>>
PropertyChangeSupport的使用
查看>>
推荐 10 个好用的 JavaScript 代码压缩工具
查看>>
OAuth 2.0: Bearer Token Usage
查看>>
图形化生成kickstart文件
查看>>
zabbix agent 端主动注册
查看>>
初识Mysql(二)
查看>>
监控系统的状态
查看>>
Samba文件共享服务
查看>>
Check Point SMB 操作手册
查看>>
百万PV网站架构案例
查看>>
Redis PHP连接Redis
查看>>
苏研环境gerrit提交
查看>>
还在傻傻用Ctrl+C和Ctrl+V吗?这2个行列转置方法助你效率提80%!
查看>>
webpack4.0各个击破(5)—— Module篇
查看>>
没有什么内存问题,是一行Python代码解决不了的
查看>>
备忘录模式
查看>>
RabbitMQ之集群搭建
查看>>