简单版 -- 通过Session统计用户对某一JSP页面的在线人数

Posted 霜序0.2℃

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单版 -- 通过Session统计用户对某一JSP页面的在线人数相关的知识,希望对你有一定的参考价值。

想法

既然需要监听session
我们就需要监听器,我们就需要自定义实现HttpSessionListener接口

然后我们定义一个用来存在线人数的类OnlineCount,变量为静态方法也为静态

实现HttpSessionListener接口的TestSessionListener重写了sessionCreatedsessionDestroyed方法,这两个方法分别是在session创建和销毁时执行,所以我们每次在运行方法时调整OnlineCount中变量,然后写一个jsp界面专门让这个变量输出即可

最后记得,要在web.xml里面注册一下监听器

如果看到启动tomcat却出现两个session,是因为IDEA它也会链接一个session

然后我还弄了一个网站自动刷新的东西


OnlineCount

package top.sehnsucht;

/**
 * @Description:
 * @Author: Cai
 * @CreateTime: 2021/9/26
 * ~~(^_^)~~
 */
public class OnlineCount {
    private static Integer onlineNum = 0;

    public static void add() {
        onlineNum++;
        System.out.println("add");
        System.out.println(onlineNum);
    }

    public static void delete() {
        onlineNum--;
        System.out.println("delete");
        System.out.println(onlineNum);
    }

    public static Integer getOnlineNum() {
        return onlineNum;
    }

}

TestSessionListener

package top.sehnsucht;

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

/**
 * @Description:
 * @Author: Cai
 * @CreateTime: 2021/9/26
 * ~~(^_^)~~
 */

public class TestSessionListener implements HttpSessionListener {
    @Override
    public void sessionCreated(HttpSessionEvent se) {
        OnlineCount.add();
        se.getSession().setMaxInactiveInterval(1000);//秒为单位
        HttpSessionListener.super.sessionCreated(se);
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        OnlineCount.delete();
        HttpSessionListener.super.sessionDestroyed(se);
    }
}

showOnlineNum.jsp

<%@ page import="top.sehnsucht.OnlineCount" %><%--
  Created by IntelliJ IDEA.
  User: windows
  Date: 2021/9/26
  Time: 16:39
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    out.println("现在在线人数是" + OnlineCount.getOnlineNum());
    response.setHeader("refresh", "3");
%>
</body>
</html>

web.xml

<!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 version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

  <display-name>Archetype Created Web Application</display-name>
  <servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>top.sehnsucht.HelloServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>

  <servlet>
    <servlet-name>loginTime</servlet-name>
    <servlet-class>top.sehnsucht.CookieLoginTime</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>loginTime</servlet-name>
    <url-pattern>/time</url-pattern>
  </servlet-mapping>

  <listener>
    <listener-class>top.sehnsucht.TestSessionListener</listener-class>
  </listener>

</web-app>

参考:
https://blog.csdn.net/gsjwxhn/article/details/90707571
https://blog.csdn.net/weixin_40747272/article/details/79655775
https://blog.csdn.net/lovexuwenhao/article/details/83395642?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_title~default-1.no_search_link&spm=1001.2101.3001.4242


感谢参与测试的cjb,lxl,ly,ljl

以上是关于简单版 -- 通过Session统计用户对某一JSP页面的在线人数的主要内容,如果未能解决你的问题,请参考以下文章

2017/3/21 morning

数据仓库 用户活跃主题

用spss分析几个因素对某一因素的影响,用啥研究方法。

mysql统计函数

协同过滤算法

php中如何统计用户在线时长