Listener概述
监听器Listener 是 监听某个组件变化的对象.
-
事件源是固定的,主要是request, session, servletcontext域对象
-
监听的是域对象变化
- 对象的创建和销毁, 域对象中存储的数据变化
-
第一个维度划分:
-
监听的域对象request, session, servletcontext
域对象 监听器 request ServletRequestListener session HttpSessionListener servletcontext ServletContextListener
-
-
第二个维度划分:
-
监听的域对象的状态 也就是
- 对象的创建和销毁,
- 域对象中存储的数据变化
-
ServletContext监听器入门
用于监听 servletcontext域对象, 对象的创建和销毁, 域对象中存储的数据变化
实现步骤
- 创建类实现监听器接口 ServletContextListener
- 重写抽象方法
- 注解方式 配置 Listener
@WebListener
public class MyServletContextListener implements ServletContextListener {
@Override
/**
* ServletContext对象,被创建,调用
*/
public void contextInitialized(ServletContextEvent servletContextEvent) {
System.out.println("ServletContext域对象创建");
}
@Override
/**
* ServletContext对象,被销毁前调用
*/
public void contextDestroyed(ServletContextEvent servletContextEvent) {
System.out.println("ServletContext域对象销毁");
}
}
- web.xml配置方式 Listener
<listener>
<listener-class>com.itheima.listener.MyServletContextListener</listener-class>
</listener>
监听器事件对象 ServletContextEvent
ServletContextEvent: 是ServletContext域对象的事件对象, 此对象由tomcat引擎创建ServletContext
-
方法:
Object getSource()获取到被监听的事件源ServletContext getServletContext()获取到被监听的事件源
-
小结:
- 两个方法 除了返回值外,功能实现是一致的, 设计目的为了通用性
- 其他的监听器事件对象(HttpSessionEvent, ServletRequestEvent), 都有共同的方法 getSource()
@WebListener
public class MyServletContextListener implements ServletContextListener {
@Override
/**
* ServletContext对象,被创建,调用
*/
public void contextInitialized(ServletContextEvent servletContextEvent) {
System.out.println("ServletContext域对象创建");
ServletContext context = (ServletContext) servletContextEvent.getSource();
System.out.println(context);
ServletContext servletContext = servletContextEvent.getServletContext();
System.out.println(servletContext);
}
@Override
/**
* ServletContext对象,被销毁前调用
*/
public void contextDestroyed(ServletContextEvent servletContextEvent) {
System.out.println("ServletContext域对象销毁");
}
}