一、监听器 Listener概述
1、监听器 Listener介绍
(1)介绍
- Servlet监听器是Servlet规范中定义的一种特殊类,用于监听ServletContext、HttpSession和ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中属性发生修改的事件。
- 监听器监听的内容主要为对象的创建和销毁、属性的改变等事件,在事件发生之前和之后进行一些处理。
- 监听器是 JAVA EE 三大组件之一,用于监听服务器的某些特殊动作,当服务器执行这些动作时,监听器中的方法会自动执行,不需要手动调用。
(2)作用
监听作用域对象request. session. application的创建、销毁和内容的改变
(3)监听器配置文件
<listener>
<listener-class></listener-class>
</listener>
- listener-class:监听器类的路径
二、监听器示例
1、常见监听器
(1)ServletRequestListener监听器
监听request对象的创建和销毁
- 实现:ServletRequestListener接口
- 重写:requestInitialized(ServletRequestEvent sre) //创建
- 重写:requestDestroyed(ServletRequestEvent sre) //销毁
public class ServletRequestListenerDemo implements ServletRequestListener {
@Override
public void requestInitialized(ServletRequestEvent sre) {
System.out.println("初始化");
}
@Override
public void requestDestroyed(ServletRequestEvent sre) {
System.out.println("销毁");
}
}
通过形参sre可以获取到监听的request对象
sre.getServletRequest();
(2)HttpSessionAttributeListener监听器
监听request的作用域的数据的变更
- 实现:ServletRequestAttributeListener 接口
- 重写:attributeAdded(ServletRequestAttributeEvent srae)
- 重写:attributeRemoved(ServletRequestAttributeEvent srae)
- 重写:attributeReplaced(ServletRequestAttributeEvent srae)
public class ServletRequestAttributeListenerDemo implements ServletRequestAttributeListener {
@Override
public void attributeAdded(ServletRequestAttributeEvent srae) {
System.out.println("新增");
}
@Override
public void attributeRemoved(ServletRequestAttributeEvent srae) {
System.out.println("移除");
}
@Override
public void attributeReplaced(ServletRequestAttributeEvent srae) {
System.out.println("替换");
}
}
通过形参srae可以获取到监听的数据的键值对信息
srae.getName();
srae.getValue();
(3)HttpSessionListener
监听器
监听session的创建和销毁,当服务器中产生新的 HttpSession 对象以及 HttpSession 失效时,HttpSessionListener 中的方法将会自动执行
- 实现:HttpSessionListener 接口
- 重写:sessionCreated(HttpSessionEvent event)
- 重写:sessionDestroyed(HttpSessionEvent event)
@WebListener
public class HttpSessionListenerDemo implements HttpSessionListener{
@Override
public void sessionCreated(HttpSessionEvent event) {
System.out.println("监听session的创建");
}
@Override
public void sessionDestroyed(HttpSessionEvent event) {
System.out.println("监听session的销毁");
}
}
通过形参event可以获取到监听的session对象
event.getSession();
(4)HttpSessionSttributeListener
监听器
监听session中的数据变更,当Session对象中新增了数据、修改了数据、删除了数据时,这个监听器的方法将会自动执行。
- 实现:HttpSessionAttributeListener 接口
- 重写:attributeAdded(HttpSessionBindingEvent event)
- 重写:attributeRemoved(HttpSessionBindingEvent event)
- 重写:attributeReplaced(HttpSessionBindingEvent event)
public class AttributeListenerDemo implements HttpSessionAttributeListener{
@Override
public void attributeAdded(HttpSessionBindingEvent event) { //新增方法
System.out.println("session中新增了数据:" + event.getValue());
}
@Override
public void attributeRemoved(HttpSessionBindingEvent event) { //移除方法
System.out.println("session中移除了数据:" + event.getValue());
}
@Override
public void attributeReplaced(HttpSessionBindingEvent event) { //修改方法
System.out.println("session中替换了数据:" + event.getValue());
}
}
通过形参event可以获取到监听的session的数据
event.getName();
event.getValue();
(5)ServletContextListener
监听器
监听application,当ServletContext 对象被创建和销毁的时候,ServletContextListener
中的方法将会自动执行。
- 实现:ServletContextListener 接口
- 重写:contextDestroyed(ServletContextEvent event)
- 重写:contextInitialized(ServletContextEvent event)
public class ServletContextListenerDemo implements ServletContextListener{
@Override
public void contextInitialized(ServletContextEvent sre) {
System.out.println("有新的ServletContext 对象被创建");
}
@Override
public void contextDestroyed(ServletContextEvent sre) {
System.out.println("有新的ServletContext 对象被销毁");
}
}
通过形参event可以获取到监听的application的对象
sre.getServletContext();
(6)ServletContextAttributeListener监听器
监听application的数据的变更,如添加数据、删除数据、修改数据
- 实现:ServletContextAttributeListener 接口
- 重写:attributeAdded(ServletContextAttributeEvent scae)
- 重写:attributeRemoved(ServletContextAttributeEvent scae)
- 重写:attributeReplaced(ServletContextAttributeEvent scae)
public class ServletContextAttributeListenerDemo implements ServletContextAttributeListener {
@Override
public void attributeAdded(ServletContextAttributeEvent scae) {
System.out.println("添加");
}
@Override
public void attributeRemoved(ServletContextAttributeEvent scae) {
System.out.println("移除");
}
@Override
public void attributeReplaced(ServletContextAttributeEvent scae) {
System.out.println("修改");
}
}
通过形参scae可以获取到监听的application的数据
scae.getName();
scae.getValue();