当前位置: 技术问答>java相关
对于 session 绑定事件的使用
来源: 互联网 发布时间:2015-06-20
本文导语: 看到书里说 可以绑定两个事件到 session 中 一个是在创建时, 一个是在退出时 实际使用的时候, 可否应用为 比如在论坛中, 前一个将该用户加入在线列表, 后一个将该用户从在线列表删除 或者在聊天室中, 前一...
看到书里说
可以绑定两个事件到 session 中
一个是在创建时, 一个是在退出时
实际使用的时候, 可否应用为
比如在论坛中, 前一个将该用户加入在线列表, 后一个将该用户从在线列表删除
或者在聊天室中, 前一个开始计算点数, 后一个保存点数
是否可以这样用?
是否有不稳定的情况? ( 比如session非正常销毁 )
可以绑定两个事件到 session 中
一个是在创建时, 一个是在退出时
实际使用的时候, 可否应用为
比如在论坛中, 前一个将该用户加入在线列表, 后一个将该用户从在线列表删除
或者在聊天室中, 前一个开始计算点数, 后一个保存点数
是否可以这样用?
是否有不稳定的情况? ( 比如session非正常销毁 )
|
利用HttpSessionListener统计在线人数
转自JSPCHINA
JSP显示在线人数代码
/**
* 编写以下SessionCounter.java
* 并编译为SessiionCounter.class
* 然后放到你的网站的classpath的
* SessionCount(自己建立此目录)下面
*/
package SessionCount; import javax.servlet.*; import javax.servlet.http.*; public class SessionCounter implements HttpSessionListener { private static int activeSessions = 0; public void sessionCreated(HttpSessionEvent se) { activeSessions++; } public void sessionDestroyed(HttpSessionEvent se) { if(activeSessions > 0) activeSessions--; } public static int getActiveSessions() { return activeSessions; } }
接着建立online.jsp文件用于显示在线人数
在线:
然后需要在你的网站的WEB-INF中建立web.xml
文件内容如下:
SessionCount.SessionCounter
然后重新启动你的应用服务器,访问online.jsp检查是否显示正确。
你的问题和这个大同小异,原理相同,应用的是不同的监听器而已。
欢迎到www.javaresearch,org看看。
转自JSPCHINA
JSP显示在线人数代码
/**
* 编写以下SessionCounter.java
* 并编译为SessiionCounter.class
* 然后放到你的网站的classpath的
* SessionCount(自己建立此目录)下面
*/
package SessionCount; import javax.servlet.*; import javax.servlet.http.*; public class SessionCounter implements HttpSessionListener { private static int activeSessions = 0; public void sessionCreated(HttpSessionEvent se) { activeSessions++; } public void sessionDestroyed(HttpSessionEvent se) { if(activeSessions > 0) activeSessions--; } public static int getActiveSessions() { return activeSessions; } }
接着建立online.jsp文件用于显示在线人数
在线:
然后需要在你的网站的WEB-INF中建立web.xml
文件内容如下:
SessionCount.SessionCounter
然后重新启动你的应用服务器,访问online.jsp检查是否显示正确。
你的问题和这个大同小异,原理相同,应用的是不同的监听器而已。
欢迎到www.javaresearch,org看看。
|
session一般都是這樣用來保存用戶個人信息的.
如果用戶直接關閉瀏覽器,服務器是無法知道的,當會話超時(一般為30分鐘)會產生HttpSessionBindingEvent,使用public void valueBound(HttpSessionBindingEvent e)來捕獲此事件
如果用戶直接關閉瀏覽器,服務器是無法知道的,當會話超時(一般為30分鐘)會產生HttpSessionBindingEvent,使用public void valueBound(HttpSessionBindingEvent e)來捕獲此事件
|
你的这种用法不也是:一个是在创建时, 一个是在退出时吗?
|
sorry 創建時的方法是public void valueBound(HttpSessionBindingEvent e)
銷毀時的是public void valueUnbound(HttpSessionBindingEvent e)
銷毀時的是public void valueUnbound(HttpSessionBindingEvent e)
|
楼主可以在session中放入一个类的object来支持这些事件,比如论坛的问题,当某人登陆的时候,他session中的这个object的状态改变,该object的
|
listener可以听到这些事件。但好像实际中没有多少人这样用的。
|
可以放在一个全局变量中。如
class A {
static int i =0;
}
进行记数。
但是不能做到离开时去掉,因为session的异常销毁。
class A {
static int i =0;
}
进行记数。
但是不能做到离开时去掉,因为session的异常销毁。