学监听器,还是为了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) 响应结束了触发