Listener(监听器)
1.什么是监听器?
2.监听器的分类
3.监听ServletContext对象的销毁和创建
4.监听ServletRequest对象的销毁和创建
#什么是监听器?
在servlet中监听器是实现特定接口的类,当监听器绑定的类发生改变时,监听器会做出反应,举个简单的例子,水壶烧水
1.水壶(事件源)
2.水壶里面的温度开关(事件监听器)
3.水烧开了(事件对象)
4.温度开关切断电源(响应行为)
#监听器的分类
按监听的对象可分为3类
ServletContext对象,监听器为ServletContextListener
HttpSession对象,监听器为HttpSessionListener
ServletRequest对象,监听器为ServletRequestListener
按监听的内容可分为2类
ServletContext对象 | HttpSession对象 | ServletRequest对象 | |
---|---|---|---|
域对象的销毁域创建 | ServletContextListener | HttpSessionListener | ServletRequestListener |
域对象内的属性发生改变 | ServletContextAttributeListener | HttpSessionAttributeListener | ServletRequestAttributeListener |
#监听ServletContext对象的销毁和创建
实现ServletContextListener接口
package com.mike;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletContextEvent;
/**
* @author mike
* @date 2020-11-21
* @desc 监听ServletContext域的创建和销毁
*/
public class MyServletContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
System.out.println("ServletContext对象创建");
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
System.out.println("ServletContext对象销毁");
}
}
注册监听器
<listener>
<description>ServletContextListener监听器</description>
<listener-class>com.mike.MyServletContextListener</listener-class>
</listener>
启动tomacat服务器会输出 "ServletContext对象创建",因为ServletContext对象是在容器启动创建
关闭tomacat服务器会输出 "ServletContext对象销毁",因为ServletContext对象在容器关闭时销毁
#监听ServletRequest对象的销毁和创建
实现ServletRequestListener接口
package com.mike;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener;
/**
* @author mike
* @date 2020-11-21
* @desc 监听ServletRequest域创建和销毁
*/
@WebListener //在此使用@WebListener注解注册监听器,就不需要在web.xml注册了
public class MyServletRequestListener implements ServletRequestListener{
@Override
public void requestInitialized(ServletRequestEvent servletRequestEvent) {
System.out.println("请求创建了");
}
@Override
public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
System.out.println("请求销毁了");
}
}
随便访问一个servlet查看结果
当请求被创建时输出"请求创建了",当请求完成后被销毁输出"请求销毁了",每一次请求都会被监听