六、Servlet监听器的分类

来源:互联网 发布:中国与东盟贸易数据 编辑:程序博客网 时间:2024/05/29 13:23

    • 二监听的分类按监听的事件划分
      • 1监听域对象自身的创建和销毁的事件监听器
        • 1ServletContextServletContextListener接口介绍如下
          • 例子测试ServletContextListener
        • 2HttpSessionHttpSessionListener接口介绍如下
          • 例子测试HttpSessionListener
        • 3ServletRequestServletRequestListener接口介绍如
          • 例子测试ServletRequestListener
      • 2监听域对象中的属性的增加和删除的事件监听器
        • 1ServletContextServletContextAttributeListener接口介绍如下
          • 例子测试ServletContextAttributeListener
        • 2HttpSessionHttpSessionAttributeListener接口介绍如下
          • 例子测试HttpSessionAttributeListener
        • 3ServletRequestServletRequestAttributeListener接口介绍如
          • 例子测试ServletRequestAttributeListener
      • 3监听绑定到HttpSession域中的某个对象的状态的事件监听器
        • 1HttpBindingListener接口
        • 2HttpSessionActivationListener接口监听Http会话的active和passivate状态接口中定义的回调方法有

二、监听的分类(按监听的事件划分)

1、监听域对象自身的创建和销毁的事件监听器

如下:

这里写图片描述

1.1、ServletContext——>ServletContextListener接口介绍如下:

ServletContextListener接口,主要实现监听ServletContext的创建和删除。同时它提供了两个方法,它们被称为“Web应用程序的生命周期方法”。

  • public void contextDestroyed(ServletContextEvent sce) {………………….}:通知正在收听的对象,应用程序已经被加载及初始化
  • public void contextInitialized(ServletContextEvent sce) {……………………}:通知正在收听的对象,应用程序已经被关闭。

这里写图片描述

例子:测试ServletContextListener

这里写图片描述

创建FistListener.java

package com;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;public class FirstListener implements ServletContextListener {    public void contextDestroyed(ServletContextEvent sce) {        System.out.println("destroy");      }    public void contextInitialized(ServletContextEvent sce) {    //通过上下文getServletContext(),和getInitParameter()获取web.xml值String init=sce.getServletContext().getInitParameter("init");        System.out.println("init的值为:"+init);    }}

配置web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">    <display-name>FirstListener</display-name>    <welcome-file-list>        <welcome-file>index.html</welcome-file>        <welcome-file>index.htm</welcome-file>        <welcome-file>index.jsp</welcome-file>        <welcome-file>default.html</welcome-file>        <welcome-file>default.htm</welcome-file>        <welcome-file>default.jsp</welcome-file>    </welcome-file-list>    <listener>        <listener-class>com.FirstListener</listener-class>    </listener>    <!--初始化值,以便FirstListener.java测试获取-->    <context-param>    <param-name>init</param-name>    <param-value>12345</param-value>    </context-param></web-app>

结果

这里写图片描述

1.2、HttpSession——>HttpSessionListener接口介绍如下:

HttpSessionListener接口实现监听HTTP会话创建、销毁。并提供了两个方法。

  • public void sessionCreated(HttpSessionEvent se) {…………..}:通知正在收听的对象,session已经被加载初始化
  • public void sessionDestroyed(HttpSessionEvent se) {…………..}:通知正在收听的对象,session已经被销毁

    这里写图片描述

例子:测试HttpSessionListener

这里写图片描述

package com;import javax.servlet.http.HttpSessionEvent;import javax.servlet.http.HttpSessionListener;public class SessionListenr implements HttpSessionListener {    public void sessionCreated(HttpSessionEvent se) {        // TODO Auto-generated method stub          System.out.println("sessionCreated");    }    public void sessionDestroyed(HttpSessionEvent se) {        // TODO Auto-generated method stub          System.out.println("sessionDestroyed");    }}

配置web.xml

<listener><listener-class>com.SessionListenr</listener-class></listener>

1.3、ServletRequest——>ServletRequestListener接口介绍如

ServletRequestListener监听客户端请求,对请求进行统一处理

  • public void requestInitialized(ServletRequestEvent rre) {……….}:通知正在收听对象,ServletRequest已经被加载初始化
  • public void requestDestroyed(ServletRequestEvent rre) {………}:通知正在收听的对象,ServletRequest
    已经被关闭

这里写图片描述

例子:测试ServletRequestListener

创建RequestListener.java

package com;import javax.servlet.ServletRequestEvent;import javax.servlet.ServletRequestListener;public class RequestListener implements ServletRequestListener {    public void requestDestroyed(ServletRequestEvent rre) {        // TODO Auto-generated method stub        System.out.println("requestDestroyed");     }    public void requestInitialized(ServletRequestEvent rre) {        // TODO Auto-generated method stub          System.out.println("requestInitialized");    }}

配置web.xml

    <listener>        <listener-class>com.RequestListener</listener-class>    </listener>

2、监听域对象中的属性的增加和删除的事件监听器

如下:

这里写图片描述

2.1、ServletContext——>ServletContextAttributeListener接口介绍如下:

ServletContextAttributeListener接口,主要实现监听ServletContext的属性增加、删除和修改。同时它提供了三个方法。

  • public void attributeAdded(ServletContextAttributeEvent scab) {……..}:当对象加入application的范围时,通知正在收听的对象
  • public void attributeRemoved(ServletContextAttributeEvent scab) {……..}:当在application的范围有对象取代另一个对象时,通知正在收听的对象
  • public void attributeReplaced(ServletContextAttributeEvent scab) {……..}:当有对象从application的范围移除时,通知正在收听的对象
例子:测试ServletContextAttributeListener

创建ServletContextAttributeListener.java

package com;import javax.servlet.ServletContext;import javax.servlet.ServletContextAttributeEvent;public class ServletContextAttributeListener implements javax.servlet.ServletContextAttributeListener{    public void attributeAdded(ServletContextAttributeEvent scab) {    }    public void attributeRemoved(ServletContextAttributeEvent scab) {    }    public void attributeReplaced(ServletContextAttributeEvent scab) {    }}

配置web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">    <display-name>FirstListener</display-name>    <welcome-file-list>        <welcome-file>index.html</welcome-file>        <welcome-file>index.htm</welcome-file>        <welcome-file>index.jsp</welcome-file>        <welcome-file>default.html</welcome-file>        <welcome-file>default.htm</welcome-file>        <welcome-file>default.jsp</welcome-file>    </welcome-file-list>    <!--配置ServletContextAttributeListener类-->    <listener>        <listener-class>com.ServletContextAttributeListener</listener-class>    </listener></web-app>

2.2、HttpSession——>HttpSessionAttributeListener接口介绍如下:

HttpSessionAttributeListener接口实现监听HTTP会话中属性的设置请求,提供以下两个方法。

  • public void attributeAdded(HttpSessionBindingEvent hsbe) {……}:当有对象加入session,通知正在收听的对象
  • public void attributeRemoved(HttpSessionBindingEvent hsbe) {…..}:当有对象从session的范围移除时,通知正在收听的对象(可通过HttpSessionBindingEent类主要有3个方法:getName()得到属性名字、getSession()得到这个session、getValues()得到属性值)
  • public void attributeReplaced(HttpSessionBindingEvent hsbe) {……..}:当在session的范围有对象取代另一个对象时,通知正在收听的对象
例子:测试HttpSessionAttributeListener

创建sessionAttribute.java

package com;import javax.servlet.http.HttpSessionAttributeListener;import javax.servlet.http.HttpSessionBindingEvent;public class sessionAttribute implements HttpSessionAttributeListener {    public void attributeAdded(HttpSessionBindingEvent hsbe) {        // TODO Auto-generated method stub    }    public void attributeRemoved(HttpSessionBindingEvent hsbe) {        // TODO Auto-generated method stub    }    public void attributeReplaced(HttpSessionBindingEvent hsbe) {        // TODO Auto-generated method stub    }}

配置web.xml

<listener><listener-class>com.sessionAttribute</listener-class></listener>

2.3、ServletRequest——>ServletRequestAttributeListener接口介绍如

ServletRequestAttributeListener监听请求的属性变化

  • 向某个request对象中增加属性时被调用public void attributeAdded(ServletRequestAttributeEvent a)方法。
  • 从某个request对象中删除属性时被调用public void attributeRemoved(ServletRequestAttributeEvent a)方法。
  • 修改某个request中的属性时被调用public void attributeReplaced(ServletRequestAttributeEvent a)方法。
例子:测试ServletRequestAttributeListener

创建RequestAttributeListener.java

package com;import javax.servlet.ServletRequestAttributeEvent;import javax.servlet.ServletRequestAttributeListener;public class RequestAttributeListener implements        ServletRequestAttributeListener {    public void attributeAdded(ServletRequestAttributeEvent attributeEvent) {        // TODO Auto-generated method stub    }    public void attributeRemoved(ServletRequestAttributeEvent attributeEvent) {        // TODO Auto-generated method stub    }    public void attributeReplaced(ServletRequestAttributeEvent attributeEvent) {        // TODO Auto-generated method stub    }}

配置web.xml

    <listener>        <listener-class>com.RequestAttributeListener</listener-class>    </listener>

3、监听绑定到HttpSession域中的某个对象的状态的事件监听器

如下:

这里写图片描述

这里写图片描述

3.1、HttpBindingListener接口

HttpBindingListener接口实现监听HTTP会话中对象的绑定信息。它是唯一不需要在web.xml中设定Listener的。并提供两个方法

  • 属性被加入到session中时,激发属性的 public void valueBound(HttpSessionBindingEvent a)
  • 属性被从session中删除时,激发属性的 public void valueUnbound(HttpSessionBindingEvent)

使用HttpSessionBindingEvent事件类对象的getSession( )方法可以得到这个session对象,使用 HttpSessionBindingEvent对象的getName( )方法得到属性的名字,使用getValue( )方法得到属性的值。

3.2、HttpSessionActivationListener接口:监听Http会话的active和passivate状态。接口中定义的回调方法有

HttpSessionActivationListener接口:监听Http会话的active和passivate状态。接口中定义的回调方法有

  • session对象被保存到磁盘时,激发 sessionWillPassivate(HttpSessionEvent)
  • session对象被调入内存时,激发 sessionDidActivate(HttpSessionEvent)

    Activate与Passivate是用于置换session对象的动作,当Web服务器因为资源利用或负载平衡等原因要将内存中的 session对象暂时储存至硬盘或其它储存器时(通过对象序列化),所作的动作称之为Passivate,而硬盘或储存器上的session对象重新加 载到JVM中时所采的动作称之为Activate。sessionDidActivate()方法与 sessionWillPassivate()方法分别于Activeate后与Passivate前被调用。