springboot拦截器之自定义监听器listener(三)

1自定义监听器Listener

常用的监听器包含三种,分别是servletContextListener、httpSessionListener、ServletRequestListener

servletContextListener 启动应用的时候就会调用

1.1ServletRequestListener

首先,先建立listener包,之后在其中新建一个RequestListener,引用ServletRequestListener中的方法requestDestroyed和requestInitialized

数据结构

 

 

 RequestListener的代码:

 

 

 

package com.example.demo.listener;

import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener;

@WebListener
public class RequestListener implements ServletRequestListener {

@Override
public void requestDestroyed(ServletRequestEvent sre) {
System.out.println("-----------requestDestroyed--------------");
}

@Override
public void requestInitialized(ServletRequestEvent sre) {
System.out.println("-----------requestInitialized-------------");
}
}

然后通过studyController中的方法进行访问

 

 

/**
* servlet的请求方式
* 访问地址:http://localhost:8080/v1/servletTest?id=9
* @param request
* @return
*/
@GetMapping("/v1/servletTest")
public Object servletTest(HttpServletRequest request) {
params.clear();
String id=request.getParameter("id");
System.out.println("Controller 处理中");
params.put("id", id);
return params;

}

之后run application ,访问接口地址:http://localhost:8080/v1/servletTest?id=9,可以查看控制台结果执行的顺序

 

 2ContextListener

结构

 

 代码:

package com.example.demo.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
/**
* 主要用来做统计
* @author Administrator
*
*/
@WebListener
public class ContextListener implements ServletContextListener {

@Override
public void contextDestroyed(ServletContextEvent sre) {
System.out.println("-----------contextDestroyed--------------");
}

@Override
public void contextInitialized(ServletContextEvent sre) {
System.out.println("-----------contextInitialized-------------");
}

}

 

 之后run as application,在控制台中能看见对应的信息

 3httpSessionListener

 

 代码

package com.example.demo.listener;


import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

/**
* HttpSessionListener中sessionCreated是新建一个会话时候触发也可以说是客户端第一次和服务器交互时候触发。
* sessionDestroyed销毁会话的时候,一般来说只有某个按钮触发进行销毁或者配置定时销毁
* @author Administrator
*
*/
@WebListener
public class SessionListener implements HttpSessionListener{

private int onlineCount = 0;//记录session的数量
/**
* session创建后执行
*/
@Override
public void sessionCreated(HttpSessionEvent se) {
onlineCount++;
System.out.println("【HttpSessionListener监听器】 sessionCreated, onlineCount:" + onlineCount);
se.getSession().getServletContext().setAttribute("onlineCount", onlineCount);
}

/**
* session失效后执行
*/
@Override
public void sessionDestroyed(HttpSessionEvent se) {
if (onlineCount > 0) {
onlineCount--;
}
System.out.println("【HttpSessionListener监听器】 sessionDestroyed, onlineCount:" + onlineCount);
se.getSession().getServletContext().setAttribute("onlineCount", onlineCount);
}

}

 

posted @ 2020-08-25 15:20  我是一只老白兔  阅读(595)  评论(0编辑  收藏  举报