Listener详解

Posted 剪水行舟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Listener详解相关的知识,希望对你有一定的参考价值。

Listener

基本介绍

什么是监听器
Javaweb中的监听器是用于监听web常见对象HttpServletRequest, HttpSession, ServletContext

image

使用方法

作用

在JavaWeb中Listener是Servlet规范定义的一种特殊类,主要用于监听3个作用域创建销毁,以及其属性变更

Servlet中的三个作用域分别为

  1. HttpServletRequest
  2. HttpSession
  3. ServletContext

HttpServletRequest作用域对应的监听器是ServletRequestListener(监听request的创建和销毁ServletRequestAttributeListener(监听request中属性的变更)

HttpSession作用域对应的监听器是HttpSessionListener(监听session的创建)和HttpSessionAttributeListener(监听session中属性的变更)

ServletContext作用域对应的监听器是ServletContextListener(监听servletContext的创建于销毁)和ServletContextAttributeListener(servletContext中属性的变更)

监听机制相关概念

1.事件----一件事情

2.事件源---产生这件事情的源头

3.注册监听---将监听器与事件绑定,当事件产生时,监听器可以知道,并进行处理。

4.监听器---对某件事情进行处理监听的一个对象

监听器的创建步骤

1创建监听器接口

2重写接口方法.

3配置web.xml / 注解

4测试监听器

使用

@Override
    public void attributeAdded(ServletContextAttributeEvent scae) {
        /*添加属性时调用*/
        System.out.println("新增的属性:"+scae.getName()+":"+scae.getValue());
    }

    @Override
    public void attributeRemoved(ServletContextAttributeEvent scae) {
        /*属性移除时调用*/
        System.out.println("移除的属性:"+scae.getName()+":"+scae.getValue());
    }

    @Override
    public void attributeReplaced(ServletContextAttributeEvent scae) {
        /*属性替换时调用(修改值)*/
        System.out.println("替换的属性:"+scae.getName()+":"+scae.getValue());
    }

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        /*servletContext创建时调用*/
        System.out.println("项目启动了");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        /*servletContext销毁时调用*/
        System.out.println("项目停止了");
    }
/**
 * @Function :
 * date 2021/5/22 - 23:28
 * How :
 */

@WebListener
public class ListenerDemo implements ServletContextListener,
        HttpSessionListener, HttpSessionAttributeListener {

    // Public constructor is required by servlet spec
    public ListenerDemo() {
    }

    // -------------------------------------------------------
    // ServletContextListener implementation
    // ServletContextListener实现
    // -------------------------------------------------------

    /**
     * 服务器启动后自动执行
     * @param sce
     */
    @Override
    public void contextInitialized(ServletContextEvent sce) {
      /* This method is called when the servlet context is
         initialized(when the Web application is deployed). 
         You can initialize servlet context related data here.
         当servlet上下文为已初始化(当部署Web应用程序时)。
         您可以在这里初始化servlet上下文相关数据。
      */
    }

    /**
     * 服务器正常关闭后被执行
     * @param sce
     */
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
      /* This method is invoked when the Servlet Context 
         (the Web application) is undeployed or 
         Application Server shuts down.
		当Servlet上下文,(Web应用程序)未部署或
		应用程序服务器关闭。
      */
    }

    // -------------------------------------------------------
    // HttpSessionListener implementation
    // HttpSessionListener实现
    // -------------------------------------------------------
    public void sessionCreated(HttpSessionEvent se) {
        /* Session is created. 
        	session创建     */
    }

    public void sessionDestroyed(HttpSessionEvent se) {
        /* Session is destroyed.
        	session 销毁    */
    }

    // -------------------------------------------------------
    // HttpSessionAttributeListener implementation
    // HttpSessionAttributeListener 实现
    // -------------------------------------------------------

    public void attributeAdded(HttpSessionBindingEvent sbe) {
      /* This method is called when an attribute 
         is added to a session.
         当属性已添加到会话。
      */
    }

    public void attributeRemoved(HttpSessionBindingEvent sbe) {
      /* This method is called when an attribute
         is removed from a session.
         当属性从会话中删除。
      */
    }

    public void attributeReplaced(HttpSessionBindingEvent sbe) {
      /* This method is invoked when an attribute
         is replaced in a session.
         当属性在会话中被替换。
      */
    }
}

以上是关于Listener详解的主要内容,如果未能解决你的问题,请参考以下文章

Listener详解

JSF:-DataType 和 Action Listener 的问题

Web.xml详解(转)(Filter,context,listener)

转:web.xml 中的listener filterservlet 加载顺序及其详解

(转)web.xml 中的listener filterservlet 加载顺序及其详解

(转载)web.xml 中的listener filterservlet 加载顺序及其详解