无论是SSH还是SSM只要是做web开发,就无法回避Servlet技术,而Servlet技术是Servlet规范中三个技术点之一,这三个技术点分别是:servlet技术、listener技术和filter技术。前面几篇博文介绍了servlet技术,接下来几篇博文将介绍listener技术。
一、首先什么是Listener(监听器)?
监听器就是监听某个对象的状态变化的组件,监听器中有几个重要概念:
1)事件源:被监听的对象。主要有三个域对象:request、session、servletContext。
2)监听器:监听事件源对象的组件,事件源对象的状态变化就会触发监听器。
3)注册监听器:将监听器与事件源进行绑定。
4)响应行为:监听器听到事件源的转台变化是,所涉及的功能代码。(一般由程序员编写)
二、监听器有哪些?
监听器可以按照两个维度进行划分:
1)第一维:按照被监听的对象划分:ServletRequest域、HttpSession域和ServletContext域。
2)第二维:按照监听的内容划分:监听域对象的创建与销毁、监听域对象的属性变化。
三、监听三大域对象的创建与销毁的监听器
1.ServletContextListener监听器:监听ServletContext域对象的创建与销毁。
1)ServletContext域对象的生命周期:
创建:服务器启动时;
销毁:服务器关闭;
2.编写监听器:
①编写监听器类实现ServletContextListener接口。
②重写监听器的contextInitialized(ServletContextEvent sce)和contextDestroyed(ServletContextEvent sce)方法。
③在web.xml中进行配置,即注册监听器。
简单的监听器类
package listener;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class MyServletContextListtener implements ServletContextListener{
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("监听器销毁");
}
@Override
public void contextInitialized(ServletContextEvent sce) {
//获取被监听的对象:ServletContext
ServletContext servletContext = sce.getServletContext();
//也是获得被监听的对象:是通用的方法
Object source = sce.getSource();
System.out.println("监听器初始化");
}
}
在web.xml中注册监听器:
<!-- 注册监听器 -->
<listener>
<display-name>MyListener</display-name>
<listener-class>listener.MyServletContextListtener</listener-class>
</listener>
3.ServletContextListener监听器的主要作用:
1)初始化的工作:初始化对象、初始化数据(如:加载驱动、创建数据库连接、连接池的初始化等);
2)加载初始化的配置文件: 如spring的配置文件;
3)任务调度(定时器Timer/TaskTimer):监听某项行为定时执行相应功能;