Java如何计算在线用户数?
当您拥有一个Web应用程序时,您可能想知道当前有多少用户在线或已连接到您的网站。如果您访问过一些在线网络论坛,则可以看到;通常在首页上;他们的在线用户列表,或者可能只是当前在线用户的数量。
我们如何知道/计算当前有多少会话或用户连接到我们的网站。您是否想知道?让我们看看JavaServletAPI在此问题上为我们提供了什么。
ServletAPI具有一个接口javax.servlet.http.HttpSessionListener,该接口的实现将能够在创建或销毁新会话时随时由Servlet引擎通知。
该接口有两种方法可以实现:这些方法是sessionCreated(HttpSessionEventse)和sessionDestroyed(HttpSessionEventse)。这些方法将被称为分别创建一个新会话和该会话即将被销毁的通知。
现在,让我们创建会话监听器。下面的代码是我们的类将要实现的代码。
package org.nhooo.example.servlet;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import javax.servlet.http.HttpSession;
import java.util.List;
import java.util.ArrayList;
public class SessionCounter implements HttpSessionListener {
private List<String> sessions = new ArrayList<>();
public static final String COUNTER = "session-counter";
public void sessionCreated(HttpSessionEvent event) {
System.out.println("SessionCounter.sessionCreated");
HttpSession session = event.getSession();
sessions.add(session.getId());
session.setAttribute(SessionCounter.COUNTER, this);
}
public void sessionDestroyed(HttpSessionEvent event) {
System.out.println("SessionCounter.sessionDestroyed");
HttpSession session = event.getSession();
sessions.remove(session.getId());
session.setAttribute(SessionCounter.COUNTER, this);
}
public int getActiveSessionNumber() {
return sessions.size();
}
}为了显示当前在线用户的信息,我们需要创建一个简单的JSP页面。这个JSP文件将从HttpSession属性名为counter中获取联机用户的编号,这个属性是我们在上面的侦听器中设置的。
<%@ page import="org.nhooo.example.servlet.SessionCounter" %>
<html>
<head>
<title>Session Counter</title>
</head>
<body>
<%
SessionCounter counter = (SessionCounter) session.getAttribute(
SessionCounter.COUNTER);
%>
Number of online user(s): <%= counter.getActiveSessionNumber() %>
</body>
</html>让侦听器工作的最后一步是在web.xml文件中注册它。下面是如何在web.xml中注册侦听器的示例。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>Servlet Examples</display-name>
<listener>
<listener-class>
org.nhooo.example.servlet.SessionCounter
</listener-class>
</listener>
<session-config>
<session-timeout>1</session-timeout>
</session-config>
</web-app>热门推荐
10 八一幼儿祝福语大全简短
11 公司乔迁食堂祝福语简短
12 婚礼结束聚餐祝福语简短
13 儿媳买车妈妈祝福语简短
14 毕业送礼老师祝福语简短
15 同事辞职正常祝福语简短
16 恭贺新婚文案祝福语简短
17 金店立秋祝福语简短英文
18 婆婆高寿祝福语大全简短