监听器
监听器就是一个实现了特定接口的Java类,这个Java类用于监听另一个Java类的方法调用或者属性的改变。
当被监听对象发生上述事件后,监听器某个方法将会立即被执行。
监听器用途
用来监听其他对象的变化的。主要应用在图形化界面开发上。Java中GUI,Android。
Servlet中的监听器
在Servlet中定义了多种类型的监听器,它们用于监听的事件源分别是SeryletContext、HttpSession和ServletReguest这三个域对象。
Servlet中的监听器的分类
一类 : 监听三个域对象的创建和销毁的监听器(三个)。
二类 : 监听三个域对象的属性变更(属性添加、移除、替换)的监听器(三个)。
三类 : 监听Httpsession中JavaBean的状态改变(钝化、活化、绑定、解除绑定)的监听(两个)
ServletContext的创建和销毁
创建 : 在服务器启动的时候,为每个web应用创建单独的ServletContext对象。
销毁 : 在服务器关闭的时候,或者项目从web服务器中移除的时候。
ServletContextlistener:
监听servletContext对象的创建和销毁
方法:
void contextDestroyed(ServletContextEvent sce) :
ServletContext对象被销毁之前会调用该方法
void contextInitialized(ServletContextEvent sce) :
ServletContext对象创建后会调用该方法
作用:
- 加载框架的配置文件
Spring框架提供了一个核心监听器 ContextLoaderlistener. - 定时任务调度
步骤:
- 定义一个类,实现ServletContextlistener接口
- 复写方法
- 配置
1.web.xml
<!-- 配置监听器-->
<listener>
<listener-class>cn.web.listener.ContextLoaderListener</listener-class>
</listener>
<!-- 指定初始化参数-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>
2.注解
//@WebListener
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
@WebListener
public class ContextLoaderListener implements ServletContextListener {
/**
* 监听ServletContext对象创建的,ServletContext对象服务器启动后自动创建
*/
@Override //在服务器启动后自动调用
public void contextInitialized(ServletContextEvent servletContextEvent) {
//加载资源文件
//1.获取ServletContext对象
ServletContext servletContext = servletContextEvent.getServletContext();
//2.加载资源文件
String initParameter = servletContext.getInitParameter("contextConfigLocation");
//3.获取真实路径
String realPath = servletContext.getRealPath(initParameter);
//4.加载进内存
try {
FileInputStream fis = new FileInputStream(realPath);
System.out.println(fis);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
System.out.println("ServletContext对象被创建了");
}
@Override //在服务器关闭后,ServletContext对象被销毁。当服务器正常关闭后该方法被调用
public void contextDestroyed(ServletContextEvent servletContextEvent) {
System.out.println("ServletContext对象被销毁了");
}
}