对于 session 绑定事件的使用
看到书里说
可以绑定两个事件到 session 中
一个是在创建时, 一个是在退出时
实际使用的时候, 可否应用为
比如在论坛中, 前一个将该用户加入在线列表, 后一个将该用户从在线列表删除
或者在聊天室中, 前一个开始计算点数, 后一个保存点数
是否可以这样用?
是否有不稳定的情况? ( 比如session非正常销毁 )
问题点数:100、回复次数:8Top
1 楼flyxxxxx()回复于 2002-06-12 08:59:54 得分 10
session一般都是這樣用來保存用戶個人信息的.
如果用戶直接關閉瀏覽器,服務器是無法知道的,當會話超時(一般為30分鐘)會產生HttpSessionBindingEvent,使用public void valueBound(HttpSessionBindingEvent e)來捕獲此事件Top
2 楼hymmyh(羽)回复于 2002-06-12 09:03:10 得分 10
你的这种用法不也是:一个是在创建时, 一个是在退出时吗?Top
3 楼flyxxxxx()回复于 2002-06-12 09:15:12 得分 10
sorry 創建時的方法是public void valueBound(HttpSessionBindingEvent e)
銷毀時的是public void valueUnbound(HttpSessionBindingEvent e)Top
4 楼cherami(cherami)回复于 2002-06-12 09:18:47 得分 40
利用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
文件内容如下:
<!-- Web.xml --> <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/j2ee/dtds/web-app_2.3.dtd"> <web-app> <!-- Listeners --> <listener> <listener-class> SessionCount.SessionCounter </listener-class> </listener> </web-app>
然后重新启动你的应用服务器,访问online.jsp检查是否显示正确。
你的问题和这个大同小异,原理相同,应用的是不同的监听器而已。
欢迎到www.javaresearch,org看看。Top
5 楼nielinjie(学当活雷锋ing)回复于 2002-06-12 09:19:32 得分 10
楼主可以在session中放入一个类的object来支持这些事件,比如论坛的问题,当某人登陆的时候,他session中的这个object的状态改变,该object的Top
6 楼nielinjie(学当活雷锋ing)回复于 2002-06-12 09:20:45 得分 10
listener可以听到这些事件。但好像实际中没有多少人这样用的。Top
7 楼lvxing(旅行)回复于 2002-06-12 10:22:25 得分 0
那可以问问实际中如何使用么?
我只想知道一般情况是如何实现比如在线统计的 ( 不要告诉我放到数据库里, 呵呵 )
等下我一起给分Top
8 楼yanyanEM(井井井)回复于 2002-06-12 10:34:09 得分 10
可以放在一个全局变量中。如
class A {
static int i =0;
}
进行记数。
但是不能做到离开时去掉,因为session的异常销毁。Top




