监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动。通俗的讲,监听器就比如你盯着一盘好吃的,有人拿你的吃的的时候,你会立马采取相应的行动。
监听器主要是对对象自身的创建和销毁进行监听
主要有ServletContextListener、HttpSessionListener、ServletRequestListener,用法基本一致
用来监听统计当前访问人数(HttpSessionListener)。
此处我们以ServletRequestListener来举例,先说明一下,ServletRequestListener是一个接口,这个接口是用来监听请求的,里面有两个方法,分别是请求创建和请求销毁。
具体实例:
1.创建listener包,在此包下创建RequestListener类,代码如下:
package com.liqiang.demo.listener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener;
/*
* @Author: liqiang
* @Date: 2019-7-2 9:56
* */
@WebListener
public class RequestListenter implements ServletRequestListener{
@Override
public void requestDestroyed(ServletRequestEvent sre) {
System.out.println("----------------------->请求销毁");
}
@Override
public void requestInitialized(ServletRequestEvent sre) {
System.out.println("----------------------->请求创建");
}
}
注意:@WebListener注解为声明此类为Listener,无需再进行配置(也就是监听器的配置文件正如我前面所说的拦截器需要写配置文件,因为没有使用注解),示例代码如下:
package com.liqiang.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
@SpringBootApplication
@ServletComponentScan
public class SpringbootDemo01Application {
public static void main(String[] args) {
SpringApplication.run(SpringbootDemo01Application.class, args);
}
}
2.随意访问一个地址
唯一注意的是,使用注解的方式声明Listener时,有的博客说需要再main函数类上添加@ServletComponentScan(basePackages = "此处写明类地址,格式为包名+类名"),也就是加packages,但是我加了之后就不起作用
这里我们再补充一下常用的监听器接口:
1.ServletContextListener -- 监听servletContext对象的创建以及销毁
1.1 contextInitialized(ServletContextEvent arg0) -- 创建时执行
1.2 contextDestroyed(ServletContextEvent arg0) -- 销毁时执行
2.HttpSessionListener -- 监听session对象的创建以及销毁
2.2 sessionCreated(HttpSessionEvent se) -- 创建时执行
2.2 sessionDestroyed(HttpSessionEvent se) -- 销毁时执行
3.ServletRequestListener -- 监听request对象的创建以及销毁
3.1 requestInitialized(ServletRequestEvent sre) -- 创建时执行
3.2 requestDestroyed(ServletRequestEvent sre) -- 销毁时执行
4.ServletContextAttributeListener -- 监听servletContext对象中属性的改变
4.1 attributeAdded(ServletContextAttributeEvent event) -- 添加属性时执行
4.2 attributeReplaced(ServletContextAttributeEvent event) -- 修改属性时执行
4.3 attributeRemoved(ServletContextAttributeEvent event) -- 删除属性时执行
5.HttpSessionAttributeListener --监听session对象中属性的改变
5.1 attributeAdded(HttpSessionBindingEvent event) -- 添加属性时执行
5.2 attributeReplaced(HttpSessionBindingEvent event) -- 修改属性时执行
5.3 attributeRemoved(HttpSessionBindingEvent event) -- 删除属性时执行
6.ServletRequestAttributeListener --监听request对象中属性的改变
6.1 attributeAdded(ServletRequestAttributeEvent srae) -- 添加属性时执行
6.2 attributeReplaced(ServletRequestAttributeEvent srae) -- 修改属性时执行
6.3 attributeRemoved(ServletRequestAttributeEvent srae) -- 删除属性时执行