Session实现网站在线人数统计

Session统计网站在线人数


模仿一个B站左下角的人数在线统计:
1.实现一个Session监听器的接口,里面重写了俩个方法,一个是获取Session的方法,一个是销毁Session的方法。
在这里插入图片描述

  2.用监听器带的对象se获取Session对象并且将获取的对象提高作用域至域对象(ServletContext上下文对象,最顶级对象)。
在这里插入图片描述

这边作为扩展我们来回顾一些Servlet中这个最高作用域ServletContext。 是一个域对象, 域对象是服务器在内存上创建的存储空间,用于在不同动态资源(servlet)之间传递与共享数据。
servletContext存储数据特点,全局共享,里面的数据所有动态资源都可以写入和获取 服务器启动的时候创建,服务器关闭的时候销毁,因为这是全局应用程序对象,全局共享对象。 所以因为不属于任何一个servlet,但是所有的servlet都可以通过servletContext读取这个数据.(重要)

  3.简洁逻辑概述
在这里插入图片描述


   4.我们需要取XML中配置监听

<listener>
  <listener-class>com.xs.Filter.SessionOnline</listener-class>
</listener>//只需要再web.xml下添加即可

  因为设置的是Session监听所以用户访问的时候就已经触发了监听。



   5.重要一步需要给Index.jsp中添加JSP语句
(1)用图片可以更详细的列出
在这里插入图片描述




6.打开浏览器
结果发现显示的是俩个人,那是因为我们使用Tomcat创建的时候会自动生成Session。
在这里插入图片描述

我们这边可以加代码手动测一下 到底加了多少的Session
在这里插入图片描述
在这里插入图片描述
通过Servlet控制台我们可以看见 tomcat再创建的时候自动生成了一个session

解决办法
点击上面的刷新服务器 选择上面的Redplay即可。跑完刷新页面就显示一个人了。

这里是引用
在这里插入图片描述

7.一个bug 其实换个服务器就可以解决

8.结尾处送上所有源码

package com.xs.Filter;

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

public class SessionOnline implements HttpSessionListener {
    @Override
    //获取session的方法
    public void sessionCreated(HttpSessionEvent se) {
        ServletContext servletContext = se.getSession().getServletContext();
        String id = se.getSession().getId();
        System.out.println(id);
        Integer online = (Integer) servletContext.getAttribute("Online");//将Online这个键对应的值变成Integer类型
        /* 用一个if判断 */
        if(online==null){//如果这个键对应的值不存在的时候 就是这个Session不存在的时候 我们创建为这个键创建一个值
            online=new Integer(1);//运用封装类的知识
        }else{//如果网站中存在了用户Session不为空
            int count =online.intValue();//创建一个变量保存Session
            online=new Integer(count+1);//如果存在了使这个Session加一
        }
        servletContext.setAttribute("Online",online);//将键值对赋值


    }

    @Override
    //销毁一个session的方法
    public void sessionDestroyed(HttpSessionEvent se) {

    }
}



jsp文件:


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h2>当前访问<span><%=this.getServletConfig().getServletContext().getAttribute("Online")%></span></h2>
</body>
</html>

!最后大家别忘了要在web.xml添加监听

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值