一口折

导航

 

//小结:所有的监听器都是接口,实现这些接口只是为我们提供一些时机(静态代码块与实例代码块一样),让我们能在这些特殊的时机中实现想要完成的功能。监听器中方法的调用都是在触发相应事件后,服务器自动调用的,无需程序员主动调用

 

 

一、监听域对象的创建和销毁

 

ServletContextListener 监听器

  1. ServletContextListener 监听器作用 用来监听 ServletContext 域对象的创建和销毁的监听器;

 

  1. ServletContext 创建和销毁 ServletContext 创建:服务器启动的时候,为每个web应用创建单独的ServletContext对象; ServletContext 销毁:服务器关闭的时候,或者项目中web服务器移除的时候;或者服务器重启时

 

  1. ServletContextListener 监听器的方法 监听 ServletContext 对象创建:void contextInitialized (ServletContextEvent sce) 监听 ServletContext 对象销毁:void contextDestroyed(ServletContextEvent sce)

 

 

HttpSessionListener 监听器

  1. HttpSessionListener 监听器作用 用来监听 HttpSession 对象的创建和销毁;

 

  1. HttpSession 的创建和销毁 创建:服务器端第一次调用 getSession() 方法时创建 销毁:Session过期时,默认过期时间为30分钟;非正常关闭服务器;手动调用 session.invalidate();

 

  1. HttpSessionListener 监听器的方法 监听 HttpSession 对象创建:void sessionCreated(HttpSessionEvent se) 监听 HttpSession 对象销毁:void sessionDestroyed(HttpSessionEvent se)

 

 

ServletRequestListener 监听器

  1. ServletRequestListener 监听器作用 用来监听 ServletRequest 对象的创建和销毁;

 

  1. ServletRequest 的创建和销毁 创建:从客户端向服务器发送一次请求,服务器就会创建 request 对象; 销毁:服务器做出了响应之后,request 对象就销毁了;

 

  1. ServletRequestListener 监听器的方法 监听 ServletRequest 对象创建:void requestInitialized (ServletRequestEvent sre) 监听 ServletRequest 对象销毁:void requestDestroyed (ServletRequestEvent sre)

 

 

 

二、监听三个域对象的属性变更

 

ServletContextAttributeListener监听器

  1. //当向ServletContrext域中添加数据时会触发以下方法执行

void attributeAdded(ServletContextAttributeEvent scae)

 

  1. //当向ServletContrext域中删除数据时会触发以下方法执行

void attributeRemoved(ServletContextAttributeEvent scae)

//用getValue()方法获取的是删除之前的值,即先获取,再删除

 

  1. //当向ServletContrext域中修改数据时会触发以下方法执行

void attributeReplaced(ServletContextAttributeEvent scae)

//用getValue()方法获取的是修改之前的值,即先获取,再修改

 

HttpSessionAttributeListener监听器

  1. //当向session域中添加数据时会触发以下方法执行

void attributeAdded(HttpSessionBindingEvent se)

 

  1. //当向session域中删除数据时会触发以下方法执行

void attributeRemoved(HttpSessionBindingEvent se)

//用getValue()方法获取的是删除之前的值,即先获取,再删除

 

  1. //当向session域中修改数据时会触发以下方法执行

void attributeReplaced(HttpSessionBindingEvent se)

//用getValue()方法获取的是修改之前的值,即先获取,再修改

 

 

ServletRequestAttributeListener监听器

  1. //当向request域中添加数据时会触发以下方法执行

void attributeAdded(ServletRequestAttributeEvent srae)

 

  1. //当向request域中删除数据时会触发以下方法执行

void attributeRemoved(ServletRequestAttributeEvent srae)

//用getValue()方法获取的是删除之前的值,即先获取,再删除

 

  1. //当向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解绑

 

  1. //当当前类的对象绑定到session域时会触发该方法的执行

void valueBound(HttpSessionBindingEvent event)

 

  1. //当当前类的对象与session域解绑时会触发该方法的执行

void valueUnbound(HttpSessionBindingEvent event)

 

 

 

四、监听session对象的持久化

 

HttpSessionActivationListener监听器

//该监听器不需要注册,直接用

//钝化 (序列化) :把内存中的session数据通过序列化存储到硬盘中

//活化 (反序列化) :把硬盘中的session数据通过反序列化读取到内存中

//当用户在访问应用时,应用所在的服务器突然宕机了,此时存在一种机制,保证session中的数据不丢失——session的持久化,又称session的钝化与活化。在应用被关闭之前,将数据写入到硬盘中,重启之后再立马恢复session中的数据。这些都是服务器自动完成的,因此也提供了对应的两个时机。

//session中能被钝化的数据:只有存放在JVM堆内存中实现了Serializable接口的对象才可以,其他都不行

//被钝化的对象所在的类必须是一个实体类,而且必须实现HttpSessionActivationListenerSerializable接口才可以

 

  1. //当当前类的对象被钝化时会触发该方法的执行

void sessionWillPassivate(HttpSessionEvent se)

 

  1. //当当前类的对象被活化时会触发该方法的执行

void sessionDidActivate(HttpSessionEvent httpSessionEvent)

 

 

五、注册监听器

//在web.xml文件中对监听器进行注册

<web-app>
   <listener>
       <listener-class>实现监听器接口的全限定类名</listener-class>
   </listener>
</web-app>

 

 

 

六、Servlet3.0特性Filter注解注册

@WebListener
public class MyListener implements ServletRequestListener {

}

//WebListener注解只有一个属性:value(好像是起描述作用的,不常用)

 

若两种方式同时存在时

//若对Listener采用两种方式同时进行注册,其仅仅相当于一个Listener

 

posted on 2021-07-01 22:07  一口折  阅读(42)  评论(0)    收藏  举报