学监听器,还是为了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

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

图二

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

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

本章讲:
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),应用程序已经被载出,即关闭(人话就是服务器关闭)。

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

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

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

        1.attributeAdded(ServletContextAttributeEvent event);   

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

        2.attributeReplaced(ServletContextAttributeEvent event);

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

        3.attributeRemoved(ServletContextAttributeEvent event); 

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

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

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

(3)HttpSessionListener

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

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

           1.sessionCreated(HttpSessionEvent event);       

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

           2. sessionDestoryed(HttpSessionEvent event)l        

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

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

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

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

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

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

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

1分钟不访问,就存到硬盘上。
【listener-监听器】8大监听器、钝化、活化

首先给session存值
【listener-监听器】8大监听器、钝化、活化

1分钟后…
【listener-监听器】8大监听器、钝化、活化

关闭服务器(模拟服务器断电关闭)
【listener-监听器】8大监听器、钝化、活化

重启服务器,接着在在浏览器上访问,此时,从硬盘上读出数据。
【listener-监听器】8大监听器、钝化、活化

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

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

(7)ServletRequestListener;

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

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

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

相关文章:

  • 2022-03-05
  • 2022-03-01
  • 2021-11-29
猜你喜欢
  • 2022-12-23
  • 2021-08-14
  • 2021-04-16
  • 2021-10-10
相关资源
相似解决方案