在 javaweb 项目中,利用监听器,实现统计网站当前在线人数
1、新建一个实现 HttpSessionListener 接口的实现类 OnlineCountListener.java
package com.yuhuofei.javaweb.listener;import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;/*** @Description 定义一个监听器,统计网站在线人数,即统计session* @ClassName OnlineCountListener* @Author yuhuofei* @Date 2022/6/5 20:29* @Version 1.0*/
public class OnlineCountListener implements HttpSessionListener {//创建session监听,一旦创建session就触发一次这个事件@Overridepublic void sessionCreated(HttpSessionEvent se) {System.out.println(se.getSession().getId());ServletContext servletContext = se.getSession().getServletContext();Integer onlineCount = (Integer) servletContext.getAttribute("onlineCount");if (null == onlineCount) {onlineCount = 1;} else {onlineCount++;System.out.println("创建ssession后,onlineCount的值:" + onlineCount);}servletContext.setAttribute("onlineCount", onlineCount);}//销毁session监听,一旦销毁session就会触发一次这个事件@Overridepublic void sessionDestroyed(HttpSessionEvent se) {ServletContext servletContext = se.getSession().getServletContext();Integer onlineCount = (Integer) servletContext.getAttribute("onlineCount");if (1 == onlineCount) {onlineCount = 0;} else {onlineCount--;System.out.println("销毁ssession后,onlineCount的值:" + onlineCount);}servletContext.setAttribute("onlineCount", onlineCount);}
}
2、在 web.xml 文件中,增加监听器的配置
<!--注册监听器--><listener><listener-class>com.yuhuofei.javaweb.listener.OnlineCountListener</listener-class></listener><!--设置session为1分钟失效--><session-config><session-timeout>1</session-timeout></session-config>
3、修改 jsp 文件
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<h2>当前在线人数: <span><%=this.getServletConfig().getServletContext().getAttribute("onlineCount")%> </span></h2>
</body>
</html>
4、启动 tomcat 服务器,测试
在 Edge 浏览器中输入 http://localhost:8080/ ,得到的结果如下
在 Google 浏览器中输入 http://localhost:8080/ ,得到的结果如下
自动销毁 session 后,结果如下