//小结:所有的监听器都是接口,实现这些接口只是为我们提供一些时机(静态代码块与实例代码块一样),让我们能在这些特殊的时机中实现想要完成的功能。监听器中方法的调用都是在触发相应事件后,服务器自动调用的,无需程序员主动调用
一、监听域对象的创建和销毁
ServletContextListener 监听器
-
ServletContextListener 监听器作用 用来监听 ServletContext 域对象的创建和销毁的监听器;
-
ServletContext 创建和销毁 ServletContext 创建:服务器启动的时候,为每个web应用创建单独的ServletContext对象; ServletContext 销毁:服务器关闭的时候,或者项目中web服务器移除的时候;或者服务器重启时
-
ServletContextListener 监听器的方法 监听 ServletContext 对象创建:void contextInitialized (ServletContextEvent sce); 监听 ServletContext 对象销毁:void contextDestroyed(ServletContextEvent sce);
HttpSessionListener 监听器
-
HttpSessionListener 监听器作用 用来监听 HttpSession 对象的创建和销毁;
-
HttpSession 的创建和销毁 创建:服务器端第一次调用 getSession() 方法时创建 销毁:Session过期时,默认过期时间为30分钟;非正常关闭服务器;手动调用 session.invalidate();
-
HttpSessionListener 监听器的方法 监听 HttpSession 对象创建:void sessionCreated(HttpSessionEvent se); 监听 HttpSession 对象销毁:void sessionDestroyed(HttpSessionEvent se);
ServletRequestListener 监听器
-
ServletRequestListener 监听器作用 用来监听 ServletRequest 对象的创建和销毁;
-
ServletRequest 的创建和销毁 创建:从客户端向服务器发送一次请求,服务器就会创建 request 对象; 销毁:服务器做出了响应之后,request 对象就销毁了;
-
ServletRequestListener 监听器的方法 监听 ServletRequest 对象创建:void requestInitialized (ServletRequestEvent sre); 监听 ServletRequest 对象销毁:void requestDestroyed (ServletRequestEvent sre);
二、监听三个域对象的属性变更
ServletContextAttributeListener监听器
-
//当向ServletContrext域中添加数据时会触发以下方法执行
void attributeAdded(ServletContextAttributeEvent scae)
-
//当向ServletContrext域中删除数据时会触发以下方法执行
void attributeRemoved(ServletContextAttributeEvent scae)
//用getValue()方法获取的是删除之前的值,即先获取,再删除
-
//当向ServletContrext域中修改数据时会触发以下方法执行
void attributeReplaced(ServletContextAttributeEvent scae)
//用getValue()方法获取的是修改之前的值,即先获取,再修改
HttpSessionAttributeListener监听器
-
//当向session域中添加数据时会触发以下方法执行
void attributeAdded(HttpSessionBindingEvent se)
-
//当向session域中删除数据时会触发以下方法执行
void attributeRemoved(HttpSessionBindingEvent se)
//用getValue()方法获取的是删除之前的值,即先获取,再删除
-
//当向session域中修改数据时会触发以下方法执行
void attributeReplaced(HttpSessionBindingEvent se)
//用getValue()方法获取的是修改之前的值,即先获取,再修改
ServletRequestAttributeListener监听器
-
//当向request域中添加数据时会触发以下方法执行
void attributeAdded(ServletRequestAttributeEvent srae)
-
//当向request域中删除数据时会触发以下方法执行
void attributeRemoved(ServletRequestAttributeEvent srae)
//用getValue()方法获取的是删除之前的值,即先获取,再删除
-
//当向request域中修改数据时会触发以下方法执行
void attributeReplaced(ServletRequestAttributeEvent srae)
//用getValue()方法获取的是修改之前的值,即先获取,再修改
三、监听session对象的绑定与解绑
HttpSeesionBindingListener监听器
//该监听器不需要注册,直接用
//一个实体类(比如一个JavaBean规范的Student类),实现了HttpSeesionBindingListener接口
//当Student类的对象stu被放到session域中,即session.setAttribute("stu",stu),则称该对象与session域绑定
//当stu对象从session域中被删除时,即session.serAttribute("stu"),称该对象与session解绑
-
//当当前类的对象绑定到session域时会触发该方法的执行
void valueBound(HttpSessionBindingEvent event)
-
//当当前类的对象与session域解绑时会触发该方法的执行
void valueUnbound(HttpSessionBindingEvent event)
四、监听session对象的持久化
HttpSessionActivationListener监听器
//该监听器不需要注册,直接用
//钝化 (序列化) :把内存中的session数据通过序列化存储到硬盘中
//活化 (反序列化) :把硬盘中的session数据通过反序列化读取到内存中
//当用户在访问应用时,应用所在的服务器突然宕机了,此时存在一种机制,保证session中的数据不丢失——session的持久化,又称session的钝化与活化。在应用被关闭之前,将数据写入到硬盘中,重启之后再立马恢复session中的数据。这些都是服务器自动完成的,因此也提供了对应的两个时机。
//session中能被钝化的数据:只有存放在JVM堆内存中实现了Serializable接口的对象才可以,其他都不行
//被钝化的对象所在的类必须是一个实体类,而且必须实现HttpSessionActivationListener和Serializable接口才可以
-
//当当前类的对象被钝化时会触发该方法的执行
void sessionWillPassivate(HttpSessionEvent se)
-
//当当前类的对象被活化时会触发该方法的执行
void sessionDidActivate(HttpSessionEvent httpSessionEvent)
五、注册监听器
//在web.xml文件中对监听器进行注册
<web-app>
<listener>
<listener-class>实现监听器接口的全限定类名</listener-class>
</listener>
</web-app>
六、Servlet3.0特性Filter注解注册
//WebListener注解只有一个属性:value(好像是起描述作用的,不常用)
若两种方式同时存在时
//若对Listener采用两种方式同时进行注册,其仅仅相当于一个Listener
浙公网安备 33010602011771号