博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《how tomcat work》 搬运工 Chapter 9: Session Management
阅读量:5079 次
发布时间:2019-06-12

本文共 3322 字,大约阅读时间需要 11 分钟。

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);

转载于:https://www.cnblogs.com/xuyung/p/4784681.html

你可能感兴趣的文章
利用sfntly的sfnttool.jar提取中文字体
查看>>
tomcat8热部署配置--maven自动发布项目到tomcat8(如何支持远程访问部署)
查看>>
(2)Python索引和切片
查看>>
有关自动化构建gulp的搭建
查看>>
BZOJ1009 矩阵快速幂+DP+KMP
查看>>
2013年工作总结
查看>>
连接到github
查看>>
vim-DrawIt
查看>>
如何用Fiddler手机抓包
查看>>
学好Mac常用命令,助力iOS开发
查看>>
rac one node在线relocation
查看>>
2565放大的X(hdu)
查看>>
重温数据结构系列随笔:单链表(c#模拟实现)
查看>>
读取线图层上的点,输出为点图层
查看>>
pku 1840 Eqs 哈希处理
查看>>
ucos任务优先级从64到256,任务就绪表的改变
查看>>
//C#中的访问数据符
查看>>
217. Contains Duplicate
查看>>
vue2.0 关于Vue实例的生命周期
查看>>
小小SQLServer,你懂的
查看>>