servlet技术中的listener有啥具体作用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了servlet技术中的listener有啥具体作用相关的知识,希望对你有一定的参考价值。

参考技术A Listener是Servlet的监听器,它可以监听客户端的请求、服务端的操作等。通过监听器,可以自动激发一些操作,比如监听在线的用户的数量。当增加一个HttpSession时,就激发sessionCreated(HttpSessionEvent se)方法,这样就可以给在线人数加1。常用的监听接口有以下几个:
ServletContextAttributeListener监听对ServletContext属性的操作,比如增加、删除、修改属性。
ServletContextListener监听ServletContext。当创建ServletContext时,激发contextInitialized(ServletContextEvent sce)方法;当销毁ServletContext时,激发contextDestroyed(ServletContextEvent sce)方法。
HttpSessionListener监听HttpSession的操作。当创建一个Session时,激发session Created(HttpSessionEvent se)方法;当销毁一个Session时,激发sessionDestroyed (HttpSessionEvent se)方法。
HttpSessionAttributeListener监听HttpSession中的属性的操作。当在Session增加一个属性时,激发attributeAdded(HttpSessionBindingEvent se) 方法;当在Session删除一个属性时,激发attributeRemoved(HttpSessionBindingEvent se)方法;当在Session属性被重新设置时,激发attributeReplaced(HttpSessionBindingEvent se) 方法。

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.
         当属性在会话中被替换。
      */
    }
}

以上是关于servlet技术中的listener有啥具体作用的主要内容,如果未能解决你的问题,请参考以下文章

在JAVA中filter有啥作用?

Listener详解

web.xml中的servlet配置的url-pattern和URL有啥关系吗?

Java实战之04JavaWeb-07Listener和Filter

监听器listener&过滤器filter

java 中的过滤器filter 都有啥作用