Session实现网站在线人数统计

Session统计网站在线人数


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

  2.用监听器带的对象se获取Session对象并且将获取的对象提高作用域至域对象(ServletContext上下文对象,最顶级对象)。
Session实现网站在线人数统计_第2张图片

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

  3.简洁逻辑概述
Session实现网站在线人数统计_第3张图片


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

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

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



   5.重要一步需要给Index.jsp中添加JSP语句
(1)用图片可以更详细的列出
Session实现网站在线人数统计_第4张图片




6.打开浏览器
结果发现显示的是俩个人,那是因为我们使用Tomcat创建的时候会自动生成Session。
Session实现网站在线人数统计_第5张图片

我们这边可以加代码手动测一下 到底加了多少的Session
Session实现网站在线人数统计_第6张图片
Session实现网站在线人数统计_第7张图片
通过Servlet控制台我们可以看见 tomcat再创建的时候自动生成了一个session

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

Session实现网站在线人数统计_第8张图片
Session实现网站在线人数统计_第9张图片

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>Titletitle>
head>
<body>
<h2>当前访问<span><%=this.getServletConfig().getServletContext().getAttribute("Online")%>span>h2>
body>
html>

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

你可能感兴趣的:(Javaweb,java,jsp,servlet,session,web)