1、监听器简介
Listener是JavaWeb中三大组件之一。Servlet、Filter、Listener
三大组件都有的共同特点,都需要实现一个接口,并在web.xml文件配置。
JavaWeb中的监听器的监听对象是谁?
ServletContext
HttpSession
ServletRequest
2、监听器分类
JavaWeb中的监听器共有三种,共8个监听器
- 生命周期监听器,监听三个对象的创建和销毁的事件。
- 属性监听器,监听三个对象中属性的变化。
- session对象监听器,将它session中的属性,以及session的活化和钝化。
3、生命周期监听器
1)ServletContextListener
- ServletContext生命周期监听器
- void contextDestroyed(ServletContextEvent sce)
- 该方法在ServletContext对象销毁前调用
- void contextInitialized(ServletContextEvent sce)
- 该方法在ServletContext对象创建之前调用。
- ServletContextEvent 对象可以获取到ServletContext对象
ServletContextEvent.getServletContext();
2)HttpSessionListener
- HttpSession生命周期监听器
- void sessionCreated(HttpSessionEvent se)
- 该方法在Session创建时调用
- void sessionDestroyed(HttpSessionEvent se)
- 在session销毁时调用
- HttpSessionEvent
- 可以获取HttpSession对象
3)ServletRequestListener
- void requestDestroyed(ServletRequestEvent sre)
- 在request对象销毁时调用
- void requestInitialized(ServletRequestEvent sre)
- 在request对象创建时调用
- ServletRequestEvent
可以获取ServletContext对象和ServletRequest
4)编写一个监听器的步骤
(1)创建一个类并实现一个接口。
(2)在web.xml文件中注册监听器。
4、属性监听器
属性监听器,监听三个域中的属性的变化:添加一个属性,替换一个属性,移除一个属性
1)ServletContextAttributeListener
- 监听ServletContext中的属性的变化
void attributeAdded(ServletContextAttributeEvent scab)
- 当向ServletContext中添加属性时调用
attributeRemoved(ServletContextAttributeEvent scab)
- 移除属性时调用
attributeReplaced(ServletContextAttributeEvent scab)
- 替换一个属性时调用
2)HttpSessionAttributeListener
void attributeAdded(HttpSessionBindingEvent se)
void attributeRemoved(HttpSessionBindingEvent se)
void attributeReplaced(HttpSessionBindingEvent se)
- HttpSessionBindingEvent
(1)可以获取到属性名 getName()
(2)可以获取属性的旧值 getValue()
(3)可以获取到HttpSession对象 getSession();
3)ServletRequestAttributeListener
void attributeAdded(ServletRequestAttributeEvent srae)
void attributeRemoved(ServletRequestAttributeEvent srae)
void attributeReplaced(ServletRequestAttributeEvent srae)
以下两个监听器监听session域中的属性的。
5、HttpSessionBindingListener
监听session域中某一个类的实例的添加和移除。
该接口由JavaBean来实现,不需要再web.xml文件配置
valueBound(HttpSessionBindingEvent event)
- 当该类的实例,作为属性设置进session域中时调用
valueUnbound(HttpSessionBindingEvent event)
- 当该类的实例,从session域中被移除时调用
6、HttpSessionActivationListener
监听session域中的某类属性,和session一起活化和钝化的事件。
该接口由JavaBean来实现,同样不需要再web.xml中配置
void sessionDidActivate(HttpSessionEvent se)
- 当前对象和session一起被活化到内存时调用
void sessionWillPassivate(HttpSessionEvent se)
当前对象和session一起钝化到硬盘时调用
7、code
1)InitDBDataListener
package com.alex.web.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
* ServletContextListener : 用于监听ServletContext 对象(application)的创建和销毁
*
*/
public class InitDBDataListener implements ServletContextListener {
public InitDBDataListener(){
System.out.println("InitDBDataListener 对象被创建了");
}
// 用于监听application对象销毁后,需要执行的业务逻辑
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println(InitDBDataListener.class.getName() + "- contextDestroyed 执行了 - 删除数据库模拟数据");
}
// 用于监听application对象创建后需要执行的业务逻辑
// application 对象在服务器启动时,加载当前项目创建
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println(InitDBDataListener.class.getName() + "- contextInitialized 执行了 - 往数据库插入了模拟数据");
}
}
2)web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>web_listener</display-name>
<!--
web 开发三大组件: listener、filter、servlet
同时存在的时候,在web.xml创建的先后顺序
listener > filter > servlet
-->
<!-- 监听器对象,服务器启动时 -->
<listener>
<listener-class>com.alex.web.listener.InitDBDataListener</listener-class>
</listener>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
网友评论