一、Listener生命周期

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

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

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

        • requestInitialized 在容器启动时被调用(在servlet被实例化前执行)
        • requestDestroyed 在容器销毁时调用(在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) 当对象session被序列化(钝化)后调用
        • sessionDidActivate(HttpSessionEvent se)  当对象session被反序列化(活化)后调用

            

二、测试范例

 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 的手动配置,这样就不会加载两次了。

解决思路:http://blog.csdn.net/shaokai132333/article/details/53328258

Listener监听器生命周期的更多相关文章

  1. filter和listener的生命周期

    filter(过滤器)和listener(监听器)的生命周期 老实说 生命周期要是说成作用的时间范围我会理解的更好 filter package com.javaweb.filter; import ...

  2. servelt filter listener 的生命周期

    1. servlet    当第一次请求一个servlet资源时,servlet容器创建这个servlet实例,并调用他的 init(ServletConfig config)做一些初始化的工作,然后 ...

  3. Java实现生命周期管理机制

    先扯再说 最近一直在研究某个国产开源的MySQL数据库中间件,拉下其最新版的代码到eclipse后,启动起来,然后做各种测试和代码追踪:用完想要关闭它时,拉出它的STOP类想要运行时,发现这个类里赫然 ...

  4. 在Listener(监听器)定时启动的TimerTask(定时任务)中使用Spring@Service注解的bean

    1.有时候在项目中需要定时启动某个任务,对于这个需求,基于JavaEE规范,我们可以使用Listener与TimerTask来实现,代码如下: public class TestTaskListene ...

  5. [原创]java WEB学习笔记47:Servlet 监听器简介, ServletContext(Application 对象), HttpSession (Session 对象), HttpServletRequest (request 对象) 监听器,利用listener理解 三个对象的生命周期

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  6. JavaWEB 通过Listener理解域对象生命周期

    利用 ServletRequestListener.HttpSessionListener 以及 ServletContextListener 可以把request,session,以及Applica ...

  7. JavaEE(16) - JPA生命周期及监听器

    1. 理解实体的生命周期 2. 为实体生命周期事件定义监听器 3. 通过监听实现回调 4. 排除默认监听器和父类上定义的监听器 1. 理解实体的生命周期(Net Beans创建Java Project ...

  8. 在web.xml中配置监听器来控制ioc容器生命周期

    5.整合关键-在web.xml中配置监听器来控制ioc容器生命周期 原因: 1.配置的组件太多,需保障单实例 2.项目停止后,ioc容器也需要关掉,降低对内存资源的占用. 项目启动创建容器,项目停止销 ...

  9. 无废话Android之activity的生命周期、activity的启动模式、activity横竖屏切换的生命周期、开启新的activity获取他的返回值、利用广播实现ip拨号、短信接收广播、短信监听器(6)

    1.activity的生命周期 这七个方法定义了Activity的完整生命周期.实现这些方法可以帮助我们监视其中的三个嵌套生命周期循环: (1)Activity的完整生命周期 自第一次调用onCrea ...

随机推荐

  1. Vue.js依赖收集

    写在前面 因为对Vue.js很感兴趣,而且平时工作的技术栈也是Vue.js,这几个月花了些时间研究学习了一下Vue.js源码,并做了总结与输出.文章的原地址:https://github.com/an ...

  2. python进阶学习笔记(三)

    3.类的继承 3.1,python中什么是类的继承 答案是肯定的. 也就是说,如果一个实例是一个子类,那么它也是一个父类 总是从某各类继承,如果没有合适的类,就要从object类继承:super(). ...

  3. Java经典编程题50道之五

    利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示. public class Example05 { public static ...

  4. ubuntu命令行下java工程编辑与算法(第四版)环境配置

    ubuntu命令行下java工程编辑与算法(第四版)环境配置 java 命令行 javac java 在学习算法(第四版)中的实例时,因需要安装配套的java编译环境,可是在编译java文件的时候总是 ...

  5. CentOs 7 中安装tomcat8

    1,下载tomcat8.0 进入tomcat的下载地址:http://tomcat.apache.org/download-80.cgi 2,上传到linux服务器 cd /usr/local/jav ...

  6. CentOs环境下给PHP7.0安装fileinfo扩展

    由于项目搭建处于一个初步阶段,由于环境的不成熟出现过一系列的问题是难免的,在关于文件操作的程序中,报出一个缺少扩展的错误,已经解决~ 看一下官方给出的说明,http://php.net/manual/ ...

  7. B. Pyramid of Glasses

    原题链接 B. Pyramid of Glasses Mary has just graduated from one well-known University and is now attendi ...

  8. DataTable筛选某列最大值

    dt.Compute("max(列名)",""); Compute函数的参数就两个:Expression,和Filter. Expresstion是计算表达式, ...

  9. linux虚拟化概述

    虚拟化硬件虚拟化:一台物理机虚拟出多台逻辑上的计算机cpu,内存可分配给多个虚拟机软件虚拟化:一个LAMP平台支撑多个网站桌面虚拟化...... 虚拟机:通过软件平台模拟出的计算机对最终用户来说,感受 ...

  10. 【mongodb系统学习之六】mongodb配置文件方式启动

    六.mongodb可以用配置文件启动,配置文件配好后,每次指定文件就好,而不用每次写一长串: 1).创建配置文件: 2).配置(例如指定数据存储目录,日志存储文件,后台进程,端口号等): 3).配置文 ...