⭐⭐⭐⭐⭐⭐
Github主页👉https://github.com/A-BigTree
笔记链接👉https://github.com/A-BigTree/Code_Learning
⭐⭐⭐⭐⭐⭐
如果可以,麻烦各位看官顺手点个star~😊
如果文章对你有所帮助,可以点赞👍收藏⭐支持一下博主~😆
文章目录
- 9 监听器
- 9.1 观察者模式
- 9.2 监听器简介
- 9.2.1 概念
- 9.2.2 分类
- 9.2.3 监听器列表
- `ServletContextListener`
- `HttpSessionListener`
- `ServletRequestListener`
- `ServletContextAttributeListener`
- `HttpSessionAttributeListener`
- `HttpSessionBindingListener`
- `HttpSessionActivationListener`
- 9.3 `ServletContextListener`
- 9.3.1 实用性
- 9.3.2 具体用法
- 创建监听器类
- 注册监听器
9 监听器
9.1 观察者模式
可见Java设计模式中的观察者模式。
- 观察者:监控『被观察者』的行为,一旦发现『被观察者』触发了事件,就会调用事先准备好的方法执行操作;
- 被观察者:『被观察者』一旦触发了被监控的事件,就会被『观察者』发现;
9.2 监听器简介
9.2.1 概念
监听器:专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动。 Servlet监听器:Servlet规范中定义的一种特殊类,它用于监听Web应用程序中的ServletContext,HttpSession 和HttpServletRequest等域对象的创建与销毁事件,以及监听这些域对象中的属性发生修改的事件。
9.2.2 分类
- 域对象监听器;
- 域对象的属性域监听器;
- Session域中数据的监听器;
9.2.3 监听器列表
ServletContextListener
作用:监听ServletContext
对象的创建与销毁
方法名 | 作用 |
---|---|
contextInitialized(ServletContextEvent sce) | ServletContext创建时调用 |
contextDestroyed(ServletContextEvent sce) | ServletContext销毁时调用 |
ServletContextEvent
对象代表从ServletContext
对象身上捕获到的事件,通过这个事件对象我们可以获取到ServletContext
对象。
HttpSessionListener
作用:监听HttpSession
对象的创建与销毁
方法名 | 作用 |
---|---|
sessionCreated(HttpSessionEvent hse) | HttpSession对象创建时调用 |
sessionDestroyed(HttpSessionEvent hse) | HttpSession对象销毁时调用 |
HttpSessionEvent
对象代表从HttpSession
对象身上捕获到的事件,通过这个事件对象我们可以获取到触发事件的HttpSession
对象。
ServletRequestListener
作用:监听ServletRequest
对象的创建与销毁
方法名 | 作用 |
---|---|
requestInitialized(ServletRequestEvent sre) | ServletRequest对象创建时调用 |
requestDestroyed(ServletRequestEvent sre) | ServletRequest对象销毁时调用 |
ServletRequestEvent
对象代表从HttpServletRequest
对象身上捕获到的事件,通过这个事件对象我们可以获取到触发事件的HttpServletRequest
对象。另外还有一个方法可以获取到当前Web应用的ServletContext
对象。
ServletContextAttributeListener
作用:监听ServletContext
中属性的创建、修改和销毁
方法名 | 作用 |
---|---|
attributeAdded(ServletContextAttributeEvent scab) | 向ServletContext中添加属性时调用 |
attributeRemoved(ServletContextAttributeEvent scab) | 从ServletContext中移除属性时调用 |
attributeReplaced(ServletContextAttributeEvent scab) | 当ServletContext中的属性被修改时调用 |
ServletContextAttributeEvent
对象代表属性变化事件,它包含的方法如下:
方法名 | 作用 |
---|---|
getName() | 获取修改或添加的属性名 |
getValue() | 获取被修改或添加的属性值 |
getServletContext() | 获取ServletContext对象 |
HttpSessionAttributeListener
作用:监听ServletRequest
中属性的创建、修改和销毁
方法名 | 作用 |
---|---|
attributeAdded(ServletRequestAttributeEvent srae) | 向ServletRequest中添加属性时调用 |
attributeRemoved(ServletRequestAttributeEvent srae) | 从ServletRequest中移除属性时调用 |
attributeReplaced(ServletRequestAttributeEvent srae) | 当ServletRequest中的属性被修改时调用 |
ServletRequestAttributeEvent
对象代表属性变化事件,它包含的方法如下:
方法名 | 作用 |
---|---|
getName() | 获取修改或添加的属性名 |
getValue() | 获取被修改或添加的属性值 |
getServletRequest () | 获取触发事件的ServletRequest对象 |
HttpSessionBindingListener
作用:监听某个对象在Session域中的创建与移除
方法名 | 作用 |
---|---|
valueBound(HttpSessionBindingEvent event) | 该类的实例被放到Session域中时调用 |
valueUnbound(HttpSessionBindingEvent event) | 该类的实例从Session中移除时调用 |
HttpSessionBindingEvent
对象代表属性变化事件,它包含的方法如下:
方法名 | 作用 |
---|---|
getName() | 获取当前事件涉及的属性名 |
getValue() | 获取当前事件涉及的属性值 |
getSession() | 获取触发事件的HttpSession对象 |
HttpSessionActivationListener
作用:监听某个对象在Session
中的序列化与反序列化。
方法名 | 作用 |
---|---|
sessionWillPassivate(HttpSessionEvent se) | 该类实例和Session一起钝化到硬盘时调用 |
sessionDidActivate(HttpSessionEvent se) | 该类实例和Session一起活化到内存时调用 |
HttpSessionEvent
对象代表事件对象,通过getSession()
方法获取事件涉及的HttpSession
对象。
9.3 ServletContextListener
9.3.1 实用性
将来学习SpringMVC的时候,会用到一个ContextLoaderListener
,这个监听器就实现了ServletContextListener
接口,表示对ServletContext
对象本身的生命周期进行监控。
9.3.2 具体用法
创建监听器类
public class AtguiguListener implements ServletContextListener {
@Override
public void contextInitialized(
// Event对象代表本次事件,通过这个对象可以获取ServletContext对象本身
ServletContextEvent sce) {
System.out.println("Hello,我是ServletContext,我出生了!");
ServletContext servletContext = sce.getServletContext();
System.out.println("servletContext = " + servletContext);
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("Hello,我是ServletContext,我打算去休息一会儿!");
}
}
注册监听器
<!-- 每一个listener标签对应一个监听器配置,若有多个监听器,则配置多个listener标签即可 -->
<listener>
<!-- 配置监听器指定全类名即可 -->
<listener-class>com.atguigu.listener.AtguiguListener</listener-class>
</listener>