为什么每刷新一个网页一次,会数字会加2?

来源:2-2 请求流量分析统计-开发统计查询Servlet

电磁护盾

2020-03-04 13:11:14

刷新一次网页,应该是发来一个请求啊,会触发一次这个方法public void requestInitialized(ServletRequestEvent sre)    ,然后数字应该加1啊。

http://img.mukewang.com/climg/5e5f386d09c4705a08430193.jpg

package com.imooc.total;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;

public class RequestTotalListener implements ServletContextListener,ServletRequestListener{

	@Override
	public void requestDestroyed(ServletRequestEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void requestInitialized(ServletRequestEvent sre) {
		// TODO Auto-generated method stub
		List<String> timeList=(List<String>) sre.getServletContext().getAttribute("timeList");
		List<Integer> valueList=(List) sre.getServletContext().getAttribute("valueList");
		Date date=new Date();
		SimpleDateFormat sdf=new SimpleDateFormat("HH:mm");
		String time=sdf.format(date);
		//10:04
		if(timeList.indexOf(time)==-1) {
			//如果当前的时点在timeList中不存在的话,就为他初始化一个全新的时点,并且将数值初始化为1
			timeList.add(time);
			valueList.add(1);
			//时点不存在的情况需要改两个集合
			sre.getServletContext().setAttribute("timeList", timeList);
			sre.getServletContext().setAttribute("valueList", valueList);
		}else {
			//两个集合对应数据的索引相同
			//如果这个时点已经存在
			int index =timeList.indexOf(time);
			int value =valueList.get(index);
			valueList.set(index, value+1);
			//时点存在的情况需要改一个集合
			sre.getServletContext().setAttribute("valueList", valueList);
		}
	}

	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void contextInitialized(ServletContextEvent sce) {
		// TODO Auto-generated method stub
		List timeList=new ArrayList();
		List valueList=new ArrayList();
		
		sce.getServletContext().setAttribute("timeList", timeList);
		sce.getServletContext().setAttribute("valueList", valueList);
	}

}
package com.imooc.total;

import java.io.IOException;
import java.util.List;

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;

/**
 * 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 {
		ServletContext context=request.getServletContext();
		List<String> timeList=(List)context.getAttribute("timeList");
		List<Integer> valueList=(List)context.getAttribute("valueList");
		response.setContentType("text/html");
		response.getWriter().println(timeList.toString());
		response.getWriter().println("<br/>");
		response.getWriter().println(valueList.toString());
	}

	/**
	 * @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);
	}

}


写回答

2回答

好帮手慕柯南

2020-03-04

同学你好!

  1.  requestInitialized自己不会发送request请求

  2. 本次课程中的监听器是监听request请求,无论是直接在浏览器中请求地址,还是servlet中转发,只要是request请求,都可以被监听到

  3. 本次课程中只是演示了监听器监听request请求,但是它也可以监听其它,比如seesion等

    http://img.mukewang.com/climg/5e5f6e14091fc9c911810536.jpg

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

0

电磁护盾

提问者

2020-03-04

http://img.mukewang.com/climg/5e5f39650995e0f107250154.jpg

我发现了,每次刷新 http://localhost:8080/request-total/rt 这个网页去看数据的变化,也会使数字加1.所以算上前面的Page页面刷新的一次,数字才加2的。

监听器是监听一个工程中所有的Servlet文件和html文件发来的request请求吗? 是不是只有在浏览器地址栏访问的文件才会发request请求?RequestTotalListener.java 监听器自己不会发request请求把?

1

0 学习 · 9666 问题

查看课程