Listener:
监听器,它用于监听Java Web程序中的事件
Listener主要对Session,request,context进行监控
Listener的使用需要去实现相应的Listener接口,在应该触发Listener事件的时候,Tomcat会自动调用Listener方法
SessionListener:
public class SessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
//这个方法在Session被创建的时候会调用
HttpSession session = se.getSession();
System.out.println("创建一个session:"+session);
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
//session被销毁的时候调用这个方法
HttpSession session = se.getSession();
System.out.println("销毁了一个session:"+session);
}
}
接下来在web.xml当中要做相应的配置
<listener>
<listener-class>com.xiaoxie.listener.SessionListener</listener-class>
</listener>
<listener>标签一般是配置在<servlet>标签之前
在一个web.xml当中是可以配置多个listener的
Listener分类:
1,监听对象的创建和销毁
HttpSessionListener,ServletContextListener,ServletRequestListener分别用于监听Session,Context,Request的创建和销毁
HttpSessionListener:
sessionCreated(HttpSessionEvent se)在创建session时会执行
sessionDestoryed(HttpSessionEvent se)在session超时或调用session.invalidate()时会执行
ServetContextListener:
Context代表了当前的应用程序
contextInilitialized(ServletContextEvent event):服务器启动或热部署war包时执行
contextDestroyed(ServletContextEvent event):服务器关闭或者只关闭web时执行
ServletRequestListener:
requestInitialized(ServletRequestEvent event):每次请求都会执行
requestDestoryed(ServletRequestEvent event):request处理完毕自动销毁前执行
注意:如果请求的html中含有多个图片的话则会在一次html请求中触发多次request事件
Java中类是可以实现多接口的,这样的话则一个类可以实现多个Listener接口
2,监听对象的属性变化:
这个是用来监听Session,Context,Request的属性变化的,接口名称格式是xxxAttributeListener
HttpSessionAttributeListener,ServletContextAttributeListener,ServletRequestAttributeListener
当对象中添加,更新,移除属性时会调用类似如下的方法
attributeAdded(),attributeReplaced(),attributeRemoved()
3,监听Session内的对象
它有两种Listener,分别是HttpSessionBindingListener和HttpSessionActivationListener
HttpSessionBindingListener:
valueBound(HttpSessionBindingEvent event):当对象被放到Session中去的时候会执行
valueUnbound(HttpSessionBindingEvent event):当对象被从Session中移除的时候会执行
HttpSessonActivationListener:
sessionWillPassivate(HttpSessionEvent se):在Session中内容钝化时执行
注意:钝化就是指的服务器关闭的时候会把Session中的内容存到硬盘中去
sessionDidActivate(HttpSessionEvent se):在服务器重新启动时,session对象被重新加载的时候