Sessions

    在servlet编程中,一个session对象使用javax.servlet.http.HttpSession接口表示。该接口的标准实现是StandardSession类,该类在org.apache.catalina.session包中。

    但是出于安全的原因,管理器并不会将一个StandardSession实例传递给servlet。而是使用org.apache.catalina.session包中的外观类StandardSessionFacade类。在内部,一个管理器使用了另一个外观:org.apache.catalina.Session接口。Session相关类型的UML结构图如图9。1,注意,出于简便的考虑,并没有将Session, StandardSession, 和StandardSessionFacade前面的类添加在里面。


Session接口

    Session接口扮演了一个Catalina内部外观的角色。它的标准实现StandardSession还实现了javax.servlet.http.HttpSession接口,,Session接口如下:

    


    由于一个Session对象常常被一个管理器持有,所以接口提供了setManager和getManager方法来关联一个Session对象和一个管理器。另外,一个Session实例在跟管理器相关联的容器有一个唯一的ID。对于该ID有setId和getId方法相关。getLastAccessedTime方法由管理器来调用,以确定一个Session对象是否合法。管理器调用setValid方法来重置一个session的合法性。每次一个Session被进入的时候,都会调用access方法更新它的最后访问时间。最后,管理器可以调用expire方法来终止一个expire方法,使用getSession可以获得一个包装在该外观内的HttpSession对象。

StandardSession类

    StandardSession类是Session接口的标准是实现。另外,实现了javax.servlet.http.HttpSession 和org.apache.catalina.Session之外,它还实现了java.lang.Serializable接口来使得Session对象可序列化。

该类的构造器获得一个管理器实例来强制使得每个Session对象都有一个管理器。

public StandardSession(Manager manager);

方法getSession首先会将该实例创建一个StandardSessionFacade对象


一个Session对象如果在由maxInactiveInterval变量的时间内没有被进入则被终结。使用Session接口中定义的expire方法可以终结一个Session对象。




接下来是几个重要的变量在存放Session状态


StandardSessionFacade

要将一个Session对象传递给一个servlet,Catalina会初始化一个StandardSession类填充它并把它传递给servlet。但是它传递的是StandardSession对象,该类实现了javax.servlet.http.HttpSession接口中的方法。这样,servlet就不能将HttpSession向下转化为StandardSessionFacade类来访问它的共有方法。


管理器

  管理器用来管理Session对象。例如它创建Session对象并销毁它们。管理器由org.apache.catalina.Manager接口表示。在Catalina中,org.apache.catalina.session包中类ManagerBase类提供了常用函数的基本实现。ManagerBase类有两个直接子类:StandardManager和PersistentManagerBase类。

    在运行的时候,StandardManager将session对象存放在内存中。但是,当停止的时候,它将Session对象存放到文件中。当它再次启动的时候,重新载入Session对象。

    PersistentManagerBase类作为一个管理器组件将Session对象存放到二级存储器中。它有两个直接子类:PersistentManager和DistributedManager类(DistributedManager)类只在Tomcat4中有。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值