tomcat架构分析 (Session管理)

发布时间:2017-3-27 16:26:55 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"tomcat架构分析 (Session管理)",主要涉及到tomcat架构分析 (Session管理)方面的内容,对于tomcat架构分析 (Session管理)感兴趣的同学可以参考一下。

tomcat架构分析 (Session管理)

Session管理是JavaEE容器比较重要的一部分,在app中也经常会用到。在开发app时,我们只是获取一个session,然后向session中存取数据,然后再销毁session。那么如何产生session,以及session池如何维护及管理,这些并没有在app涉及到。这些工作都是由容器来完成的。 
Tomcat中主要由每个context容器内的一个Manager对象来管理session。对于这个manager对象的实现,可以根据tomcat提供的接口或基类来自己定制,同时,tomcat也提供了标准实现。 
在tomcat架构分析(容器类)中已经介绍过,在每个context对象,即web app都具有一个独立的manager对象。通过server.xml可以配置定制化的manager,也可以不配置。不管怎样,在生成context对象时,都会生成一个manager对象。缺省的是StandardManager类,其类路径为: 

引用
org.apache.catalina.session.StandardManager


Session对象也可以定制化实现,其主要实现标准servlet的session接口: 

引用
javax.servlet.http.HttpSession


Tomcat也提供了标准的session实现: 

引用
org.apache.catalina.session.StandardSession


本文主要就是结合消息流程介绍这两个类的实现,及session机制。 
Session方面牵涉的东西还是蛮多的,例如HA,session复制是其中重要部分等,不过本篇主要从功能方面介绍session管理,有时间再说说扩展。 
Session管理主要涉及到这几个方面: 

  • 创建session
  • 注销session
  • 持久化及启动加载session



创建session 
在具体说明session的创建过程之前,先看一下BS访问模型吧,这样理解直观一点。 

  1. browser发送Http request;
  2. tomcat内核Http11Processor会从HTTP request中解析出“jsessionid”(具体的解析过程为先从request的URL中解析,这是为了有的浏览器把cookie功能禁止后,将URL重写考虑的,如果解析不出来,再从cookie中解析相应的jsessionid),解析完后封装成一个request对象(当然还有其他的http header);
  3. servlet中获取session,其过程是根据刚才解析得到的jsessionid(如果有的话),从session池(session maps)中获取相应的session对象;这个地方有个逻辑,就是如果jsessionid为空的话(或者没有其对应的session对象,或者有session对象,但此对象已经过期超时),可以选择创建一个session,或者不创建;
  4. 如果创建新session,则将session放入session池中,同时将与其相对应的jsessionid写入cookie通过Http response header的方式发送给browser,然后重复第一步。


以上是session的获取及创建过程。在servlet中获取session,通常是调用request的getSession方法。这个方法需要传入一个boolean参数,这个参数就是实现刚才说的,当jsessionid为空或从session池中获取不到相应的session对象时,选择创建一个新的session还是不创建。 
看一下核心代码逻辑; 

上一篇:Java轻量级业务层框架Spring两大核心IOC和AOP原理
下一篇:在 Tomcat 中配置 SSL/TLS 以支持 HTTPS

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款