Servlet的监听器实现在线人数统计
目录
一 开发步骤
二 实战
三 测试
一 开发步骤
1 编写监听器
2 注册监听器
二 实战
1 监听器编写
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/**
* @ClassName: OnlineCount
* @Description: 在线人数监听
* @Date: 2020/6/15
* @Author: cakin
*/
public class OnlineCount implements HttpSessionListener {
/**
* 功能描述:会话创建时刻进行监听
*
* @param se 会话事件
* @author cakin
* @date 2020/6/15
* @description: 创建一个会话时,在线人数加1
*/
public void sessionCreated(HttpSessionEvent se) {
ServletContext servletContext = se.getSession().getServletContext();
Integer onlineCount = (Integer) servletContext.getAttribute("onlineCount");
System.out.println("增加一个session");
if (onlineCount == null) {
onlineCount = 1;
} else {
int count = onlineCount.intValue();
onlineCount = ++count;
}
servletContext.setAttribute("onlineCount", onlineCount);
}
/**
* 功能描述:会话销毁时刻进行监听
*
* @param se 会话事件
* @author cakin
* @date 2020/6/15
* @description: 销毁会话时,在线人数建1
*/
public void sessionDestroyed(HttpSessionEvent se) {
ServletContext servletContext = se.getSession().getServletContext();
System.out.println("减少一个session");
Integer onlineCount = (Integer) servletContext.getAttribute("onlineCount");
if (onlineCount == null) {
onlineCount = 0;
} else {
int count = onlineCount.intValue();
onlineCount = --count;
}
servletContext.setAttribute("onlineCount", onlineCount);
}
}
2 注册监听器
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--监听器所在的类-->
<listener>
<listener-class>OnlineCount</listener-class>
</listener>
<!--超时时间为1分钟-->
<session-config>
<session-timeout>1</session-timeout>
</session-config>
</web-app>
3 JSP页面测试
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<h1>当前在线人数为<%=this.getServletConfig().getServletContext().getAttribute("onlineCount")%></h1>
</body>
</html>
还没有评论,来说两句吧...