zoukankan      html  css  js  c++  java
  • 监听器

    监听器介绍

      监听器 - Listener

      监听器(Listener)是J2EE Servlet模块下的组件

      Listener的作用对web应用对象的行为进行监控

      通过Listener监听自动触发指定的功能代码

      

       

    第一个监听器

      

    package com.imooc.listener;
    
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    @WebListener
    public class FirstListener implements ServletContextListener {
    
        @Override
        public void contextDestroyed(ServletContextEvent arg0) {
            // TODO Auto-generated method stub
            System.out.println("监听器销毁");
        }
    
        @Override
        public void contextInitialized(ServletContextEvent arg0) {
            // TODO Auto-generated method stub
            System.out.println("监听器初始化");
        }
    
    }

    <listener>
      <listener-class>com.imooc.listener.FirstListener</listener-class>
    </listener>

    内置对象监听器

      

     

     案例应用

      请求流量分析统计

        

    package com.imooc.total;
    
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    
    import javax.servlet.ServletContext;
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    import javax.servlet.ServletRequestEvent;
    import javax.servlet.ServletRequestListener;
    
    public class RequestTotal implements ServletContextListener,ServletRequestListener {
    
        @Override
        public void requestDestroyed(ServletRequestEvent arg0) {
            // TODO Auto-generated method stub
            
        }
    
        @Override
        public void requestInitialized(ServletRequestEvent arg0) {
            /**
             * 监听请求,每次请求来临时,记录时间段的请求次数
             * 
             */
            
            //获取ServletContext对象
            ServletContext context = arg0.getServletContext();
            
            //取出属性对象
            List<String> timeArray = (List<String>) context.getAttribute("timeArray");
            List<Integer> valueArray = (List<Integer>) context.getAttribute("valueArray");
            //定义一个时间类型的对象
            Date date = new Date();
            
            //时间格式化
            SimpleDateFormat hourMinute = new SimpleDateFormat("HH:mm");
            //对小时和分钟格式化
            String time = hourMinute.format(date);
            
            //判断当前时间在不在集合里
            if(timeArray.indexOf(time) == -1) {
                //时间集合里增加这个时间段
                timeArray.add(time);
                //在请求记录集合里,初始化有一次请求
                valueArray.add(1);
                
                //保存ServletContext对象里
                context.setAttribute("timeArray", timeArray);
                context.setAttribute("valueArray", valueArray);
            }else {
                //获取该时间段索引
                int index = timeArray.indexOf(time);
                //根据索引获取值
                int value = valueArray.get(index);
                //根据索引累加值
                valueArray.set(index, value+1);
                
                //保存属性
                
                context.setAttribute("valueArray", valueArray);
                
            }
            
            
            
        }
    
        @Override
        public void contextDestroyed(ServletContextEvent arg0) {
            // TODO Auto-generated method stub
            
        }
    
        @Override
        public void contextInitialized(ServletContextEvent arg0) {
            // 初始化时间集合,累加请求集合
            
            List timeArray = new ArrayList();
            List valueArray = new ArrayList();
            
            //获取ServletContext对象
            ServletContext context = arg0.getServletContext();
            
            //把timeArray当属性保存在ServletContext里
            context.setAttribute("timeArray", timeArray);
            
            context.setAttribute("valueArray", valueArray);
            
        }
    
    }

    xml配置

      

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
      <display-name>request-total</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
      <listener>
          <listener-class>com.imooc.total.RequestTotal</listener-class>
      </listener>
    </web-app>

    入门百度Echarts组件

      

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
        <script type="text/javascript" src="js/echarts.min.js"></script>
        <script type="text/javascript" src="js/jquery-3.5.1.min.js"></script>
    </head>
    <body>
        <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
        <div id="main" style=" 600px;height:400px;"></div>
        <script type="text/javascript">
        
            function showCase(){
                //ajax的使用
                   $.ajax(
                       {
                       url:"./rt",
                       type:"get",
                       dataType:"json",
                       success : function(json) {
                           // data = jQuery.parseJSON(data);  //dataType指明了返回数据为json类型,故不需要再反序列化
                           console.log(json);
                           console.log(json.timeArray);
                           console.log(json.vauleArray);
                           // 基于准备好的dom,初始化echarts实例
                           var myChart = echarts.init(document.getElementById('main'));
    
                           // 指定图表的配置项和数据
                           var option = {
                               title: {
                                   text: '请求流量数据表'
                               },
                               tooltip: {},
                               legend: {
                                   data:['访问量']
                               },
                               xAxis: {
                                   data: json.timeArray
                               },
                               yAxis: {},
                               series: [{
                                   name: '次数',
                                   type: 'bar',
                                   data: json.valueArray
                               }]
                           };
    
                           // 使用刚指定的配置项和数据显示图表。
                           myChart.setOption(option);
                       },
                       error:function(){
                           alert("请求失败");
                       }
    
                       }
                   )
    
            }
               window.setInterval("showCase()",1000);
        </script>
        
    </body>
        
    
    </html>
    package com.imooc.total;
    
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    
    import javax.servlet.ServletContext;
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    import javax.servlet.ServletRequestEvent;
    import javax.servlet.ServletRequestListener;
    import javax.servlet.http.HttpServletRequest;
    
    public class RequestTotal implements ServletContextListener,ServletRequestListener {
    
        @Override
        public void requestDestroyed(ServletRequestEvent arg0) {
            // TODO Auto-generated method stub
            
        }
    
        @Override
        public void requestInitialized(ServletRequestEvent arg0) {
            /**
             * 监听请求,每次请求来临时,记录时间段的请求次数
             * 
             */
            //获取HttpServletRequest对象
            HttpServletRequest request = (HttpServletRequest)arg0.getServletRequest();
            
            //获取请求的URL
            String url = request.getRequestURL().toString();
            
            if(url.endsWith("/rt") == true) {
                return;
            }
            
            //获取ServletContext对象
            ServletContext context = arg0.getServletContext();
            
            //取出属性对象
            List<String> timeArray = (List<String>) context.getAttribute("timeArray");
            List<Integer> valueArray = (List<Integer>) context.getAttribute("valueArray");
            //定义一个时间类型的对象
            Date date = new Date();
            
            //时间格式化
            SimpleDateFormat hourMinute = new SimpleDateFormat("HH:mm");
            //对小时和分钟格式化
            String time = hourMinute.format(date);
            
            //判断当前时间在不在集合里
            if(timeArray.indexOf(time) == -1) {
                //时间集合里增加这个时间段
                timeArray.add(time);
                //在请求记录集合里,初始化有一次请求
                valueArray.add(1);
                
                //保存ServletContext对象里
                context.setAttribute("timeArray", timeArray);
                context.setAttribute("valueArray", valueArray);
            }else {
                //获取该时间段索引
                int index = timeArray.indexOf(time);
                //根据索引获取值
                int value = valueArray.get(index);
                //根据索引累加值
                valueArray.set(index, value+1);
                
                //保存属性
                
                context.setAttribute("valueArray", valueArray);
                
            }
            
            
            
        }
    
        @Override
        public void contextDestroyed(ServletContextEvent arg0) {
            // TODO Auto-generated method stub
            
        }
    
        @Override
        public void contextInitialized(ServletContextEvent arg0) {
            // 初始化时间集合,累加请求集合
            
            List timeArray = new ArrayList();
            List valueArray = new ArrayList();
            
            //获取ServletContext对象
            ServletContext context = arg0.getServletContext();
            
            //把timeArray当属性保存在ServletContext里
            context.setAttribute("timeArray", timeArray);
            
            context.setAttribute("valueArray", valueArray);
            
        }
    
    }
    package com.imooc.total;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.alibaba.fastjson.JSON;
    
    /**
     * Servlet implementation class RequestTotalServlet
     */
    @WebServlet("/rt")
    public class RequestTotalServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public RequestTotalServlet() {
            super();
            // TODO Auto-generated constructor stub
        }
    
        /**
         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
            
    //        out.println("<h1>流量统计计算器</h1>");
            
            ServletContext context = request.getServletContext();
            List<String> timeArray = (List) context.getAttribute("timeArray");
            List<Integer> valueArray = (List<Integer>) context.getAttribute("valueArray");
            
            
    //        out.println(timeArray.toString()+"
    ");
    //        out.println(valueArray.toString());
            
            //整合集合,采取map映射表的方式
            Map dict = new HashMap();
            //初始化键值对
            dict.put("timeArray", timeArray);
            dict.put("valueArray", valueArray);
            //转化为JSON字符串
            String json = JSON.toJSONString(dict);
            
            out.println(json);
            
        }
    
        /**
         * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            doGet(request, response);
        }
    
    }
  • 相关阅读:
    LeetCode 1245. Tree Diameter
    LeetCode 1152. Analyze User Website Visit Pattern
    LeetCode 1223. Dice Roll Simulation
    LeetCode 912. Sort an Array
    LeetCode 993. Cousins in Binary Tree
    LeetCode 1047. Remove All Adjacent Duplicates In String
    LeetCode 390. Elimination Game
    LeetCode 1209. Remove All Adjacent Duplicates in String II
    LeetCode 797. All Paths From Source to Target
    LeetCode 1029. Two City Scheduling
  • 原文地址:https://www.cnblogs.com/wuheng-123/p/13724307.html
Copyright © 2011-2022 走看看