Listener也是servlet的新特性,Listener对应设计模式中的Listener模式,我感觉Listener也就是观察者模式,就是给一个类或者一个对象注册一个监听器,时刻观察被监听者的变化,并做相应的处理。
Listener的使用:
Listener就是实现相应的Listener接口,在每个接口中实现相应的方法,用来形成监听模式。
Listener的分类:
Servlet2.5包括8种LIstener,分为两类;一是用于监听Session,context,request等的创建,销毁和属性变化。另一类是对Session存放的对象进行监听。
首先介绍Session,context,request等的创建,销毁分别对应HttpSessionListener,ServletContextListener,ServletRequestListener。
代码:
说明context就是web应用程序
package com.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class ListenerTest1implements HttpSessionListener,ServletContextListener,ServletRequestListener{
@Override
public void requestDestroyed(ServletRequestEvent arg0) {
// TODO Auto-generated method stub
System.out.println("======request销毁======");
}
@Override
public void requestInitialized(ServletRequestEvent arg0) {
// TODO Auto-generated method stub
System.out.println("=====用户每次request请求====");
}
@Override
//context就是当前的web应用程序
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
System.out.println("=====Web应用程序关闭时====");
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
// TODO Auto-generated method stub
System.out.println("====Web应用程序部署到服务器上=====");
}
@Override
public void sessionCreated(HttpSessionEvent arg0) {
// TODO Auto-generated method stub
System.out.println("=====session会话创建时=====");
}
@Override
public void sessionDestroyed(HttpSessionEvent arg0) {
// TODO Auto-generated method stub
System.out.println("====session会话关闭或者超时===");
}
}
<listener>
<listener-class>com.listener.ListenerTest1</listener-class>
</listener>
监听对象的属性变化:
Listener用于监听Session,context,request的属性变化;对应的接口为:HttpSessionAttributeListener,ServletContextAttributeListener,ServletRequsetAttributeListener。当被监听者的对象中添加,删除,更新属性时分别执行xxxAdd(),xxxRemove(),xxxReplaced()方法。
代码:
package com.listener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
public class AttributeListenerTestimplements HttpSessionAttributeListener{
@Override
public void attributeAdded(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub
System.out.println("=====属性增加====");
}
@Override
public void attributeRemoved(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub
System.out.println("=====属性删除====");
}
@Override
public void attributeReplaced(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub
System.out.println("=====属性更新====");
}
}