为什么每刷新一个网页一次,会数字会加2?
来源:2-2 请求流量分析统计-开发统计查询Servlet
电磁护盾
2020-03-04 13:11:14
刷新一次网页,应该是发来一个请求啊,会触发一次这个方法public void requestInitialized(ServletRequestEvent sre) ,然后数字应该加1啊。

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回答
同学你好!
requestInitialized自己不会发送request请求
本次课程中的监听器是监听request请求,无论是直接在浏览器中请求地址,还是servlet中转发,只要是request请求,都可以被监听到
本次课程中只是演示了监听器监听request请求,但是它也可以监听其它,比如seesion等

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~
电磁护盾
提问者
2020-03-04

我发现了,每次刷新 http://localhost:8080/request-total/rt 这个网页去看数据的变化,也会使数字加1.所以算上前面的Page页面刷新的一次,数字才加2的。
监听器是监听一个工程中所有的Servlet文件和html文件发来的request请求吗? 是不是只有在浏览器地址栏访问的文件才会发request请求?RequestTotalListener.java 监听器自己不会发request请求把?
相似问题
回答 1
回答 2