Listener:監聽器
概念 : web的三大組件之一,監聽web服務的一些事件
事件監聽機制
- 事件 :一件事情
- 事件源 :事件發生的地方
- 監聽器 :一個對象
- 註冊監聽:將事件、事件源、監聽器綁定在一起。 當事件源上發生某個事件後,執行監聽器代碼
常見的ServletContextListener:監聽ServletContext對象的創建和銷燬
方法:
- void contextDestroyed(ServletContextEvent sce) :ServletContext對象被銷燬之前會調用該方法
- void contextInitialized(ServletContextEvent sce) :ServletContext對象創建後會調用該方法
用法:
1. 定義一個類,實現ServletContextListener接口
2. 複寫方法
3. 配置
方式一: 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">
<!-- 配置監聽器,如果用了註解,可以不加這行配置 -->
<listener>
<listener-class>cn.itcast.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
demo
@WebListener
public class ContextLoaderListener implements ServletContextListener {
/**
* 監聽ServletContext對象創建的。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對象被銷燬了。。。");
}
}
這樣,當服務器啓動完成後,就會自動回調ContextLoaderListener 的contextInitialized方法,因爲這個監聽器是全局的,所以可以做一些全局資源的初始化工作。