探索《How Tomcat Works》心得 七 Session
来源:互联网 发布:单片机仿真软件怎么用 编辑:程序博客网 时间:2024/04/29 21:14
Session在连接器中被管理,在servlet程序中通过getSession中调用,它在默认连接器中由HttpRequestBase中被实现。下面介绍一下Tomcat中的HttpRequestBase类的相关方法:
HttpRequestBase类是HttpRequest接口的基本实现,满足大多数实现了Http协议的连接器所要求的Request实现,只有一些特别的方法需要被重写。获取Session的方法如下,为HttpRequest分配一个Session,如果有必要,创建一个Session。
public HttpSession getSession(boolean create) { if( System.getSecurityManager() != null ) { PrivilegedGetSession dp = new PrivilegedGetSession(create); return (HttpSession)AccessController.doPrivileged(dp); } return doGetSession(create); }
下面介绍下doGetSession(create)方法
private HttpSession doGetSession(boolean create) { // There cannot be a session if no context has been assigned yet if (context == null) return (null); // Return the current session if it exists and is valid if ((session != null) && !session.isValid()) session = null; if (session != null) return (session.getSession()); // Return the requested session if it exists and is valid Manager manager = null; if (context != null) manager = context.getManager(); if (manager == null) return (null); // Sessions are not supported if (requestedSessionId != null) { try { session = manager.findSession(requestedSessionId); } catch (IOException e) { session = null; } if ((session != null) && !session.isValid()) session = null; if (session != null) { return (session.getSession()); } } // Create a new session if requested and the response is not committed if (!create) return (null); if ((context != null) && (response != null) && context.getCookies() && response.getResponse().isCommitted()) { throw new IllegalStateException (sm.getString("httpRequestBase.createCommitted")); } session = manager.createSession(); if (session != null) return (session.getSession()); else return (null); }
程序比较简单,而且还有注释,此处不再多做累述啦
引用书中的话,默认情况下,管理器将session对象存储在内存中,但是Tomcat对象也允许将Session对象存储在数据库或者文件中,通过jdbc获取。Catalina在org.apache.catalina.session包中提供了session对象和session管理的相关类型。
Session相关的类的关系图如下:
Session的标准实现类StandardSession,但是为了安全起见,Catalina不会把standardSession传给用户,而是把一个外观类StandSessionFacade传给用户,这种做法与前面讲到的RequestFacade与ResponseFacade如出一辙,都是为了限制权限,而把在内部使用到的标准实现类经过包装之后,再传递给servlet中,供servlet程序员使用。StandardSession是session的标准实现类,它实现了javax的HttpSession接口和Session接口,供Catalina内部使用,同时session被管理器管理,管理器控制它的生成,删除。
管理器
管理器用来管理 Session 对象。在运行的时候,StandardManager 将 session 对象存放在内存中。但是,当停止的时候,它将 Session 对象存放到文件中。当它再次启动的时候,重新载入Session 对象。
- 探索《How Tomcat Works》心得 七 Session
- 探索《How Tomcat Works》心得(一)
- 探索《How Tomcat Works》心得(二)
- 探索《How Tomcat Works》心得(三)--容器
- 探索《How Tomcat Works》心得(四)生命周期 Lifecycle
- 探索《How Tomcat Works》 心得(五) 日志系统
- 探索《How Tomcat Works》 心得(六) 加载器 上
- How Tomcat Works学习笔记<七>
- how tomcat works读书笔记 七 日志记录器
- how tomcat works 读书笔记九 Session管理
- How Tomcat works - Session Manager(base on Tomcat4)
- How tomcat works——9 session管理
- How Tomcat Works 1
- How Tomcat Works 2
- Books - How Tomcat works
- How Tomcat Works 5
- How Tomcat Works 9
- How Tomcat Works 6
- 操作系统思考 第八章 多任务
- Oracle OCP笔记(29)RMAN备份 - Config
- C++体会
- ubuntu14 启用中文输入法
- Oracle OCP笔记(30)数据库恢复
- 探索《How Tomcat Works》心得 七 Session
- mysql 主从复制配置
- RSA算法原理
- 深入理解Java虚拟机--运行时栈帧结构
- 153. Find Minimum in Rotated Sorted Array
- Oracle OCP笔记(31)使用闪回功能
- guava之Joiner 和 Splitter
- AsyncTask工具类的使用-真实下载图片实例
- Jquery DataTables 获取表格数据及选中行数据