码迷,mamicode.com
首页 > 其他好文 > 详细

《how tomcat work》 搬运工 Chapter 9: Session Management

时间:2015-09-06 12:25:04      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:

Catalina版本的Tomcat通过manager板块来提供session管理,manager通常是和context联系在一起,就是context类里会有一个manager实例。

Session interface

public interface Session { 
    public static final String SESSION_CREATED_EVENT = "createSession";
    public static final String SESSION_DESTROYED_EVENT = "destroySession";
    public String getAuthType();
    public void setAuthType(String authType);
    public long getCreationTime();
    public void setCreationTime(long time);
    public String getId();
    public void setId(String id);
    public String getInfo();
    public long getLastAccessedTime();
    public Manager getManager();
    public void setManager(Manager manager);
    public int getMaxInactiveInterval();
    public void setMaxInactiveInterval(int interval);
    public void setNew(boolean isNew);
    public Principal getPrincipal();
    public void setPrincipal(Principal principal);
     public HttpSession getSession();
    public void setValid(boolean isValid);
    public boolean isValid();
    public void access();
     public void addSessionListener(SessionListener listener);
    public void expire();
    public Object getNote(String name);
    public Iterator getNoteNames();
    public void recycle();
    public void removeNote(String name);
    public void removeSessionListener(SessionListener listener);
    public void setNote(String name, Object value);
}

常用到的HttpSession就是要继承Session接口的。而session的实例都在manager里管理。

 

一、Manager

manager最基本的功能就是保存session,用hashmap来保存,删除,

manager interface

public interface Manager { 
    public Container getContainer();
    public void setContainer(Container container);
    public DefaultContext getDefaultContext();
    public void setDefaultContext(DefaultContext defaultContext);
    public boolean getDistributable();
    public void setDistributable(boolean distributable);
    public String getInfo();
    public int getMaxInactiveInterval();
    public void setMaxInactiveInterval(int interval);
    public void add(Session session);
    public void addPropertyChangeListener(PropertyChangeListener listener);
    public Session createSession();
    public Session findSession(String id) throws IOException;
    public Session[] findSessions();
    public void load() throws ClassNotFoundException, IOException;
    public void remove(Session session);
    public void removePropertyChangeListener(PropertyChangeListener listener);
    public void unload() throws IOException;
}

细分各种manager

(1)StandardManager

最常规的manager,复制保存session在内存。同样要继承,Lifecycle interface方便开始和结束。在stop时,会将通过验证的session序列化到一个文件里,在reload是就会重新读取。

同样,standardManager会销毁过期的session。

在tomcat4会通过开启一个dedicated线程。所以StandardManager会继承并实现 java.lang.Runnable接口。在一段时间后会通过processExpires()来检测session和去销毁。

在tomcat5中,会则通过

public void backgroundProcess() { processExpires(); }

来进行。这个方法是通过StandardContext的backgroundProcess方法来调用的,

(2)PersistentManager

PersistentManager继承PersistentManagerBaseh接口。

PersistentManager和StandardManager的区别是,PersistentManager会通过第二层存储来管理session,比如说在文件,数据库。

这则是通过一个私有的类,private Store store;

还可以进行back up,当服务器宕机时可以恢复session,还有swap out来将一些不活跃的session重内存里清除来节省内存。

在tomcat4中也是开启一个线程来完成这些功能。

在tomcat5则通过backgroundProcess();

(3)DistributedManager

DistributedManager是PersistentManager的子类,DistributedManager是解决session的集群管理

 

在Tomcat启动时中应用manager

Manager manager = new StandardManager();

context.setManager(manager);

《how tomcat work》 搬运工 Chapter 9: Session Management

标签:

原文地址:http://www.cnblogs.com/xuyung/p/4784681.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!