栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Javaweb Listener监听器的简单应用:统计网站在线人数

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Javaweb Listener监听器的简单应用:统计网站在线人数

Listener监听器实现统计网站在线人数

开发环境: IntelliJ IDEA

一、什么是监听器

是指专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生变化时,立即采取相应的行动。

具体参考下文:
Java监听器详解

二、创建并配置监听器

1.首先创建一个空的maven项目,在pom.xml配置文件中导入下面这几个包:


        
            javax.servlet
            servlet-api
            2.5
        

        
            javax.servlet.jsp
            jsp-api
            2.1
        

        
            javax.servlet.jsp.jstl
            jstl-api
            1.2
        

        
            taglibs
            standard
            1.1.2
        


        
        
            mysql
            mysql-connector-java
            5.1.47
        

maven的一个优点:自动帮你从网上下载你需要的jar包

这几个包可能在本篇博客中不会有什么关联,但它们是javaweb项目中经常使用到的jar包

2.在src/java目录下创建包和类(自行命名),比如我的命名是:

包:cn.edu.xit.listener
类:OnlineCountListener

OnlineCountListener这个类就是监听器

package cn.edu.xit.listener;

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

//统计网站在线人数:统计session
public class OnlineCountListener implements HttpSessionListener {
    //创建session监听: 看你的一举一动
    //一旦创建一个session,就会触发一次这个
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
        //要想统计session,作用域要提到最高
        ServletContext servletContext = httpSessionEvent.getSession().getServletContext();
        System.out.println(httpSessionEvent.getSession().getId());
        Integer onlinecount= (Integer) servletContext.getAttribute("OnlineCount");

        if(onlinecount==null){
            onlinecount = new Integer(1); //用int也行,这里用的是封装整型类的操作,等价于onlinecount = 1;
        }else{
            int count = onlinecount.intValue();
            onlinecount = new Integer(count+1); //等价于 onlinecount += 1;
        }
        //每次都在更新自己,有累加
        servletContext.setAttribute("OnlineCount", onlinecount);
    }
    //销毁session监听
    //一旦session销毁,就会触发
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        ServletContext servletContext = httpSessionEvent.getSession().getServletContext();
        Integer onlinecount= (Integer) servletContext.getAttribute("OnlineCount");

        if(onlinecount==null){
            onlinecount = new Integer(0);
        }else{
            int count = onlinecount.intValue();
            onlinecount = new Integer(count-1);
        }
        //每次都在更新自己,有累加
        servletContext.setAttribute("OnlineCount", onlinecount);

    }
}

  1. 在web.xml中配置监听器
 
    
        cn.edu.xit.listener.OnlineCountListener
    

  

三、观察访问网站的id

上面这些操作都完成之后,就可以在jsp里面测试了。

这里注意,在创建空的maven项目的时候可能会没有webapp文件夹,所以可以右击项目,点击Add FrameWork Support,选择Web Application,就可以创建web文件夹。

把maven自带的index.jsp稍加修改

<%--
  Created by IntelliJ IDEA.
  User: 86152
  Date: 2022/4/28
  Time: 12:23
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

  
    $Title$
  
  

当前有 <%=this.getServletConfig().getServletContext().getAttribute("OnlineCount")%>人在线

jsp写完之后,就可以启动tomcat测试了。

我们来看测试结果:

测试结果显示此网站有2人在线,这是为什么呢?
我们来看看这2个“人”的id


在页面控制台这里看到的只有一个id,那么另一个id是怎么来的?

因为服务器在访问网站的时候,一般会进行不止一次的连接才能访问成功,所以才会出现有多个id的情况。当我们让tomcat重新发布项目的时候,这个无用的id就会消失了。

然后这个时候我们用不同的客户端(浏览器)访问这个网站试试

我分别用了Microsoft Edge和FireFox两个浏览器来访问网站,观察到,人数在递增,id也不一样。

最后看一下后端控制台


这里我们可以看到,那个没用的id被记录下来了:

7F9E3977763B5B0E328283480B3B7D75

按我这个情况,可以解读为:第一个id尝试连接网站,但是失败,直到第二个id访问的时候才成功。

以上的来源是学习狂神说Java的视频:

【狂神说Java】JavaWeb入门到实战


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/841692.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号