我用代码教会你(三):Listener监听器实现在线用户统计

1.前言

当大家刚开始接触Java Web做项目时,掌握了Servlet后,也许对Listener监听器的作用,以及代码编写并未能很好的掌握。本文通过实现在线用户统计以及在线用户列表的代码实操,让大家通过实际操作理解并能使用Listener监听器。

2.业务场景

你是否想在项目中显示一个在线人数而无从下手???
你是否想在自己的平台上查看当前登录的用户列表???
本文通过JSP+Servlet+监听器Listener为你实现,花5分钟一起来看看吧。

3.效果展示

打开不同的浏览器进行登录。可以看到当前登录的人数以及用户列表。
在这里插入图片描述
当用户退出时,则注销当前用户。并且看到在线用户数量-1,以及用户列表也减少该用户。
在这里插入图片描述

4.代码实现

4.1 项目结构

在这里插入图片描述

4.2 页面准备

4.2.1 主页(index.jsp)

index.jsp用于显示当前登录用户(用户存在Session中),以及显示登录人数与登录用户的列表记录。还有login.jsp与register.jsp页面的跳转。由于登录用户的数据时存储在application域中的,因此需要在index.jsp中先注册,再登录。则可以看到用户登录列表。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<html>
  <head>
    <title>主页</title>
  </head>
  <body>
  <h1>welcome to index.jsp!</h1>
  <c:if test="${session_user!=null}">
    欢迎您,${
   session_user.userName}
    <a href="loginOut">退出</a>
    <a href="">用户列表</a>
  </c:if>
  <c:if test="${session_user==null}">
    <a href="login.jsp">登录</a>
    <a href="register.jsp">注册</a>
  </c:if>
<a href="index.jsp">主页</a>
  <span style="color: red">${
   tip}</span>
  <hr/>
  <h3>在线用户</h3>
  当前在线用户人数:[${
   fn:length(onlineUser)}]<br/>
  用户列表:<br/>
  <c:forEach items="${onlineUser}" var="user"  varStatus="u">[${
   u.index+1}]位,在线[${
   user}]用户。<br/>
  </c:forEach>
  </body>
</html>

4.2.2 登录页(login.jsp)

PS:登录前,请先去register.jsp中注册用户。此处没有连接数据库,数据存储在缓存中。因此需要先注册,才能进行登录。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
  • 7
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
实现在线用户统计,可以使用Listener监听器来监控用户的会话(session)状态。具体实现步骤如下: 1. 创建一个实现了HttpSessionListener接口的监听器类,例如OnlineUserListener。 2. 在该类中实现sessionCreated方法和sessionDestroyed方法。 3. 在sessionCreated方法中,获取当前创建的会话(session),并将该会话添加到一个集合中,表示该用户已经在线。 4. 在sessionDestroyed方法中,获取当前销毁的会话(session),并将该会话从集合中移除,表示该用户已经下线。 5. 在web.xml中配置该监听器。 6. 在需要统计在线用户数的地方,可以通过访问OnlineUserListener中的集合来获取在线用户数。 示例代码: // OnlineUserListener.java import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; import java.util.ArrayList; import java.util.List; public class OnlineUserListener implements HttpSessionListener { // 存储在线用户的集合 private static List<HttpSession> sessions = new ArrayList<HttpSession>(); // session创建时调用 public void sessionCreated(HttpSessionEvent se) { // 将创建的session添加到集合中 HttpSession session = se.getSession(); sessions.add(session); } // session销毁时调用 public void sessionDestroyed(HttpSessionEvent se) { // 将销毁的session从集合中移除 HttpSession session = se.getSession(); sessions.remove(session); } // 获取在线用户数 public static int getOnlineUserCount() { return sessions.size(); } } // web.xml中配置OnlineUserListener <listener> <listener-class>OnlineUserListener</listener-class> </listener> // 在需要统计在线用户数的地方调用OnlineUserListener.getOnlineUserCount()方法 int onlineUserCount = OnlineUserListener.getOnlineUserCount();

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瓜仙人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值