监听器 listener
简介
- 作用: 监听ServletContext,HttpSession,ServletRequest的创建,销毁,以及属性发生改变
- 监听器的分类,servlet定义了多种类型的监听器,用于监听的事件源分别是ServletContext,HttpSession,ServletRequest这三个域对象
,Servlet规范针对这三个对象的操作,又针对这三种对象的操作,又把多种类型的监听器分为三种类型。-
- 监听域对象自身的创建和销毁的事件监听器。
-
- 监听域对象中的属性的增加和删除的事件监听器。
-
- 监听绑定到HttpSession域中的某个对象的状态的事件监听器。
-
监听ServletContext对象的创建和销毁
-
可以通过实现 ServletContextListener 接口来对 ServletContext对象进行监听
- ServletContext对象被创建时,会调用contextInitialized() 方法
- ServletContext对象被销毁时,会调用contextDestroyed() 方法
-
监听器代码
public class ServletContextListener implements javax.servlet.ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
//监听ServletContext被初始化
//获取ServletContext对象
ServletContext context = servletContextEvent.getServletContext();
System.out.println("ServletContext对象被创建");
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
System.out.println("ServletContext对象被销毁");
}
}
- 监听ServletContext属性的代码
public class ServletContextAttributeListener implements javax.servlet.ServletContextAttributeListener {
@Override
public void attributeAdded(ServletContextAttributeEvent servletContextAttributeEvent) {
//当添加一个属性到ServletContext对象时
String name = servletContextAttributeEvent.getName();
Object value = servletContextAttributeEvent.getValue();
System.out.println(name+"---add--->"+value);
}
@Override
public void attributeRemoved(ServletContextAttributeEvent servletContextAttributeEvent) {
//当移除一个属性到ServletContext对象时
String name = servletContextAttributeEvent.getName();
Object value = servletContextAttributeEvent.getValue();
System.out.println(name+"---remove--->"+value);
}
@Override
public void attributeReplaced(ServletContextAttributeEvent servletContextAttributeEvent) {
//当修改一个属性到ServletContext对象时
String name = servletContextAttributeEvent.getName();
Object value = servletContextAttributeEvent.getValue();
System.out.println(name+"---replace--->"+value);
}
}
- web.xml代码
<!--注册监听器-->
<listener>
<listener-class>cn.lzm.servlet.ServletContextListener</listener-class>
</listener>
<listener>
<listener-class>cn.lzm.servlet.ServletContextAttributeListener</listener-class>
</listener>
监听session对象的创建和销毁
- 实现 HttpSessionListener 接口
- 监听属性实现 HttpSessionAttributeListener,不做演示
public class SessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
HttpSession session = httpSessionEvent.getSession();
System.out.println("创建session对象:"+session);
}
@Override
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
HttpSession session = httpSessionEvent.getSession();
System.out.println("销毁session对象:"+session);
}
}
- web.xml
<listener>
<listener-class>cn.lzm.servlet.SessionListener</listener-class>
</listener>
监听Request对象的创建和销毁
- 实现 ServletRequestListener
- 监听属性实现 ServletRequestAttributeListener
- 监听器代码
public class RequestListener implements ServletRequestListener {
@Override
public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
ServletRequest servletRequest = servletRequestEvent.getServletRequest();
System.out.println("创建了Servlet"+servletRequest.getClass());
}
@Override
public void requestInitialized(ServletRequestEvent servletRequestEvent) {
ServletRequest servletRequest = servletRequestEvent.getServletRequest();
System.out.println("销毁了Servlet"+servletRequest.getClass());
}
}
- web.xml
<!--request监听器-->
<listener>
<listener-class>cn.lzm.servlet.RequestListener</listener-class>
</listener>

浙公网安备 33010602011771号