首页 > 编程语言 >java使用监听统计网站信息,并获取session中对应的ip

java使用监听统计网站信息,并获取session中对应的ip

时间:2024-04-17 15:46:07浏览次数:27  
标签:java ip void viewNum session import public

用java listener统计在线人数,并获取session中对应的ip

在web.xml中添加。注意放到

<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>

spring监听器之后,否则会报错

  <listener>
    <listener-class>com.xxx.xxx.util.SessionListener</listener-class>
  </listener>
import org.springframework.stereotype.Component;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.http.*;
import java.util.HashMap;
import java.util.Map;

/**
 * SESSION 监听
 */
@Component
public class SessionListener implements HttpSessionListener, HttpSessionAttributeListener, ServletContextListener, ServletRequestListener {
    //用Map来存储session,sessionid作为key session作为value

    public IViewNumService viewNumService;

    private static Map sessionMap = new HashMap<String, HttpSession>();

    HttpServletRequest request;

    public void sessionCreated(HttpSessionEvent se) {
        //当session 创建的时候,例如我要监听统计在线人数 并且获取当前session的ip
        HttpSession session = se.getSession();
        String ip = request.getRemoteAddr();//获取客户端ip
        session.setAttribute("ip", ip);
        String sid = session.getId();//获取sessionId
        sessionMap.put(sid, session);

        DateTime dateTime = DateTime.of(session.getCreationTime());
        String formattedTime = dateTime.toString("yyyy-MM-dd HH:mm:ss");
//        System.out.println("---2session创建时间:" + formattedTime);
        System.out.println("----SESSIONID:" + sid + "---2session创建时间:" + formattedTime + " " + ip);
        ViewNum viewNum = new ViewNum();
        viewNum.setRID(new GUID().toString());
        viewNum.setNTIME(formattedTime);
        viewNum.setNYEAR(String.valueOf(dateTime.year()));
        viewNum.setNMONTH(String.valueOf(dateTime.month()));
        viewNum.setNDAY(String.valueOf(dateTime.getDay()));
        viewNum.setNIP(ip);
        viewNumService.save(viewNum);
    }

    public static int getOline() {
        return sessionMap.size();//获取在线人数,获取到session 就可以拿到ip了
    }

    public void requestDestroyed(ServletRequestEvent arg0) {

    }

    public void requestInitialized(ServletRequestEvent sre) {
        request = (HttpServletRequest) sre.getServletRequest();//获取request
    }

    public void sessionDestroyed(HttpSessionEvent arg0) {
        // 销毁session或者session超时时
    }

    public void attributeAdded(HttpSessionBindingEvent arg0) {
        //这里是监听当session调用setAtrribute()方法时,例如用户登录,将用户信息设置进session

    }

    public void attributeRemoved(HttpSessionBindingEvent arg0) {
        //这里监听当session调用removeAttribute()方法时

    }

    public void attributeReplaced(HttpSessionBindingEvent arg0) {

    }

    public void contextDestroyed(ServletContextEvent arg0) {

    }

    public void contextInitialized(ServletContextEvent arg0) {

    }

}

标签:java,ip,void,viewNum,session,import,public
From: https://www.cnblogs.com/xx2017/p/18140894

相关文章

  • java多线程 读取list--动态读取list
    java多线程读取list--动态读取list的案例 本次介绍,我使用的是synchronized同步代码块的关键字来读取list,在写java多线程时,一定要注意synchronized关键字的有效范围。ps:如果synchronized关键字的代码块范围太大,可能会导致优先获取到cpu资源的第一个线程在满足条件的情......
  • java多线程 读取变量同步安全的案例
    本次介绍,我使用的是synchronized同步代码块的关键字来读取list,在写java多线程时,一定要注意synchronized关键字的有效范围。ps:如果synchronized关键字的代码块范围太大,可能会导致优先获取到cpu资源的第一个线程在满足条件的情况下一直无法跳循环,从而使得其他线程无法给获......
  • Typescript有哪些类型
    基础类型:number:用于表示数字string:用于表示文本数据boolean:用于表示逻辑值,即true或falsesymbol:用于表示唯一的、不可变的值null和undefined:用于表示空值或未定义的值void:通常用于表示没有返回值的函数any:用于表示任意JavaScript值。使用any会失去TypeScript的......
  • Java登陆第四十三天——Pinia
    到目前一共学习了两种传参方式。 1.组件传参 2.路由传参这两种传参方式并不好用,所以出现了PiniaPinia平替了Vuex,而且比它更优秀。Pinia是Vue衍生的生态系统之一,所以,在使用它前需要导入依赖。npmipinia简单地说,Pinia就是共享数据。各个.vue组件可以利用Pinia更好的完成......
  • 【安装记录】pip install dlib报错
    最近在复现人工智能方面的论文时,需要安装dlib包但是pipinstalldlib一直报错:又有中文乱码,又提示下面的:note:Thiserrororiginatesfromasubprocess,andislikelynotaproblemwithpip.ERROR:FailedbuildingwheelfordlibRunningsetup.pycleanfordlibFail......
  • TypeScript 中 Type 'typeof globalThis' has no index signature 错误解决
    TypeScript中Type'typeofglobalThis'hasnoindexsignature错误解决当我们尝试访问 global 对象上不存在的属性时,会出现错误“Elementimplicitlyhasan'any'typebecausetype'typeofglobalThis'hasnoindexsignature”。要解决此错误,需要扩展全局对象并为必......
  • KMP算法 Java实现
    Problem:28.找出字符串中第一个匹配项的下标目录解题方法思路构建next数组回溯查找复杂度Code解题方法构建next串回溯查找next串,最后下标思路通过最大前缀后缀能找到下一次未查找到后要回溯的位置构建next数组无论如何第一个数的下一次回溯位置肯定是0,因此next[......
  • 2.JAVA入门 了解JAVA 配置环境
    Java入门Java特性和优势简单性:Java语言设计简洁,易于学习和使用。它摒弃了许多复杂的特性和语法,使得编程变得更加直观和容易上手。面向对象:Java是一种纯粹的面向对象编程语言,所有的代码都以类和对象的形式组织。这种面向对象的特性使得代码更加模块化、可重用性更高,并且更容易......
  • V4L2 - Pipeline_Define & Async_Register & Pipeline_Create
       异步注册存在的根本原因就是:    注册时一定要表明subdev之间的层级关系,所以存在两个注册方向    一是以当前节点寻找下一级节点,如果下一级具备注册条件,则注册下一级节点,并指明层级关系    二是一失败后,寻找上一级节点,如果上一级指明层级关系方法被......
  • Pipeline Model
    PiplineModelSessionPipelineSettingPolicyoverview:IPipelineModelManager:一个LogicDevice对应于一个Manager。用于创建和管理PipelineModel。API:get()/getPipelineModel()当调用IPipelineModelManager的ge......