zoukankan      html  css  js  c++  java
  • 监听器的两个应用

    一、获得当前在线人数

    package com.bjsxt.listener;
    
    import javax.servlet.ServletContext;
    import javax.servlet.http.HttpSessionAttributeListener;
    import javax.servlet.http.HttpSessionBindingEvent;
    import javax.servlet.http.HttpSessionEvent;
    import javax.servlet.http.HttpSessionListener;
    
    /**
     * @program: JavaEE
     * @description
     * @author: wuhao
     * @create: 2019-12-13 09:41
     **/
    public class OnlineListener implements HttpSessionListener, HttpSessionAttributeListener {
        @Override
        public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
            if ("employee".equals(httpSessionBindingEvent.getName())){
                //获得全局对象
                ServletContext servletContext = httpSessionBindingEvent.getSession().getServletContext();
                //获得在线人数
                Integer online = (Integer) servletContext.getAttribute("online");
    
                if (online == null) {
                    online = 1;
                } else {
                    online++;
                }
                //设置全局属性
                servletContext.setAttribute("online",online );
            }
        }
    
        @Override
        public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
    
        }
    
        @Override
        public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {
    
        }
    
        @Override
        public void sessionCreated(HttpSessionEvent httpSessionEvent) {
    
        }
    
        @Override
        public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
            //注销session时 人数-1
            //获得全局对象
            ServletContext servletContext = httpSessionEvent.getSession().getServletContext();
    
             Integer online = (Integer) servletContext.getAttribute("online");
    
             if (online==null){
                 online=0;
             }else {
                 online--;
             }
    
             servletContext.setAttribute("online",online );
    
    
    
        }
    }
    

      web.xml配置

    <listener>
    <listener-class>com.bjsxt.listener.OnlineListener</listener-class>
    </listener>

     二、监听用户的操作(日志文件)

    package com.bjsxt.listener;
    
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletRequestEvent;
    import javax.servlet.ServletRequestListener;
    import javax.servlet.http.HttpServletRequest;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Date;
    
    /**
     * @program: JavaEE
     * @description
     * 日志
     * @author: wuhao
     * @create: 2019-12-12 19:28
     **/
    public class UserListener implements ServletRequestListener {
        @Override
        public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
    
        }
    
        @Override
        //监听发出的请求
        public void requestInitialized(ServletRequestEvent servletRequestEvent) {
            ServletRequest servletRequest = servletRequestEvent.getServletRequest();
    
            HttpServletRequest request =(HttpServletRequest)servletRequest;
    
            //获得远程请求的ip
            String  ip = request.getRemoteAddr();
            //获得请求的时间
            String date = new Date().toLocaleString();
            //获得请求的动作
            String requestURI = request.getRequestURI();
            String queryString = request.getQueryString();
    
            //把这写到日志文件中去
            try {
                PrintWriter printWriter = new PrintWriter(new FileWriter("D:/sxtOA.txt", true));
    
                printWriter.println("用户,ip为:"+ip+"在"+date+"访问了程序的"+requestURI+"?"+queryString);
    
                printWriter.close();
            } catch (IOException e) {
                e.printStackTrace();
    
            }
    
    
        }
    }
    

      web.xml配置

    <listener>
            <listener-class>com.bjsxt.listener.UserListener</listener-class>
        </listener>
    

      

  • 相关阅读:
    App.config使用ASP.NET Web Project的Transformation模式编译方式
    简易扩展Visual Studio UnitTesting支持TestMethodCase
    Microsoft Unity ---- 系列文章
    Reflector 7.0.0.420 注册破解版
    在Vue前端界面中,几种数据表格的展示处理,以及表格编辑录入处理操作。
    基于Vue的工作流项目模块中,使用动态组件的方式统一呈现不同表单数据的处理方式
    在Vue前端项目中,附件展示的自定义组件开发
    在Vue&Element前端项目中,对于字典列表的显示处理
    kestrel对接elasticsearch踩坑记
    华为智慧安平解决方案——安防视频监控是核心
  • 原文地址:https://www.cnblogs.com/ww103/p/12079171.html
Copyright © 2011-2022 走看看