1. 事件监听机制
- 事件源:事件发生的地方
- 事件:一件事情
- 监听器:一个对象,有事件发生后要执行的代码
- 注册监听:将事件、事件源、监听器绑定在一起。 当事件源上发生某个事件后,就会执行监听器代码。
- 例如:在 Tomcat 服务器中(事件源),ServletContext 对象被创建了(事件),执行 ServletContextListener 对象的 contextInitialized 方法(监听器)
2. ServletContextListener 对象
-
作用
监听 ServletContext 对象的创建和销毁
-
方法
- void contextDestroyed(ServletContextEvent sce) :ServletContext 对象被销毁之前会调用该方法
- void contextInitialized(ServletContextEvent sce) :ServletContext 对象创建后会调用该方法
-
使用步骤
-
定义一个类,实现 ServletContextListener 接口
-
复写方法
-
注册监听
-
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <!--</filter-mapping>--> <listener> <listener-class>com.zt.web.listener.ContextLoaderListener</listener-class> </listener> <!--指定初始化参数--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/classes/applicationContext.xml</param-value> </context-param> </web-app>
-
注解
@WebListener
-
-
-
编码实现
package com.zt.web.listener; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import java.io.FileInputStream; public class ContextLoaderListener implements ServletContextListener { /** * 监听 ServletContext 对象的创建 * 服务器启动后自动调用 * @param servletContextEvent */ @Override public void contextInitialized(ServletContextEvent servletContextEvent) { //加载资源文件 //1.获取ServletContext对象 ServletContext servletContext = servletContextEvent.getServletContext(); //2.加载资源文件 String contextConfigLocation = servletContext.getInitParameter("contextConfigLocation"); //3.获取真实路径 String realPath = servletContext.getRealPath(contextConfigLocation); //4.加载进内存 try{ FileInputStream fis = new FileInputStream(realPath); System.out.println(fis); }catch (Exception e){ e.printStackTrace(); } System.out.println("ServletContext对象被创建了。。。"); } /** * 监听 ServletContext 对象的销毁 * 服务器正常关闭后自动调用 * @param servletContextEvent */ @Override public void contextDestroyed(ServletContextEvent servletContextEvent) { System.out.println("ServletContext 对象被销毁了"); } }