Listener监听器
Listener:web的三大组件之一
- 事件监听机制:
- 事件:一件事情
- 事件源:事件发生的地方
- 监听器:一个对象
- 注册监听:将事件、事件源、监听器绑定在一起。当事件源上发生某个事件后,执行监听器代码。
这里只介绍ServletContextListener监听器
一、ServletContextListener监听器
监听ServletContext对象的创建和销毁
1.方法:
-
void contextInitialized(ServletContextEvent sce)
: ServletContext对象创建后会调用该方法 -
void contextDestroyed(ServletContextEvent sce)
: ServletContext对象被销毁之前会调用该方法
2. 使用步骤:
- 定义一个类,实现ServletContextListener接口
- 复习方法
- 配置
3. web.xml中配置
<listener>
<!-- 该ServletContextListener实现类监听器的全类名 -->
<listener-class>cn.itcast.listener.ContextLoaderListener</listener-class>
</listener>
4. 注解配置
在实现类上添加
@WebListener
即可
案例,在ServletContext创建前加载资源【以后做路由分发】
配置文件/WEB-INF/classes/router.xml
<?xml version="1.0" encoding="UTF-8"?>
<bean>
</bean>
指定初始化参数,web.xml中进行配置
<!-- 指定初始化参数 -->
<context-param>
<!-- 参数名字 -->
<param-name>router</param-name>
<!-- 参数路径 -->
<param-value>/WEB-INF/classes/router.xml</param-value>
</context-param>
@WebFilter
public class ContextLoaderListener implements ServletContextListener {
/**监听ServletContext对象的创建。ServletContext对象服务器启动后自动创建*/
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
// 加载资源文件
// 1. 获取ServletContext对象
ServletContext servletContext = servletContextEvent.getServletContext();
// 2. 加载资源文件
String initParameter = servletContext.getInitParameter("router");
// 3. 获取真实路径
String path = servletContext.getRealPath(initParameter);
// 4. 加载进内存
try {
FileReader fr = new FileReader(path);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// 5....
}
/**在服务器关闭后,ServletContext对象被销毁,当服务器正常关闭后该方法被调用*/
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
System.out.println("ServletContext对象被销毁了...");
}
}