Spring Boot监听器记录网站访问人数

news/2024/5/13 0:24:41/文章来源:https://blog.csdn.net/qq_35526165/article/details/109791996

一、场景

使用Spring Boot框架,通过监听器记录网站访问人数和网站访问量。

二、实现

1.通过监听器创建存储访问信息的初始化变量

@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {logger.info("ServletContext上下文初始化");servletContextEvent.getServletContext().setAttribute("count",new HashMap<>());
}

2.通过过滤器获取自定义的初始化变量,并存入请求信息(包括请求路径和IP地址)

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {logger.info("doFilter方法执行了");HttpServletRequest request = (HttpServletRequest) servletRequest;if (count.containsKey(servletRequest.getRemoteAddr())) {List<StringBuffer> user_urls =(ArrayList) count.get(servletRequest.getRemoteAddr());user_urls.add(request.getRequestURL());count.put(servletRequest.getRemoteAddr(),user_urls);} else {List<StringBuffer> user_urls = new ArrayList<>();user_urls.add(request.getRequestURL());count.put(servletRequest.getRemoteAddr(),user_urls);}logger.info("访问人数:"+count.entrySet().size());
}

3.打印访问人数和访问量

@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {logger.info("ServletContext上下文初销毁");Map<String,Object> count =(Map<String, Object>) servletContextEvent.getServletContext().getAttribute("count");logger.info("访问人数:"+count.entrySet().size());Integer num = 0;for (Map.Entry<String, Object> item:count.entrySet()) {List<StringBuffer> list =(ArrayList) item.getValue();num += list.size();}logger.info("访问量:"+num);
}

4.完整代码

监听器

package com.example.hw3.listener;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletRequest;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@WebListener
public class CommonListener implements ServletContextListener {private Logger logger = LoggerFactory.getLogger(this.getClass());@Overridepublic void contextInitialized(ServletContextEvent servletContextEvent) {logger.info("ServletContext上下文初始化");servletContextEvent.getServletContext().setAttribute("count",new HashMap<>());}@Overridepublic void contextDestroyed(ServletContextEvent servletContextEvent) {logger.info("ServletContext上下文初销毁");Map<String,Object> count =(Map<String, Object>) servletContextEvent.getServletContext().getAttribute("count");logger.info("访问人数:"+count.entrySet().size());Integer num = 0;for (Map.Entry<String, Object> item:count.entrySet()) {List<StringBuffer> list =(ArrayList) item.getValue();num += list.size();}logger.info("访问量:"+num);}
}

过滤器

package com.example.hw3.filter;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;import javax.annotation.Resource;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;@WebFilter(filterName = "commonFilter",urlPatterns = "/*")
public class CommonFilter implements Filter {private Logger logger = LoggerFactory.getLogger(this.getClass());private Map<Object,Object> count;@Overridepublic void init(FilterConfig filterConfig) throws ServletException {logger.info("init方法执行了");count = (Map<Object, Object>) filterConfig.getServletContext().getAttribute("count");}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {logger.info("doFilter方法执行了");HttpServletRequest request = (HttpServletRequest) servletRequest;if (count.containsKey(servletRequest.getRemoteAddr())) {List<StringBuffer> user_urls =(ArrayList) count.get(servletRequest.getRemoteAddr());user_urls.add(request.getRequestURL());count.put(servletRequest.getRemoteAddr(),user_urls);} else {List<StringBuffer> user_urls = new ArrayList<>();user_urls.add(request.getRequestURL());count.put(servletRequest.getRemoteAddr(),user_urls);}logger.info("访问人数:"+count.entrySet().size());}@Overridepublic void destroy() {logger.info("destroy方法执行了");}
}

三、测试

多次访问服务器地址
在这里插入图片描述
关闭项目可查看访问人数和访问量
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_885398.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nginx网站优化提速工具ngx_pagespeed进入beta阶段

Page Speed是谷歌提供的一个Web优化工具&#xff0c;它可以对网站的Web服务器配置和前端代码执行若干测试&#xff0c;并提供优化建议。 在此工具的基础上&#xff0c;谷歌针对Apache、nginx服务器提供了一个傻瓜式的优化工具mod_pagespeed、 ngx_pagespeed&#xff0c;这些工…

纯css 应用使得网站各个模块切换 平滑过渡

首先创建一个百分百的 layout 然后创建各个panel layout 然后应用按钮加上平滑过渡效果 这样会使得网页更加丰富生动 <div class"st-container"><input type"radio" name"radio-set" checked"checked" id"st-control-1&…

推荐一款神器,桌面远程调试IOS网站的工具 很好很强大 支持国产!

MIHTool 是前端工程师在iOS设备上调试和优化页面的得力助手. 首先app Store下载 MIHTOOL。 然后安装后地址栏打开所需要调试的网站&#xff0c;然后会弹出本地使用的ip地址 类似这样的 http://192.168.1.165:1630/devtool/client/#leZV6e 然后&#xff0c;出现如下界面就等于就…

利用代理页面解决html iframe跨域访问网站问题

转自&#xff1a;http://www.zuidaima.com/share/1854884509142016.htm 在做项目的时候遇到跨域问题&#xff0c;经过自己的一番摸索终于找到一种解决iframe跨域问题的方案&#xff0c;或许很多人也会遇到这样头疼的问题&#xff0c;希望能尽自己绵薄之力帮助大家。如果不清楚或…

web安全/渗透测试(四):收集目标网站信息的网站

一、http://whois.domaintools.com/ 查找目标网站所有者的信息 二、https://sitereport.netcraft.com/?url site report入口输入目标网站地址 查找目标网站使用的技术&#xff0c;包括服务器的技术和客户端的技术 三、https://www.robtex.com/ 查找关于目标网站的DNS信…

第一篇——胡咧咧之动漫素材如何最有效最快的查找下载,动漫网站有哪些?

第一篇——胡咧咧之动漫素材如何最有效最快的查找下载&#xff0c;动漫网站有哪些&#xff1f; 大家好&#xff0c;我是祥小和&#xff0c;喜欢我的可以点赞收藏&#xff0c;让我去吃灰了&#xff0c;鼓掌。。。 我之所以写博客&#xff0c;是因为我记性不太好&#xff0c;难…

【笔记1】chrome网站技术分析插件:Wappalyzer

1、下载&#xff1a; 插件下载地址&#xff1a;https://chrome.zzzmh.cn/info?tokengppongmhjkpfnbhagpmjfkannfbllamg 2、安装&#xff1a; chorme中打开&#xff1a;chrome://extensions/ 可以把下载的.crx文件拖到浏览器中安装 也可以手动导入插件 3、使用&#xff1a; 在…

Python学习笔记 - 使用django的内置功能开发网站(详细)

Python学习笔记 - 使用django的内置功能开发网站&#xff08;详细&#xff09; Part 1 | 基本操作 安装django模块 django是第三方模块&#xff0c;因此需要下载。这里介绍2种下载方式。 使用PyCharm下载django 打开PyCharm&#xff0c;在菜单栏中找到: File > Setting…

Python学习笔记 - 使用django模块开发网站(较详细)

注&#xff1a;我上次的django开发教程&#xff1a;点击这里 Python学习笔记 - 使用django模块开发网站(较详细) 下载 & 安装django django是Python的第三方模块&#xff0c;需要下载安装。使用pip安装django非常简易1。 pip install django新建项目 cmd窗口输入命令:…

中医自学平台---前端网站

使用开源的框架vue-admin-template&#xff08;https://github.com/PanJiaChen/vue-admin-template&#xff09;。 这个需要提前安装node。 可以用nvm来管理和安装node。 然后设nvm的镜像源&#xff1a; nvm node_mirror https://npm.taobao.org/mirrors/node/ nvm npm_mir…

Web开发人员应当收藏的10个网站

Web开发人员应当收藏的10个网站 互联网上有数百万的网站可以提供服务&#xff0c;其中只有一些对Web开发员来说是极为有效的工具。在本文中&#xff0c;Jean-Baptiste Jung整理出了10个极有用的网站&#xff0c;绝对值得Web开发者收藏到书签中。 1. Mysql Format Date 通过MySQ…

实战--Scrapy框架爬去网站信息

Scrapy的框架图 一、使用Strapy抓取网站一共需要四个步骤&#xff1a; (1)创建一个Scrapy项目&#xff1b; (2)定义Item容器&#xff1b; Item是保存爬取到的数据的容器&#xff0c;其使用方法和python字典类似&#xff0c;并且提供了额外保护机制来i避免拼写错误导致的未定义…

最新手写图片爬虫(针对千库网和一个福利网站)

前言&#xff1a;由于前一段时期需要从网站上扒一些图片下来&#xff0c;因为css&#xff0c;js都好扒&#xff0c;就是图片数量众多&#xff0c;需要代码实现&#xff0c;在网上找了一堆以实现的代码&#xff0c;要么没有用&#xff0c;要么功能不是自己想要的&#xff0c;干脆…

.Net修改网站项目调试时的虚拟目录

有些项目需要在IIS发布的时候&#xff0c;将网站发布到虚拟目录&#xff0c;为了保持调试和发布的路径同一&#xff0c;一般会修改VS调试的虚拟目录 一、Web应用程序 Web应用程序的修改方式非常简单&#xff0c;在解决方案资源管理器->项目>右键>属性>Web>服务…

在云服务器上建立网站

1.修改ECS实例的安全组规则&#xff0c;开放Web服务端口 新购买的ECS实例默认已开启远程管理端口&#xff08;22、3389&#xff09;&#xff0c;若希望在云服务器上建立网站&#xff0c;还需要开启80端口。 点击右侧“更多—更改安全组” 点击“新建安全组” 默认状态是没有…

阿里云服务器或者其他网站绑定域名方法

阿里云服务器或者其他网站绑定域名方法 |浏览&#xff1a;6896|更新&#xff1a;2014-04-18 17:25|标签&#xff1a;域名 1 2 3 4 分步阅读 阿里云服务器或者其他服务器绑定域名方法。添加高级网站标志&#xff0c;使域名解析。 工具/原料 服务区 已解析域名或者站点 方法/步骤…

阿里云服务器或者其他网站绑定域名方法

阿里云服务器或者其他网站绑定域名方法 |浏览&#xff1a;6896|更新&#xff1a;2014-04-18 17:25|标签&#xff1a;域名 1 2 3 4 分步阅读 阿里云服务器或者其他服务器绑定域名方法。添加高级网站标志&#xff0c;使域名解析。 工具/原料 服务区 已解析域名或者站点 方法/步骤…

高性能网站使用的14条技术

Translated by mask 从2004年开始&#xff0c;我开始进入雅虎的异常表现小组。我们是一个很小的队伍&#xff0c;专门针对雅虎的产品进行质量检测和改进&#xff0c;我作为一个后端工程师&#xff0c;现在却开始捣鼓前端代码优化方面的工程&#xff0c;所以我认为这是一个极好…

成就大型高性能网站的十项规则

在我们公司ChinaNetCloud&#xff0c;见过多种不同类型的网站和系统&#xff0c;有好也有差。其中有些系统拥有良好的服务器/网络架构&#xff0c;并且进行了合理的调整和监控;然而一般的系统都会有安全和性能上的问题&#xff0c;不能良好运行&#xff0c;也无法变得更流行。 …