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);
        }
    
    }
  • 相关阅读:
    预备作业03
    2017-2018-2《程序设计与数据结构》实验2报告
    2017-2018-2 《程序设计与数据结构》第7周学习总结
    2017-2018-2 《程序设计与数据结构》第六周学习总结
    20172312 《程序设计与数据结构》第五周学习总结
    20172312 《程序设计与数据结构》第四周学习总结
    20172312 《程序设计与数据结构》第三周学习总结
    20172312 实验一《Java开发环境的熟悉》实验报告
    第二周作业
    第一周作业
  • 原文地址:https://www.cnblogs.com/wuheng-123/p/13724307.html
Copyright © 2011-2022 走看看