Listener
Listener简介
Listener中文名为监听器,是javaWeb的三大组件之一,Servlet,Filter,Listener。
监听器监听事件的发生,当事件发生时,触发相应的处理函数。
监听器可以监听什么
监听器监听以下三个对象
- ServletRequest,请求对象
- ServletContext,代表当前整个web应用。
- HttpSession,session对象
监听器的种类
共有8个监听器,分为3大类。8个监听器都是接口。
- 生命周期监听器,监听三个对象的生命周期(创建到销毁)
- ServletContextListener
- ServletRequestListener
- HttpSessionListener
- 属性监听器,监听三个对象中属性的增删改。
当调用setAttribute()增 ,removeAttribute删,setAttribute改。- ServletContextAttributeListener
- ServletRequestAttributeListener
- HttpSessionAttributeListener
- session固有监听器
- HttpSessionActivationListener 监听Session活化钝化
- HttpSessionBindingListener 监听一个对象是否绑定到Session(保存在Session中)
监听器的使用方法
- 实现相应监听器的接口
public class RequestLifeListener implements ServletRequestListener{
@Override
public void requestDestroyed(ServletRequestEvent sre){
//请求结束销毁
//sre的作用
//1.获取servletContext
//2.获取servletRequest,获取当前的请求
sre.getServletRequest();
}
@Override
public void requestInitialized(ServletRequestEvent sre){
//发送请求初始化
}
}
- 在web.xml文件中配置
<listener>
<!--全类名-->
<listener-class>这里写全类名</listener-class>
</listener>
其他监听器的简单介绍
ServletContextListener
ServletContext应用启动创建,应用卸载销毁
public class ContextLifeListener implements ServletContextListener{
@Override
public void requestDestroyed(ServletContextEvent sre){
//应用启动创建
}
@Override
public void requestInitialized(ServletContextEvent sre){
//应用卸载销毁
}
}
HttpSessionListener
HttpSession新会话进来的时候创建对象,session失效的方法1. 强制失效,2 超时失效
public class SessionLifeListener implements HttpSessionListener{
@Override
public void sessionCreated(HttpSessionEvent se){
//新会话进来的时候创建对象
}
@Override
public void sessionDestroyed(HttpSessionEvent se){
//session失效
}
}
request域中属性变化
public class RequestAttributeListener implements ServletRequestAttributeListener{
@Override
public void attributeAdded(ServletRequestAttributeEvent srae){
System.out.println("request域中增加属性");
//增加的属性名
String name = srae.getName();
//增加的属性的值
Object object = srae.getValue();
}
@Override
public void attributeRemoved(ServletRequestAttributeEvent srae){
//在request移除属性的时候调用此方法
System.out.println("request域中移除属性");
}
@Override
public void attributeReplaces(ServletRequestAttributeEvent srae){
//在request替换属性的时候调用此方法。
//srae中的getValue()获得旧值。
//要获得新值可以通过rquest获得
System.out.println("request域中替换属性");
}
}
其他两种属性变换域request大体相同。
HttpSessionActivationListener
该监听器用于监听钝化和活化。可以监听Session中某个对象的钝化和活化。
//如果Session保存了Student对象,而我们要监听Student的钝化和活化,那么我们需要对Student做如下操作
public class Student implements HttpSessionActivationListener,Serializable{
//序列号
//属性,构造器,setter(),getter()方法。
//下面是HttpSessionActivationListener接口的方法
@Override
public void sessionWillPassivate(HttpSessionEvent se){
System.out.println("我和session一起钝化了");
//se可以获得Session
}
@Override
public void sessionDidActivate(HttpSessionEvent se){
System.out.println("我和session一起活化了");
}
}
HttpSessionBindingListener 监听一个对象是否保存在Session中
与上面的HttpSessionActivationListener使用方法基本相同。
//如果Session保存了Student对象,而我们要监听Student的钝化和活化,那么我们需要对Student做如下操作
public class Student implements HttpSessionBindingListener{
@Override
public void valueBound(HttpSessionBindindEvent event){
System.out.println("对象绑定在Session中了");
}
@Override
public void valueUnBound(HttpSessionBindindEvent event){
System.out.println("对象从Session中解绑了");
//Session失效也算解绑.
}
}