基于Listener监听器生命周期(详解)

一、Listener生命周期

listener是web三大组件之一,是servlet监听器,用来监听请求,监听服务端的操作。

listener分为:(都是接口类,必须实现相应方法)

1.生命周期监听器(3个)

ServletContextListener
requestDestroyed 在容器启动时被调用(在servlet被实例化前执行)
requestInitialized 在容器销毁时调用(在servlet被销毁后执行)
HttpSessionListener
sessionCreated 在HttpSession创建后调用
sessionDestroyed 在HttpSession销毁前调用(执行session.invalidate();方法)
ServletRequestListener
requestDestroyed 在request对象创建后调用(发起请求)
requestInitialized 在request对象销毁前调用(请求结束)

2.属性变化监听器(3个)

attributeAdded(ServletContextAttributeEvent event)向appliction中添加属性时调用
attributeRemoved(ServletContextAttributeEvent event)从appliction中删除属性时调用
attributeReplaced(ServletContextAttributeEvent event)替换application中的属性时调用
HttpSessionAttributeListener
attributeAdded(HttpSessionBindingEvent event)
attributeRemoved(HttpSessionBindingEvent event)
attributeReplaced(HttpSessionBindingEvent event)
ServletRequestAttributeListener
attributeAdded(ServletRequestAttributeEvent event)
attributeRemoved(ServletRequestAttributeEvent event)
attributeReplaced(ServletRequestAttributeEvent event)

以上监听器接口除了传参不同,方法名都是一样的。分别监听application,session,request对象的属性变化。

3.session中指定类属性变化监听器(2)

HttpSessionBindingListener 
valueBound(HttpSessionBindingEvent event) 当该类实例设置进session域中时调用
valueUnbound(HttpSessionBindingEvent event) 当该类的实例从session域中移除时调用
HttpSessionActivationListener 
sessionWillPassivate(HttpSessionEvent se)
sessionDidActivate(HttpSessionEvent se)

二、测试范例

1.生命周期监听:

ServletContentAttribute_Listener.java

public class ServletContentAttribute_Listener implements ServletContextListener {
 /**
  * ServletContextListener实现方法
  * @param sce
  */
 public void contextInitialized(ServletContextEvent sce) {
  System.out.println("ServletContextListener初始化");
 }

 public void contextDestroyed(ServletContextEvent sce) {
  System.out.println("ServletContextListener销毁");
 }
}

其他两个监听器类似,不在重复贴出。

在web.xml中配置

<!-- 监听器 -->
 <!-- servlet监听器 -->
 <listener>
 <listener-class>study.myListener.ServletContentAttribute_Listener</listener-class>
 </listener>

 <!-- session监听器 -->
 <listener>
 <listener-class>study.myListener.HttpSessionAttribute_Listener</listener-class>
 </listener>

 <!-- request监听器-->
 <listener>
 <listener-class>study.myListener.ServletRequestAttribute_Listener</listener-class>
 </listener>

运行结果:

 

  

2.属性监听:

ServletContentAttribute_Listener.java

public class ServletContentAttribute_Listener implements ServletContextAttributeListener{

 /**
  * ServletContextAttributeListener实现方法
  * @param event
  */
 public void attributeAdded(ServletContextAttributeEvent event) {
  String meg = MessageFormat.format("ServletContent添加属性:{0},属性值:{1}",event.getName(),event.getValue());
  System.out.println(meg);
 }

 public void attributeRemoved(ServletContextAttributeEvent event) {
  String meg = MessageFormat.format("ServletContent删除属性:{0},属性值:{1}",event.getName(),event.getValue());
  System.out.println(meg);
 }

 public void attributeReplaced(ServletContextAttributeEvent event) {
  String meg = MessageFormat.format("ServletContent替换属性:{0},属性值:{1}",event.getName(),event.getValue());
  System.out.println(meg);
 }

}

另外两个监听器类似,不在赘诉。接下来用jsp页面测试

listenerDemo.jsp

<%--
 Created by IntelliJ IDEA.
 User: Administrator
 Date: 2017/10/17
 Time: 15:28
 To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
 <title>监听器设置</title>
</head>
<body>
 <%
  /**
   * servlet监听
   */
  application.setAttribute("name","changxiang");
  application.setAttribute("name","小Cai先森");
  application.removeAttribute("name");

  /**
   * session监听
   */
  session.setAttribute("sessionName","changxiang");
  session.setAttribute("sessionName","小Cai先森");
  session.removeAttribute("sessionName");
  session.invalidate();
  /**
   * request监听
   */
  request.setAttribute("requestName","changxiang");
  request.setAttribute("requestName","小Cai先森");
  request.removeAttribute("requestName");
 %>
</body>
</html>

执行结果如下:

 

注意:其中遇到一个问题:就是在启动tomcat的时候servletcontextListener监听执行了两次,最后删除掉server.xml中 Context 的手动配置,这样就不会加载两次了。

以上这篇基于Listener监听器生命周期(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 快速学习JavaWeb中监听器(Listener)的使用方法

    一.监听器介绍 1.1.监听器的概念 监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动.监听器其实就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法立即被执行. 1.2.监听器案例--监听window窗口的事件监听器 package me.gacl.listener.demo; import java.awt.Frame; imp

  • JavaWeb监听器Listener实例解析

    首先来介绍一下什么是监听器: 监听器-就是一个实现待定接口的普通Java程序,此程序专门用于监听另外一个类的方法调用. 这是使用观察者模式的. 什么是观察者模式: 定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知自动更新. 示例: GUI编程中的addXxxxListener都是观察者模式. 比如为按钮点击添加监听事件,为键盘添加监听等等- 观察者模式的三个重要类: 被监听的事件源,也就是我们在使用的对象. 注册的那个监听器,是专门用来监听当前使用的对象的.

  • 深入学习JavaWeb中监听器(Listener)的使用方法

    一.监听域对象中属性的变更的监听器 域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信息事件的监听器. 这三个监听器接口分别是ServletContextAttributeListener, HttpSessionAttributeListener 和ServletRequestAttributeListener,这三个接口中都定义了三个方法来处理被监听对象中的属性的增加,删除和替换

  • 基于Listener监听器生命周期(详解)

    一.Listener生命周期 listener是web三大组件之一,是servlet监听器,用来监听请求,监听服务端的操作. listener分为:(都是接口类,必须实现相应方法) 1.生命周期监听器(3个) ServletContextListener requestDestroyed 在容器启动时被调用(在servlet被实例化前执行) requestInitialized 在容器销毁时调用(在servlet被销毁后执行) HttpSessionListener sessionCreated

  • 基于asp.net MVC 应用程序的生命周期(详解)

    首先我们知道http是一种无状态的请求,他的生命周期就是从客户端浏览器发出请求开始,到得到响应结束.那么MVC应用程序从发出请求到获得响应,都做了些什么呢? 本文我们会详细讨论MVC应用程序一个请求的生命周期,从一个控件到另一个控件是怎样被处理的.我们还会详细介绍一下整个请求的生命周期中,用到的相关组件.因为在平常的开发过程中,我们可能知道怎样去使用MVC框架来处理相关的请求,大部分的时候我们只是在controller和action方法之间做相关的处理,对于真正内在的运行机制可能不是很了解.其实

  • Tomcat生命周期详解

    目录 引言 1.LifeCycle接口设计 1.1 生命周期的方法 1.2 相关的状态处理 2.监听器和事件的设计 3.LifecycleBase 3.1 事件处理 3.2 生命周期方法 引言 在上篇文章中我们看到了Tomcat架构中的核心组件,而且各个组件都有各自的作用,各司其职,而且相互之间也有对应的父子关系,那么这些对象的创建,调用,销毁等操作是怎么处理呢? 也就是在Tomcat中的组件的对象生命周期是怎么管理的呢?针对这个问题,在Tomcat中设计了Lifecycle接口来统一管理Tom

  •  Spring 中 Bean 的生命周期详解

    目录 前言 1.Bean 生命周期 2.代码演示 总结 前言 Java 中的公共类称之为 Bean 或 Java Bean,而 Spring 中的 Bean 指的是将对象的生命周期,交个 Spring IoC 容器来管理的对象.所以 Spring 中的 Bean 对象在使用时,无需通过 new 来创建对象,只需要通过 DI(依赖注入),从 Spring 中取出要使用的对象即可. 那么 Spring 中,Bean 的生命周期又有哪些呢?接下来,我们一起来看. 1.Bean 生命周期 Spring

  • vue的生命周期钩子与父子组件的生命周期详解

    目录 vue的生命周期钩子的介绍 父子组件的生命周期 加载渲染过程 父组件更新过程 子组件更新过程 父子组件更新过程 销毁过程 代码示例 created和mounted的区别 vue的生命周期钩子的介绍 vue官网中提供的vue的生命周期钩子图 vue的生命周期可以分为8个阶段: 1.创建vue实例涉及的两个钩子 (1)beforeCreate:创建前,vue实例初始化之前调用. 此时的数据观察和事件配置都还没有准备好,而此时的实例中的data和el还是underfined状态,不可用的.Dom

  • Spring配置使用之Bean生命周期详解

    基本概念 Spring 中的 Bean 的生命周期,指的是 Bean 从创建到销毁的过程. 下面来探究下几个有关 Bean 生命周期配置的属性. lazy-init lazy-init 表示延迟加载 Bean,默认在 Spring IoC 容器初始化时会实例化所有在配置文件定义的 Bean,若启用了 lazy-init 则在调用 Bean 时才会去创建 Bean. 定义 Bean: public class Animals { public Animals(){ System.out.print

  • servlet配置方法及其生命周期详解

    servlet配置: 在web.xml中,首先向服务器注册一个servlet.在<servlet>标签下 给定一个servlet名字,这个servlet-name是我们自己用的,方便我们用它对servlet进行配置. 1 <servlet-name>AServlet</servlet-name>然后指定一个全类名,这个是给服务器使用,服务器用来创建全类名对象的实例 1 <servlet-class>com.servlet.AServlet</servl

  • Android入门教程之组件Activity的生命周期详解

    目录 返回栈 Activity 状态 1. 运行状态 2. 暂停状态 3. 停止状态 4. 销毁状态 Activity 的生存期 onCreate() onStart() onResume() onPause() onStop() onDestroy() onRestart() 完整生存期 可见生存期 前台生存期 Activity 回收处理 返回栈 Android 中的 Activity 是可以层叠的,我们每启动一个新的 Activity,就会覆盖在原有的 Activity 之上,然后点击 Ba

  • JavaWEB中Servlet的生命周期详解

    目录 一.什么是Servlet 生命周期? 二.Servlet 是由谁来维护的? 三.Servlet 对象 是什么时候创建的? 四.测试 Tomcat 什么时候被销毁? 总结 一.什么是Servlet 生命周期? Servlet 对象什么时候被创建? Servlet对象什么时候被销毁? Servlet 对象创建了几个? Servlet 对象的声明周期表示:Servlet 对象从出生到销毁的过程是怎样的 二.Servlet 是由谁来维护的? Servlet 是由 Tomcat 服务器全权负责的,程

  • Java开发学习之Bean的生命周期详解

    目录 一.什么是生命周期 二.环境准备 三.生命周期设置 步骤1:添加初始化和销毁方法 步骤2:配置生命周期 步骤3:运行程序 四.close关闭容器 五.注册钩子关闭容器 六.bean生命周期总结 一.什么是生命周期 首先理解下什么是生命周期? 从创建到消亡的完整过程,例如人从出生到死亡的整个过程就是一个生命周期. bean生命周期是什么? bean对象从创建到销毁的整体过程. bean生命周期控制是什么? 在bean创建后到销毁前做一些事情. 二.环境准备 环境搭建: 创建一个Maven项目

随机推荐