tomcat session管理总结

来源:互联网 发布:一分钟心理学 知乎 编辑:程序博客网 时间:2024/05/30 05:41

1.      Catalina通过一个成为Session管理器的组件来管理建立的Session对象,该组件由org.apache.catalina.Manager接口表示。

2.      Session管理器需要与一个Context容器相关联,且必须与一个Context容器关联。

3.      Session管理器负责创建、更新、销毁Session对象,当请求到来时,会返回一个有效的Session对象。

4.      在Catalina的默认连接器中,org.apache.catalina.connector.HttpRequestBase类实现HttpservletRequest接口,可以用来获取session。

5.      默认情况下,session管理器会将其所管理的Session对象放在内存中。但是,在tomcat中,session管理器也可以将Session对象进行持久化,存储到文件存储器或通过JDBC写入到数据库中。在Catalina中,org.apache.catalina.session包下有一些与Session对象和Session对象管理相关的类。

6.      在Catalina中Session接口的标准实现位于org.apache.catalina.session包下的StandardSession类。

7.      为了安全起见,Session管理器并不会直接将StandardSession实例交给servlet实例使用。而是使用了一个session接口的外观类: StandardSessionFacade. Session管理器会使用另一个外观类:org.apache.catalina.Session接口。

8.      在Catalina中,org.apache.catalina.session包中有一个名为ManagerBase的工具类,该类提供了常见功能的实现。ManagerBase类有两个直接子类,分别是StandardManager类和PersistentManagerBase类。

9.      当Catalina运行时,StandardManager实例会将session对象存储在内存中。但是,当catalina关闭时,它会将当前内存中的所有session对象存储到一个文件中。当再次启动Catalina时,又会将这些Session对象重新载入到内存中。

10.  Manager接口提供了getContainer()方法和setContainer()方法,以便将一个Manager实现与一个Context容器相关联。

11.  Load方法和upload方法用来将Session对象持久化到辅助存储器中,当然这还需要session管理器对持久化的支持。

12.  一个活动的Session对象指的是有效的,还未过期的Session对象。

13.  StandardManager 类是Manager接口的标准实现,该类将Session对存储于内存中。

14.  StandardManager类实现Lifecycle接口。这样就可以由与其关联的Context容器来启动和关闭。其中stop()方法的实现会调用unload()方法,以便将有效的Session对象序列化为一个名为”SESSION.ser”的文件中,而且每个Context容器都会产生一个这样的文件。

15.  PersistentManagerBase类是所有持久化Session管理器的父类。

16.  在tomcat4中,session备份和换出由Manager实现Runnable接口,来定时的执行session的换入和换出。而在tomcat5 这些交给backgroundProcess管理器来完成。

17.  Tomcat4 提供了DistributeedManager类,该类继承自PersistentManagerBase类,前一个类用于两个或多个节点的集群环境。

18.  为了实现复制Session对象的目的,当创建或销毁Session对象时,DistributedManager实例会想其他节点发送消息。

19.  为了与集群中其他节点的DistributedManager实例发送和接收消息,Catalina在org.apache.catalina.cluster包中有一些可供使用的工具类。其中,ClusterSender类用于向集群中的其他节点发送消息,ClusterReceiver实例用于接收集群中其他节点发送的消息。

20.  DistributedManager类实现了java.lang.Runnable接口,这样就可以使用一个专门的线程来检查对象是否过期,并从集群中其他节点上接收消息。

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

22.  StoreBase类是一个抽象类,提供了一些基本功能。该类有两个直接子类,分别是FileStore类和JDBCStore类。

23.  JDBCStore类将Session对象通过JDBC存入数据库中。因此为了使用JDBCStore,需要分别调用setDriverName()方法和setConnectionURL()方法来设置驱动程序名称和URL。

 

原创粉丝点击