Tomcat从零开始(十二)Session第一部分
来源:互联网 发布:淘粉吧是淘宝授权的吗 编辑:程序博客网 时间:2024/05/29 17:52
Session这个东西相信有过web开发经验的都不是很陌生,我们今天就说说session的管理。它是依靠org.apache.catalina.Manager这个接口来进行管理的。我们先来看看其中定义的方法。
我们可以看见他有get/setContainer()方法,所以可以断定它一定与上下文的容器机型的关联,同时他有一个方法createSession() remove(Session) findSession(String)这几个方法。这里先不多说,我们先来想想我们一般在servlet中是如何获取一个session的。就是request.getSession()就完事了,那就可以推断出,getSession()是在javax.servlet.http.HttpServletRequest中定义的,在org.apache.catalina.connector.HttpRequestBase中实现的.
经过了这么长时间的学习,我们应该能猜到一个现象,就是 tomcat中的组件,比如request,它是由javax.servlet.http.HttpServletRequest表示的,但是传递给servlet的时候不会直接传一个HttpRequestBase的request,而是传递一个HttpRequestFacade类。所以这次的session同样也不能例外,我们能从org.apache.catalina.session找到session的标准实现StandardSession类。所以肯定有一个包装的StandardSessionFacade类。So,我们应该大概的明白这几个类的关系了。
顺便说一句session不是什么时候都存储在内存中的,它还可以被持久化到本地文件或者数据库中,一般这叫session的钝化。http://wenku.baidu.com/view/87af2827ccbff121dd368308这里就说明了为了要进行session钝化以及常用的方法。
既然我们这次说session,那么我们先来看看session的接口定义了哪些方法。
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);}
我们应该知道session一定要与Manager关联,所以我们能拿看见get/setManager(),之后我们发现 他还有一个ID的属性,这是标识session的,来确定到底是哪个session。之后就是说说失效时间,当一个Session对象被访问的时候,access方法被调用,会更新session的最后访问时间(setLastAccessedTime),同时Session的最后一次访问时间,然后拿来与一个设定的时间X做比较,从而确定session是否失效。时间X就是我们在server.xml中设置的session-timeout标签项。
妥了,接下来就是StandardSession了,它实现了Session与HttpSession接口,同时还实现了serializable,这是为了实现钝化,还有就是为了应对集群。StandardSession类中的getSession()返回的不是StandardSession对象,而是一个StandardSessionFacade对象,这是为了安全,在第request那里说过了。当session过期后,用expire方法将session设置为无效。Expire方法主要做以下几件事情:
(1)将Session设置为无效,通过setValid(false)就可以了。
(2)将session从manager中删除
(3)把session中存储的数据删除
(4)看参数来判断是否触发一些事件。
今天就到这里,session的 部分介绍完了,下节课介绍session的管理以及store。
- Tomcat从零开始(十二)Session第一部分
- Tomcat从零开始(十三)Session第二部分
- Tomcat 5集群中的SESSION复制 第一部分
- Tomcat 5集群中的SESSION复制 第一部分
- Tomcat从零开始(十四)session的store
- Tomcat从零开始(十五)session管理的代码
- Android从零开始(十二)
- Android从零开始(十二)
- apache+tomcat 负载均衡+session共享(For Windows) 部分1
- apache+tomcat 负载均衡+session共享(For Windows) 部分2
- 从零开始学Makefile(十二)
- 从零开始创建基于struts1.2 + Hibernate3.0 Web工程(第一部分)
- 从零开始创建基于struts1.2 + Hibernate3.0 Web工程(第一部分)
- C# 语言 第一部分 面向对象(十二) 接口的应用
- Netty in Action (十二) 第五章节 第一部分 简介ByteBuf
- 二十二、代理模式Proxy 第一部分(结构型模式)
- JavaWeb总结十二、Session
- 第一部分
- myeclipse tomcat发布出现INVALID
- 在西二旗做一年数据分析的思考
- POJ 2689 Prime Distance 求素数距离(两次筛选)
- 关于Android Force Close 出现的原因 以及解决方法
- linux内核学习
- Tomcat从零开始(十二)Session第一部分
- Oracle的update语句优化研究
- 数据库设计阅读
- 最近的生活状态
- 在windows server 2008上安装证书服务
- Unity3D AssetBundles 动态加载游戏资源
- 企业过冬的生存技能
- java TCP/IP Socket编程例子
- 通向架构师的道路(第十二天)之Axis2 Web Service(三)