首页 > 其他分享 >监听器 Listener

监听器 Listener

时间:2024-03-31 10:34:14浏览次数:25  
标签:Web 销毁 监听 Listener 事件 监听器 public

目录

1、什么是Listener 

2、在Web中的重要作用

3、怎样使用

4、在不同层面的应用

1)JavaScript事件监听:

2)Web框架中的监听器:

3)应用服务器和容器中的监听器:

区别:


1、什么是Listener 

Listener是计算机科学中的一个重要概念,用于监视和响应特定事件的发生。

在Web中,监听器的作用是在事件发生时触发预先定义的动作或逻辑,实现程序的交互和响应。

Servlet API提供的几种常用的监听器,各自负责监听不同的对象或事件:

  • ServletContextListener:Web应用程序的启动和关闭事件
  • HttpSessionListener:会话的创建和销毁事件
  • ServletRequestListener:请求的创建和销毁事件

此外,还有用于监听特定对象(如Context、Session、Request)的监听器,如ServletContextAttributeListener、HttpSessionAttributeListener等。

2、在Web中的重要作用

监听器能够监听并响应Web应用中的各种事件,从而实现各种功能需求,提高可靠性、安全性和性能:

应用程序生命周期管理:监听器能够监听Web应用程序的启动和销毁事件。在应用程序启动时,监听器可以加载配置文件、初始化数据或执行其他必要的初始化操作。在应用程序销毁时,监听器则可以进行资源清理、断开数据库连接等清理工作。

会话管理:监听器可以监听会话的创建和销毁,以及会话属性的添加、修改和删除。通过监听这些事件,可以实现用户在线状态的监控、会话超时处理、用户行为跟踪等功能。

请求处理:监听器能够监听请求的创建和销毁,以及请求属性的变化。这使得在请求处理过程中,可以执行一些额外的操作,如记录请求信息、验证用户身份、处理异常等。

事件通知与响应:监听器可以与事件通知机制结合,使得在特定事件发生时,能够自动触发相应的处理逻辑。这种机制使得Web应用程序能够更加灵活地响应各种事件,提高了系统的可扩展性和可维护性。

安全性与访问控制:通过监听器,可以实现用户访问权限的控制、安全事件的记录和处理等功能。例如,可以监听用户的登录和注销事件,对非法访问进行拦截和处理。

性能监控与优化:监听器还可以用于收集和分析Web应用程序的性能数据,如请求响应时间、资源使用情况等。通过这些数据,可以找出性能瓶颈并进行优化,提高Web应用程序的运行效率。

3、怎样使用

  • 定义一个类,实现相应的监听器接口
  • 重写方法
  • 用@WebListener:这个注解告诉Servlet容器这个类是一个监听器,并在应用程序启动时自动注册它。
@WebListener
public class ContextLoaderListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        //加载资源

    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        //释放资源

    }
}

4、在不同层面的应用

1)JavaScript事件监听

在Web中,最基本的监听器使用方式是通过JavaScript监听DOM元素上的事件。如使用addEventListener方法监听一个按钮的点击事件,并在事件发生时执行特定的回调函数。

var button = document.getElementById('myButton');  
button.addEventListener('click', function() {  
    alert('Button clicked!');  
});

这种监听器直接使用了浏览器提供的API。除了DOM事件,浏览器还提供了许多其他API来监听特定事件,如监听窗口大小变化、网络状态变化、设备输入等。

2)Web框架中的监听器

当使用Web框架(如Spring MVC、Angular、React、Vue等)时,框架通常会提供自己的事件监听机制。这些机制通常用于监听框架内部的状态变化、组件间的通信、路由变化等。在这些框架中,开发者通常会按照框架的约定来注册和监听事件。

以Spring MVC为例,虽然它主要关注于后端MVC架构的实现,但它也提供了对HTTP请求和响应的监听能力,通过实现特定的接口或注解来监听请求的处理过程。

对于前端框架如React或Vue,它们则提供了自己的组件生命周期方法和事件处理机制,允许开发者监听组件的挂载、更新、卸载等事件,以及用户交互事件。

3)应用服务器和容器中的监听器

在应用服务器和容器中,监听器通常用于监听应用上下文事件(如ServletContext的创建和销毁)、会话事件(如HttpSession的创建和销毁)等。这些监听器是通过实现特定的接口(如ServletContextListener、HttpSessionListener)并使用注解配置。

在Java Web中,监听器是Servlet规范中定义的一种特殊类,用于监听Web应用程序中的ServletContext、HttpSession和ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中的属性发生修改的事件。当这些事件发生时,监听器可以触发回调函数,反馈给程序去做一些响应的处理。

例如:

  • 加载初始化信息:使用ServletContextListener加载初始化信息是一个常见的做法。在Web应用程序启动时,contextInitialized方法会被调用,可以在这个方法中加载配置文件、初始化数据库连接池等。
@WebListener  
public class InitializationListener implements ServletContextListener {  
  
    @Override  
    public void contextInitialized(ServletContextEvent sce) {  
        ServletContext context = sce.getServletContext();  
        // 加载配置文件  
        Properties props = new Properties();  
        try (InputStream input = context.getResourceAsStream("/WEB-INF/config.properties")) {  
            props.load(input);  
            // 将配置信息存储到ServletContext中,供其他组件使用  
            context.setAttribute("config", props);  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
        // 初始化数据库连接池等  
    }  
  
    @Override  
    public void contextDestroyed(ServletContextEvent sce) {  
        // 在这里执行销毁操作,如关闭数据库连接池等  
    }  
}
  • 统计网站的访问量:通过HttpSessionListener监听HttpSession的创建和销毁事件来实现,每次新的会话创建时增加访问计数。
@WebListener  
public class AccessCounterListener implements HttpSessionListener {  
  
    private AtomicInteger sessionCount = new AtomicInteger(0);  
  
    @Override  
    public void sessionCreated(HttpSessionEvent se) {  
        sessionCount.incrementAndGet();  
        // 可以将访问量信息存储到ServletContext或数据库中  
    }  
  
    @Override  
    public void sessionDestroyed(HttpSessionEvent se) {  
        // 在这里可以处理会话销毁时的逻辑,如更新在线人数等  
    }  
  
    public int getSessionCount() {  
        return sessionCount.get();  
    }  
}
  • 实现访问监控:访问监控通常涉及记录用户访问的详细信息,如访问时间、访问页面、用户信息等。可以通过ServletRequestListener或HttpFilter实现。在ServletRequestListener中,可以监听请求的创建和销毁事件,记录相关信息。而HttpFilter是在请求处理之前和之后执行代码,非常适合进行访问日志的记录。

                使用ServletRequestListener:

@WebListener  
public class AccessMonitorListener implements ServletRequestListener {  
  
    @Override  
    public void requestInitialized(ServletRequestEvent sre) {  
        HttpServletRequest request = (HttpServletRequest) sre.getServletRequest();  
        String ipAddress = request.getRemoteAddr();  
        String url = request.getRequestURL().toString();  
        // 记录访问信息到日志或数据库  
    }  
  
    @Override  
    public void requestDestroyed(ServletRequestEvent sre) {  
        // 在这里可以执行请求销毁时的逻辑,如清理资源等  
    }  
}

                 使用HttpFilter:

@WebFilter(filterName = "AccessLogFilter", urlPatterns = "/*")  
public class AccessLogFilter implements Filter {  
  
    @Override  
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)  
            throws IOException, ServletException {  
        HttpServletRequest httpRequest = (HttpServletRequest) request;  
        String ipAddress = httpRequest.getRemoteAddr();  
        String url = httpRequest.getRequestURL().toString();  
        // 记录访问信息到日志或数据库  
        chain.doFilter(request, response); // 继续请求处理  
    }  
  
    // 其他Filter方法
}

区别:

Web框架中的监听器:更多地关注于框架内部的状态变化、组件间的通信等。

应用服务器和容器中的监听器:通常是在应用服务器和容器中配置的,它们能够监听整个Web应用程序的生命周期事件,从而实现在应用层面的各种功能。

标签:Web,销毁,监听,Listener,事件,监听器,public
From: https://blog.csdn.net/u010852547/article/details/136916365

相关文章

  • 核心子方法10: registerListeners()方法详解
    先总结: 该方法主要用于注册监听器, 在所有注册的bean中查找listener监听器bean,注册到消息广播器中1.遍历应用程序中存在的监听器集合,并将对应的监听器添加到监听器的多路广播器中for(ApplicationListener<?>listener:getApplicationListeners()){get......
  • C# 使用HttpListener时候异常(此平台不支持此操作:System.PlatformNotSupportedExceptio
    ​ C#使用HttpListener时候异常(此平台不支持此操作:System.PlatformNotSupportedException)代码:HttpListenerlistener=newHttpListener();错误:System.PlatformNotSupportedException:OperationisnotsupportedonthisplatformInSystem.Net.HttpListener..ctor()......
  • 【Flink】Flink 使用 JobListener 监听 任务状态
    1.概述flink程序运行起来,需要获取flink的任务状态,我们有几种方式获取。使用yarn命令或者,查看任务状态使用flink指标监控查看flink任务状态使用JobListener监听任务状态下面我们来主要介绍如何使用JobListener监听任务状态。2.使用JobListener的使用很简单,我们只需......
  • DiagnosticSource DiagnosticListener 无侵入式分布式跟踪
    ASP.NETCore中的框架中发出大量诊断事件,包括当前请求进入请求完成事件,HttpClient发出收到与响应,EFCore查询等等。我们可以利用DiagnosticListener来选择性地监听这些事件,然后通过自己的方式组织这些日志,实现无侵入的分布式跟踪。下面我们通过DiagnosticSource监听EFCore,与HTTP......
  • Vue — 监听器(watch)使用
    在Vue.js中,watch选项用于监视数据的变化,并在数据变化时执行相应的操作。watch可以监视一个或多个数据的变化,当被监视的数据发生变化时,可以触发预定义的回调函数。一、简单写法<textareaname=""id=""cols="30"rows="10"v-model="word"></textarea>watch:{......
  • 【Spring】Spring的事件监听ApplicationListener 、ApplicationEvent
     Spring中的事件监听机制,事件驱动开发可以用在以下这些场景:1.业务代码入口在下一级模块module,sender消息发送者在上一级模块module,不想循环依赖,就这样用2.解耦合的事件驱动模式,观察者模式等3.待补充实例代码:1.业务代码testAAA,执行同步业务privatevoidtestAAA(List<Chann......
  • iframe 使用 postMessage 传递信息,addEventListener监听返回信息,并使用removeEventLis
    BUTTON发送消息selectButton.addEventListener('click',()=>{      iframe.contentWindow.postMessage({        event_id:"select_media",        return_type:'media'      },'*');   ......
  • 为什么在js中需要添加addEventListener()?
    为什么在js中需要添加addEventListener()?1.What?addEventListener(监听器)---EventTarget.addEventListener()方法将指定的监听器注册到EventTarget上,当该对象触发指定的事件时,指定的回调函数就会被执行。事件目标可以是一个文档上的元素Element、Document和Window,也可以是......
  • HTML DOM addEventListener() 方法
    jsaddeventlistenerJavaScript是一种广泛应用于网页开发的脚本语言,具有灵活的语法和强大的功能。在网页中,我们经常需要处理用户的交互操作,例如点击按钮、输入文本等,而addEventListener方法就是用来处理这些事件的。1.jsaddEventListener方法的基本语法addEventListener是DOM......
  • vue 监听器watch用法
    <template> <div>  <h1>{{message}}</h1>  <button@click="btnclick">点击</button> </div></template><script> exportdefault{  data(){   return{    message:'hello&......