【监听器篇】4.统计当前在线的用户人数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36631076/article/details/80320746

1.工程说明

a.要求:使用监听器统计在线用户及人数

b.思考:想要统计当前网站上在线的人数,应该通过哪一种方法去实现呢?
      request是一次请求
      application是随整个服务器生而生,亡而亡

      session是一次会话

由上可见,session跟适合用来统计当前的在线用户

我们都知道当用户打开一个页面的时候,服务器就会创建一个session,当用户彻底关闭页面的时候msession就会被销毁.

因此,要统计当前的的在线用户即是写一个session创建销毁的监听器:session被创建就是一个用户来了,session被销毁即是一个用户离开了。所以,用session的创建销毁监听器来统计再适合不过了。

  ok,思路屡清楚了,接下来就撸起袖子干起来。

附上工程的下载地址

2.创建并注册监听器

package listener;

import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
@WebListener
public class MySessionListener implements HttpSessionListener {

	//统计在线人数的变量
	private int onlineNumber;
	
	@Override
	public void sessionCreated(HttpSessionEvent arg0) {
		onlineNumber++;
		arg0.getSession().getServletContext().setAttribute("OnlinePeople", onlineNumber);
	}

	@Override
	public void sessionDestroyed(HttpSessionEvent arg0) {
		onlineNumber--;
		arg0.getSession().getServletContext().setAttribute("OnlinePeople", onlineNumber);
	}

}

3.index.jsp显示当前的用户人数

<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  
  <body>
   <center>
   	<h2>我是一个长的不咋样的主页面</h2>
   	<hr>
   	<h4>当前在线的用户人数: ${OnlinePeople }</h4>
   </center>
  </body>
</html>

4.运行结果


使用另一个浏览器打开,可以看见:


但是为什么我们关闭浏览器的时候,这个在线用户人数不会减少呢?是因为session的生命周期决定的,我们没有去定义session的什么周期的时间,所以session销毁会默认到session过期才销毁的。

  好啦,以上是通过监听session创建和销毁来实现一个在线人数的统计效果。

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页