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

学习tomcat 小记(4)

阅读更多
session管理

1)Session
catalina通过一个成为manager的组件管理session,该组件要实现org.apache.catalina.Manager接口,且必须与一个context关联。相比于其他组件,manager负责创建、更新、销毁session对象。

Session接口
Session接口是作为catalina的外观类使用的。Session对象的标准实现StandardSession类也实现了javax.servlet.http.HttpSession接口。
session对象总是存在于manager组件中,getManager/setManager方法用于设置session和manager的关联。对某个session实例来说,在与其关联的manager内,该session有唯一标识,该标识可通过setId/getId方法来访问。manager调用getLastAccessedTime方法来决定某个session对象的有效性。manager调用setValid方法将某个session对象标识为有效。每次访问session对象时,它的调用方法都会修改该session对象的最后访问时间。最后,manager可以通过调用expire方法将某个session对象标识为过期,也可以通过getSession方法获取一个经过session外观类包装过的HttpSession对象。

StandardSession类
StandardSession是catalina中Session接口的标准实现。除了实现javax.servlet.http.HttpSession接口和org.apache.catalina.Session接口外,StandardSession类还实现了java.lang.Serializable接口。

StandardSessionFacade类
为了传递一个session对象给servlet,catalina会实例化一个Session对象,填充session对象内容,然后再传给servlet。但是,实际上,catalina传递的是session的外观类StandardSessionFacade的实例,该类仅仅实现了javax.servlet.http.HttpSession接口。


2) Manager
manager组件负责管理session对象,例如创建和销毁session对象。catalina中manager组件必须要实现org.apache.catalina.Manager接口。org.apache.catalina.session包内的ManagerBase是Manager接口的基本实现,它有两个直接子类:StandardManager类和PersistentManagerBase类。
当运行tomcat时,StandardManager实例负责在内存中管理session,但当服务器关闭时,会将当前内存中的session写入到文件中,等服务器再次启动时,会重新载入这些session。

Manager接口
Manager接口通过getContainer/setContainer来与某个container相关联。使用createSession方法来创建一个session对象。使用add方法将某个session对象添加到session池中,或使用remove方法将某个session删除。getMaxInactiveInterval/setMaxInactiveInterval来访问/设置maxInactiveInterval变量,单位为秒。
使用unload方法可以将session对象持久化到二级存储设备中,load方法则可以将其载入到内存中。

ManagerBase类是一个抽象类,实现了Manager接口。该类提供了一些基本的功能。

StandardManager类是Manager接口的标准实现,该类将session对存储与内存中。StandardManager类还是先了Lifecycle接口,可由其container负责启动/关闭。其中,stop方法会调用unload方法将session对象序列化到一个名为Session.ser的文件中,每个context一个文件。SESSIONS.ser文件位于CATALINA_HOME目录下的work目录中。当StandardManager再次启动时,会调用load方法从文件再次读取session对象到内存中。

当session无效时,manager组件要负责销毁session对象。在tomcat4中,StandardManager类使用另一个线程完成此任务。因此,StandardManager类还要实现java.lang.Runnable接口。
public void run() {
   // Loop until the termination semaphore is set
   while (!threadDone) {
     threadSleep();
     processExpires();
   }
}

在tomcat5中,StandardManager类没有实现java.lang.Runnable接口,processExpires方法会直接被backgroundProcess方法调用,tomcat4中并不包含backgroundProcess方法:
public void backgroundProcess() {
   processExpires();
}

PersistentManagerBase类是所有持久化manager的父类。StandardManager类和持久化manager的区别在于后者的存储方式(store)。store表示了管理session对的二级存储设备。

swap out(换出)
PersistentManagerBase类在换出session对象时要遵守一定的规则。只有当活动session的数量超过一定限制,或某个session已经过期时,才能将其换出。

back up(备份)
不是所有的session都会备份,PersistentManagerBase类只会备份那些空闲时间超过maxIdleBackup的session。该任务由processMaxIdleBackups方法完成。


PersistentManager类
PersistentManager类继承自PersistentManagerBase类,并没有添加其他的方法,只是多了两个属性:
// The descriptive information about this implementation.
   private static final String info = "PersistentManager/1.0";
   // The descriptive name of this Manager implementation (for logging).
   protected static String name = "PersistentManager";

DistributedManager类
tomcat4中提供了DistributedManager类,该类继承自PersistentManagerBase类。该类用于两个或多于两个节点的集群环境。一个节点表示了一个tomcat的部署。集群中的节点可以在同一台物理机器,也可以在不同的物理机器。在集群环境中,每个节点必须使用DistributedManager实例作为其manager,才能支持session的复制,这也是DistributedManager类的主要功能。

Stores
store由org.apache.catalina.Store接口表示。manager组件使用store作为持久化session的存储设备。
其中save和load是两个比较重要的方法。save方法将指定的session对象持久化到store中。load方法则根据参数id从store中找到对象的session,载入到内存中。

FileStore类将session对象持久化到某个文件中。文件名的格式为“sessionid+‘.session’”。文件位于临时的工作目录下,可以调用FileStore类的setDirectory方法修改临时目录的位置。

JDBCStore类将session对象通过jdbc存入数据库中。因此,为了使用JDBCStore,你需要调用setDriverName方法和setConnectionURL方法来设置数据库驱动和连接url。

3)加入SessionManager的系统结构:
使用默认的connector,使用一个context作为容器,容器中有一个wrapper。区别一,context中有一个StandardManager类的实例,用于管理session对象。

Bootstrap类
Bootstrap类会创建一个org.apache.catalina.session.StandardManager类的实例,并将之与Context相关联。

SimpleWrapperValve类
当servlet调用javax.servlet.http.HttpServletRequest接口的getSession方法获取session实例。当调用getSession方法时,request对象必须访问与context相关联的manager。manager组件要么创建一个新的session,要么返回一个已经存在的session。request对象为了能够访问manager,它必须能够访问context。为了达到此目的,在SimpleWrapperValve类的invoke方法中,可以调用org.apache.catalina.Request接口的setContext方法,传入Context实例。因此,必须在servlet的service方法调用前设置好context。

分享到:
评论

相关推荐

    windows下部署tomcat项目小记

    在Windows环境下部署Apache Tomcat服务器是一项常见的任务,尤其对于开发和测试环境来说。在这个过程中,可能会遇到各种问题,本文将详细解析如何在Windows系统中部署Tomcat项目,并着重解决两个常见问题:数据库不...

    Tomcat学习资料1

    【标题】:“Tomcat学习资料1”所涵盖的知识点包括了Tomcat服务器的使用、配置以及Web项目的部署。Tomcat是Apache软件基金会的Jakarta项目中的一个核心项目,是一款开源的Java Servlet容器,广泛用于搭建Java Web...

    Tomcat学习总结.zip

    《Tomcat学习总结》 Tomcat,作为Java Web应用程序的开源服务器,是Apache软件基金会Jakarta项目的一个核心组件。在本文中,我们将深入探讨Tomcat 8.5版本的学习要点,包括其工作原理、配置与优化,以及在实际开发...

    Tomcat源码学习:一个最简单的“Tomcat”

    4. **Servlet生命周期**:Servlet的init、service、destroy方法在Tomcat中的调用过程。 5. **JSP处理**:Jasper如何将JSP文件编译为Servlet,并在运行时执行。 6. **部署描述符(web.xml)**:理解部署描述符的结构...

    tomcat官网版本Tomcat+Java学习资源

    【标题】:“Tomcat官网版本Tomcat+Java学习资源”是一个综合的学习资料包,主要针对的是Java开发中的关键工具——Apache Tomcat服务器以及相关的Java技术。Apache Tomcat是一款开源的Servlet容器,它实现了Java ...

    学习tomcat源码+英文《How Tomcat Work》和每一章的相关项目+tomcat6源码依赖jar

    总之,学习Tomcat源码不仅能够提升你对Web服务器底层工作的理解,还能够提高你在Java Web开发中的问题排查能力,让你成为一名更出色的开发者。通过阅读《How Tomcat Works》并结合实际项目实践,你将能够逐步揭开...

    tomcat7tomcat8tomcat9

    Tomcat是Apache软件基金会下的一个开源项目,是一个广泛使用的Java Servlet容器,特别因为其轻量级、高效能和稳定性而闻名。它实现了Java Servlet和JavaServer Pages(JSP)规范,使得开发者能够用Java语言来编写...

    tomcat源码学习之环境搭建

    在深入探讨Tomcat源码学习之前,我们首先要理解Tomcat是什么。Tomcat是一款开源的、免费的Web服务器和Servlet容器,由Apache软件基金会维护。它实现了Java Servlet和JavaServer Pages(JSP)规范,是Java EE应用...

    tomcat学习资料整理(不断更新)

    【标题】"Tomcat学习资料整理(不断更新)"揭示了这个压缩包文件是关于Tomcat服务器的深入学习资源,特别是关注其源码和使用的工具。Tomcat是Apache软件基金会的Jakarta项目中的一个核心项目,它是一个开源的、免费的...

    tomcat7,tomcat8,tomcat9

    4. 创建或导入Web项目,将项目部署到Tomcat服务器上。 5. 右键点击服务器实例,选择"Start"启动Tomcat,通过浏览器访问应用。 总的来说,Tomcat7、Tomcat8和Tomcat9代表了Java Web服务器技术的发展历程,它们在兼容...

    Tomcat + SLF4J + Logback 2017年10月最新包(Tomcat7~9)

    Tomcat7.0.82\tomcat-slf4j-logback-tomcat7.zip Tomcat8.0.47\tomcat-juli-8.0.47-slf4j-1.7.25-logback-1.2.3.zip Tomcat8.0.47\tomcat-slf4j-logback-tomcat8.zip Tomcat8.5.23\tomcat-juli-8.5.23-slf4j-1.7.25-...

    tomcat9 源码学习

    4. **部署与加载**:Tomcat支持通过`web.xml`文件自动部署Web应用。理解如何解析和加载这些配置文件对于自定义部署策略很重要。 5. **请求处理**:Coyote组件负责接收和处理HTTP请求。请求通过Connector到达,然后...

    tomcat5.5tomcat最新客户端

    tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat...

    tomcat学习笔记

    【标题】:Tomcat学习笔记 【正文】: Tomcat是一款广泛应用的开源Web服务器和Java Servlet容器,由Apache软件基金会的Jakarta项目开发。它实现了Java Servlet和JavaServer Pages(JSP)规范,并且作为轻量级应用...

    tomcat学习精华笔记

    4. Tomcat 目录结构 - 安装:在Windows或Linux上,确保已安装Sun JDK 1.2及以上版本。 - 目录: - bin:包含启动(Startup.bat)和关闭(Shutdown.bat)服务器的脚本。 - Common:存放通用类,如JDBC驱动。 - ...

    tomcat 学习与分析总结资料

    《Tomcat学习与分析总结资料》是一份涵盖了Tomcat服务器核心知识的综合资源,适合对Java Web应用服务器感兴趣的开发者深入学习。Tomcat是Apache软件基金会的项目,是世界上最流行的开源Servlet容器,它实现了Java ...

    tomcat 7 和 tomcat 8

    Tomcat 7 和 Tomcat 8 是两个非常重要的版本,它们是Apache软件基金会开发的开源Java Servlet容器,主要用于运行Java Web应用程序。这两个版本都遵循Java EE(Enterprise Edition)规范,但各自具有不同的特点和改进...

    Tomcat培训学习资料

    Apache Tomcat是一款广泛使用的开源Servlet容器,它实现了Java Servlet和JavaServer Pages (JSP)技术,并在...通过本课程的学习,可以提升他们对于Tomcat服务器的管理和应用能力,有效地应对实际工作中的各种挑战。

    tomcat4 源码学习,深度剖析tomcat一书的指定tomcat版本,欢迎大家下载,官网下载会出现下载不了的情况,

    tomcat4 源码学习,深度剖析tomcat一书的指定tomcat版本,随着tomcat版本的升级,内容发生 了变化,但为了读懂书籍,还是得使用老版本得源码,欢迎大家下载,官网下载会出现下载不了的情况,我主页有tomcat4-tomcat9...

Global site tag (gtag.js) - Google Analytics