【listener-监听器】8大监听器、钝化、活化

学监听器,还是为了spring服务,说来不可思议。下面这段代码是web.xml里面常见代码,作用是启动spring,来看下原理。
web工程启动的时候,会创建ServletContext,并只有一个,applicationContext如果绑定ServletContext,那么也会随着项目启动而创建,也是唯一,完美。

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

来看底层代码截图,很清楚看到,applicationContext绑定ServletContext。

public class ContextLoaderListener extends ContextLoader implements ServletContextListene

图一
在这里插入图片描述

图二

在这里插入图片描述

图三
在这里插入图片描述

本章讲:
1.ServletContextListener
2.ServletAttributeListener
3.HttpSessionListener
4.HttpSessionActivationListener,钝化、活化
5.HttpBindingListener(略)
6.HttpSessionAttributeListener(略)
7.ServletRequestListener
8. ServletRequestAttributeListener (略)

(1)ServletContextListener

   1.contextInitialized(ServletContextEvent event);   
        通知正在收听的对象(MyServletContextListener),应用程序已经被加载和初始化(人话就是启动)。

    2.contextDestroyed(ServletCotextEvent event);   
        通知正在收听的对象(MyServletContextListener),应用程序已经被载出,即关闭(人话就是服务器关闭)。

在这里插入图片描述

在这里插入图片描述

(2)ServletAttributeListener;
主要实现监听ServletContext属性的增加,删除和修改。该接口提供了一下3个方法

        1.attributeAdded(ServletContextAttributeEvent event);   

               当有对象加入Application的范围时,通知正在收听的对象(就是写的那个MyServletContextAttributeListener)

        2.attributeReplaced(ServletContextAttributeEvent event);

               当在application的范围有对象取代另一个对象的时,通知正在收听的对象

        3.attributeRemoved(ServletContextAttributeEvent event); 

               当有对象从application的范围移除时,通知正在收听的对象

在这里插入图片描述

在这里插入图片描述

(3)HttpSessionListener

      访问html:不会触发
      访问jsp:会,因为jsp内置九大对象包括了一个session
      访问servlet:不一定,只要创建了session,据会触发。

          HTTP会话监听,该接口实现监听HTTP会话创建、销毁。该接口提供了一下两种方法

           1.sessionCreated(HttpSessionEvent event);       

         通知正在收听的对象,session已经被加载及初始化

           2. sessionDestoryed(HttpSessionEvent event)l        

              通知正在收听的对象,session已经被载出;

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

(6)HttpSessionAttributeListener、钝化、活化(不需要注册到web.xml)

该接口实现监听HTTP会话中属性的设置请求。该接口提供了以下两个方法。
1.sessionDidActivate(HttpSessionEvent event);
通知正在收听的对象,它的session已经变为有效状态。
2.sessionWillPassivate(HttpSessionEvent event);
通知正在收听的对象,它的session已经变为无效状态

1分钟不访问,就存到硬盘上。
在这里插入图片描述

首先给session存值
在这里插入图片描述

1分钟后…
在这里插入图片描述

关闭服务器(模拟服务器断电关闭)
在这里插入图片描述

重启服务器,接着在在浏览器上访问,此时,从硬盘上读出数据。
在这里插入图片描述

在这里插入图片描述

【优点】
其实就是在用户访问的时候,假如服务器突然关闭了,这个时候,用户的session就不存在了,假如是购物网站,也就相当于,用户好不容易选好的物品,刚刚添加到购物车,结果,因为服务器的突然关闭一下,什么都没了,这样很不好,于是我们就需要实现会话的持久化。
可以让我们在重新启动服务器之后用户的session还在服务器中存在!
即用户session的东西还全部在。
因为我们服务器在关闭的时候把用户的session存储到硬盘了(钝化),在重新启动服务器之后,我们又从硬盘中恢复到内存中!(注意,只要用户还没关闭浏览器,那个session会一直存在用户的客户端的)
然后启动后,用户的信息就不会丢失!

(7)ServletRequestListener;

1.requestInitalized(ServletRequestEvent event) 接收请求的时候触发
2.requestDestroyed(ServletRequestEvent event) 响应结束了触发

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值