Listener类似于java的事件,我们可以使用Listener来监听某一事件,例如当你生日时,qq会给你发一给祝贺生日的email
可以理解为我一直在监听是否到了你生日,当达到条件时触发事件,给你发送邮件也就是处理。
javaEE一共有八个监听接口,用于监听不同的对象。
三个域对象,ServletContext,Request,Session
而我们在使用监听时,要在web.xml中进行配置
ServletContext对象监听
首先说一下SerlvletContext是什么,它相当于一个储存信息的空间,当我们开启服务器时,就会创建一个ServletContext对象,关闭时就会销毁这个对象,而所有的用户都可以访问这个ServletContext的数据。
而接口具体实现两个方法
public class MyServletContextListener implements ServletContextListener {
@Override
//监听域对象Context的创建
public void contextInitialized(ServletContextEvent sce) {
System.out.println("context 创建");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("context 销毁");
}
}
当我们开启服务时就会调用上面的初始化方法,当我们关闭时就会调用下面的销毁方法,而其中的参数就是事件对象。
我们可以在项目中使用它来加载一些配置,1,初始化对象和数据,例如数据库驱动,连接池初始化。2,加载一些配置文件,列入Spring配置。3,任务调度,定时器,Timer/TimerTask
这个对象监听也是最重要的
HttpSession对象监听
Session的定义网上有很多,这里简单提一下就不赘述了,session就是保存用户的数据到服务器中,并且是用户独占的,例如登陆时的用户名保存到session中,到其他页面时也可以取出这个用户名并显示,由于是独占的所以每个用户的session都不一样,所以看到的用户名也就不一样了。
而监听事件与上面类似,一个创建,一个销毁,另外说一下,我们可以这里可以使用事件对象的getSession方法获取当前创建的HttpSession对象。
ServletRequest对象监听
request如同字面意思是请求,当用户请求访问页面或者提交表单时Servlet容器会创建一个ServletRequest对象封装请求数据,同时也会创建一个ServletResponse封装响应数据,简而言之就是一个获取,一个发送。
理解了定义,就能明白这里的Listener与上面类似,一个监听创建方法requestInitialized,一个监听销毁方法requestDestroy.
下面是监听三大域对象属性变化的接口
ServletContextAttributeListener对象监听
当我们在给servletcontext添加修改或删除属性值时会触发监听事件,分别对应了三个方法,attributeAdded,attributeRepalced,attributeRemoved,这三个方法可以通过事件对象的getName和getValue来获取名称和值。
HttpSessionAttributeListener对象监听
同上
ServletRequestAttributeListener对象监听
同上
最后两个监听器比较特殊,是session中绑定的对象相关的监听器
即将要被绑定到session中的对象有几种状态
绑定状态:就一个对象被放到session域中
解绑状态:就是这个对象从session域中移除了
钝化状态:是将session内存中的对象持久化(序列化)到磁盘
活化状态:就是将磁盘上的对象再次恢复到session内存中
绑定与解绑的监听器HttpSessionBindingListener
接口中有两个方法valueBound感知绑定到session,valueUnbound感知从session中解绑
钝化与活化的监听器HttpSessionActivationListener
可以通过添加一个配置文件来配置钝化时间以及钝化后写到哪个目录文件下
两个方法sessionWillPassivate感知钝化,sessionDidActivate感知活化。
servlet包括三个技术点,serlvet,listener,filter,所以作为重点之一,listener很重要也很实用。