`
shiwj1010
  • 浏览: 97315 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Tomcat,HttpSessionListener的使用

    博客分类:
  • j2ee
阅读更多
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
	xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  
  	<listener>
  		<listener-class>util.HttpSessionListenerDemo</listener-class>
  	</listener>
...


OnlineCounter.java
public class OnlineCounter implements Serializable 
{
	private static int online = 0; 
	
	// ** get
	public static int getOnline()
	{ 
		return online; 
	}
	
	public static void raise()
	{ 
		online++; 
	}
	
	public static void reduce()
	{ 
		online--;
		if(online < 0)
		{ 
			online = 0; 
		} 		
		 
	} 

}


HttpSessionListenerDemo.java
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

import org.apache.log4j.Logger;

public class HttpSessionListenerDemo implements HttpSessionListener {

	static Logger log = Logger.getLogger("blogjavabean");
	
	public void sessionCreated(HttpSessionEvent arg0) {
		// TODO Auto-generated method stub
		OnlineCounter.raise();
		log.debug("HttpSessionListenerDemo current position >> 【sessionCreated】() 执行了!!");
	}

	public void sessionDestroyed(HttpSessionEvent arg0) {
		// TODO Auto-generated method stub
		OnlineCounter.reduce();
		log.debug("HttpSessionListenerDemo current position >> 【sessionDestroyed】() 执行了!!");
	}

}
分享到:
评论
4 楼 shiwj1010 2009-05-12  
我不知道我对你的这个问题的理解是不是正确,我就这么说吧,当启动一个浏览器,链接你的网站,那么服务器就为这个链接new 一个session,这个时候执行HttpSessionListener接口的public void sessionCreated(HttpSessionEvent arg0)这个方法。而不是当你向session中setAttribute的时候执行这个方法,应该是这样的吧。

如果你想想你那样做的话,servlet api中好像想还有一个接口HttpSessionBindingListener,是当绑定一个对象给session的时候,执行那个接口的方法。

还有这个HttpSessionAttributeListener接口:This listener interface can be implemented in order to get notifications of changes to the attribute lists of sessions within this web application.
3 楼 MyDicta 2009-05-12  
shiwj1010 写道

差不多吧,只要在jsp页面中,导入相关类,因为OnlineCounter中的都是静态方法,所以直接用就可以了。



大哥,还有个问题, 如果一个用户登录系统以后,他还访问了其它一个也是保存在Session中的资源,那么Session的创建又被触发一次,比如:

session.setAttribute("user",user_name); //这个是登录
session.setAttribute("else",else); //这个是其它资源

那这个在线人数统计又会增加一次没??
2 楼 shiwj1010 2009-05-11  
差不多吧,只要在jsp页面中,导入相关类,因为OnlineCounter中的都是静态方法,所以直接用就可以了。
1 楼 MyDicta 2009-05-11  
这个计数,要在界面上显示输出,是不是直接调用OnlineCounter 类中的getOnline()方法?

相关推荐

Global site tag (gtag.js) - Google Analytics