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>
    

      

  • 相关阅读:
    sqlserver 2005 数据库的差异备份与还原
    sqlserver安装教程
    hibernate左连接查询时在easyUI的dataGrid中有些行取值为空的解决办法
    解释器模式
    命令模式
    责任链模式
    3Sum Closest
    3sum
    代理模式
    外观模式
  • 原文地址:https://www.cnblogs.com/ww103/p/12079171.html
Copyright © 2011-2022 走看看