代码
package com.chinaseacom.store.common; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; public class MySessionListener implements HttpSessionListener { private long onlineCount; public void sessionCreated(HttpSessionEvent event) { this.onlineCount=this.onlineCount+1; //保存在application作用域 event.getSession().getServletContext().setAttribute("onlineCount", onlineCount); } public void sessionDestroyed(HttpSessionEvent event) { this.onlineCount=this.onlineCount-1; event.getSession().getServletContext().setAttribute("onlineCount", onlineCount); } }
web.xml中配置
<!-- 配置自定义监听器 --> <listener> <listener-class>com.chinaseacom.store.common.MySessionListener</listener-class> </listener>
jsp页面
${application.onlineCount }
要了解Session首先要知道一个概念:Session的销毁只有两种情况:
第一:session调用了 session.invalidate()方法.
第二:前后两次请求超出了session指定的生命周期时间. 其中Session的生命周期时间可以在web.xml配置. 默认30分钟
在web.xml可以做如下配置:
<session-config> <session-timeout>5</session-timeout> </session-config>
Tomcat 默认是会在一个 application 停止的时候,将其所有的session都序列化Tomcat安装目录\work\Catalina\localhost\项目名 文件夹下面看到有一个 SESSIONS.ser 的文件中,然后在下次启动的时候,在反序列化,继续尚未过期的session的。
tomcat单独停止某个应用需要到tomcat管理界面
但是,如果不想让session序列化到文件中,该如何做?
答案:
创建 yourWebApp/META-INF/context.xml ,内容如下:(补充:META-INF 目录应该和WEB-INF目录平级)
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Manager className="org.apache.catalina.session.PersistentManager" saveOnRestart="false">
<Store className="org.apache.catalina.session.FileStore" />
</Manager>
</Context>
参考文章:
http://blog.csdn.net/yiyuhanmeng/article/details/8156247
本文出自 “一无所有-天行者” 博客,请务必保留此出处http://tianxingzhe.blog.51cto.com/3390077/1683427
原文地址:http://tianxingzhe.blog.51cto.com/3390077/1683427