java web学习:三大组件 Listener基础

1、概念

事件源:被监听的对象 。监听器主要监听三个域对象 ,分别是 request  session  servletContext

监听器:用来监听某个对象状态变化的组件

响应行为:监听器监听的对象相应的状态发生变化时出发的动作。

2、Listener分类

在java web中,监听器的种类比较多,可以按照事件源(监听的对象)进行分类,也可以按照监听的动作进行分类。这里按照监听的动作进行分类。

(1)监听域对象自身创建和销毁的监听器:

①ServletContextListener接口 监听 SercvletContext对象

②HttpSessionListener接口 监听 HttpSession对象

③ServletRequestListener接口 监听 ServletRequest对象

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

⑤HttpSessionAttributeListener接口 监听 HttpSession对象属性

⑥ServletRequestAttributeListener接口 监听 ServletRequest对象属性

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

⑦HttpSessionBindingListener接口 监听 实现了HttpSessionBindingListener接口的对象的session绑定和解除

⑧HttpSessionActivationListener接口 (实现会话的持久化)

3、例子

(1)定义监听器

package com.web.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;



public class MyListener implements ServletContextListener {

    static {
        System.out.println("MyListener加载了");
    }
    
    public MyListener() {
      System.out.println("MyListener实例化了");
    }

    
    public void contextDestroyed(ServletContextEvent sce)  { 
       
    }

    
    public void contextInitialized(ServletContextEvent sce)  { 
        sce.getServletContext();
        System.out.println("ServletContext创建开始");
    }
    
}
package com.web.listener;

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class MySessionListener implements HttpSessionListener {

    static {
        System.out.println("MySessionListener加载了");
    }
    
    public MySessionListener() {
        System.out.println("MySessionListener实例化了");
    }

    
    public void sessionCreated(HttpSessionEvent se)  { 
    }

    
    public void sessionDestroyed(HttpSessionEvent se)  { 
    }
    
}
package com.web.listener;

import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;

public class MyRequestListener implements ServletRequestListener{
    static {
        System.out.println("MyRequestListener加载了");
    }
    
    public MyRequestListener(){
        System.out.println("MyRequestListener实例化了");
    }
    
    public  void requestDestroyed (ServletRequestEvent sre) {
    }

  
    public  void requestInitialized (ServletRequestEvent sre) {}

}

(2)注册监听器

<!-- 注册监听器 -->
<listener>
    <listener-class>com.web.listener.MyRequestListener</listener-class>
</listener>

<listener>
    <listener-class>com.web.listener.MySessionListener</listener-class>
</listener>
<listener>
    <listener-class>com.web.listener.MyListener</listener-class>
</listener>

(3)执行结果

监听器的加载顺序时web.xml中配置的顺序一直

4、生命周期

监听器在容器启动时加载并且实例化,容器关闭时销毁。

5、监听器,过滤器,Servlet三大组件的加载顺序

监听器与过滤器都是在web容器启动时就加载,但是监听器加载的更早。Servlet默认时在第一次访问时加载,通过<load-on-startup>标签可以配置成web容器启动时就加载,但是Servlet加载的时机是三大组件中最晚的。

所以三大组件的加载顺序是:Listener ->Filter->Servlet

猜你喜欢

转载自www.cnblogs.com/cplinux/p/12427420.html
今日推荐