J2EE/JAVA——使用监听器完成统计在线人数业务

1.什么是监听器

         在java企业级开发中,监听器简单来说就是根据监听的对象的变化,做出相应的行动。在java的监听器只能够,它可以监听客户端、服务端的请求,监听的对象包括ServletContext,HttpSession,ServletRequest三个对象,三个对象对应的域是application,session,request。当这些域的对象创建和销毁时都会引起监听器做出相应的反应。

2.统计在线人数业务的原理

        统计在线人数,就需要使用到监听器来监听session对象的创建于销毁,之所以选择监听session对象,是因为sessio对象是由服务器自动创建的与用户相关的对象。服务器都会为每一个访问的用户都生成一个session对象来保存用户的信息。所以每创建一个session对象就可以视为一位用户在线。

        所以,在代码实现上,每一次有session被创建时,在线人数+1。每一次有session被销毁时,在线人数-1。同理我们可以得出如果session被销毁时不做处理,那么统计在线人数业务就会变成统计历史访问人数。

3.实例演示

        下面是一个使用监听器实现简单统计在线人数业务的源代码:
监听器源码:

public class OnlineListener implements HttpSessionListener {
	
	// 用于统计在线人数
	private int count = 0;

	/**
	 *	<li> 随用户数增加而增加
	 */
	public void sessionCreated(HttpSessionEvent hse) {
		
		// session对象创建时count变量加1
		count++;
		// 获取容器上下文对象
		ServletContext context = hse.getSession().getServletContext();
		// 重置计数器值
		context.setAttribute("count", new Integer(count));
	}

	/**
	 * <li> 随用户减少而减少
	 */
	public void sessionDestroyed(HttpSessionEvent hse) {
		// session对象销毁时count变量减1
		count--;
		ServletContext context = hse.getSession().getServletContext();
		context.setAttribute("count", new Integer(count));
	}
}

统计在线人数的页面jsp源码:

<%@ page language="java" contentType="text/html; charset=utf-8"  
pageEncoding="utf-8"%>
<html>
<head>
<title>首页-直接显示在线人数</title>
</head>
<body>
	<h3>
		当前在线人数为:
		<%=application.getAttribute("count")%>
	</h3>
	<!-- 
		当客户端浏览器中禁止 Cookie,Servlet 容器无法从客户端浏览器中
		取得作为 Cookie 的 Session ID,
		也就无法跟踪客户状态。 
    	Java Servlet API 中提出了跟踪 Session 的另一种机制,
    	如果客户端浏览器不支持 Cookie,Servlet 容器可以重写客户请求的 URL,
    	把 Session ID 添加到 URL 信息中。 
     -->
	<!-- 客户端直接点击链接跳转 HttpServletResponse 接口提供了重写 URL 的方法 -->
	<a href="<%=response.encodeUrl("logout.jsp")%>">退出登录</a>
</body>
</html>

 登出页面源码:

<%@ page language="java" contentType="text/html; charset=utf-8"
 pageEncoding="utf-8"%>
<html>
<head>
<title>注销页面</title>
</head>
<body>
	<!-- 直接让用户的session失效即可完成业务注销动作 -->
	<%session.invalidate();%>
	<h3>您已退出本系统</h3>
</body>
</html>

下面是运行效果:

在不同三个浏览器中打开该页面,可以看到当前在线人数不断增加。

 

 

 

 现在将其他两个浏览器退出登录,现在再看当前在线人数就会减少到1。

 

 

另外,如果我们将监听器中的监听session域销毁的部分注释掉,那么此时的统计在线人数业务就变成了统计历史访问人数的业务。

 我们再次运行,就在同一个浏览器中不断退出登录,可以看见在线人数不断增加。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值