利用 ServletRequestListener、HttpSessionListener 以及 ServletContextListener 可以把request,session,以及Application的生命周期进一步的做一了解

> request:是一个请求,当一个响应返回时,即被销毁.当发送一个请求时被创建.注意:请求转发的过程是 一个 request 对象。

注:在页面上放的 属性 ,在servlet中时获取不到的,因为页面响应后request已经销毁了。

注:重定向是两个请求。

> session : 当第一次访问WEB 应用的一个 JSP 或 Servlet 时,且该 JSP 或 Servlet 中 还需要创建一个 session 对象。

  session 销毁:session 过期,直接调用 session的 invilidate 方法,当前WEB 应用被卸载(session 可以被持久化)

  *关闭浏览器,并不意味着session 被销毁,还可以通过 sessionid找到服务器中的 session 对象

> application : 贯穿于当前的 WEB 应用的生命周期。当前 WEB 应用被加载时 创建 application 对象,当前 WEB 应用被

  卸载时销毁 application 对象.

ServletContextListener

1). what: 监听 ServletContext 对象被创建或销毁的 Servlet 监听器

2). how:

  > 创建一个实现了 ServletContextListener 的类,并且实现其中的两个方法

  public class HelloServletContextListener implements ServletContextListener

  > 在 web.xml 文件中 配置Listener

  <listener>

    <listener-class>com.java.javaweb.test.HelloServletContextListener</listener-class>

  </listener>

3). why: ServletContextListener 是最常用的Listener,可以在当前 WEB 应用被加载时对当前 WEB 应用的相关资源进行初始化操作:

  创建数据库连接池,创建Spring 的 IOC 容器,读取当前 WEB 应用的初始化参数 ...

4). API:

Method Summary
void contextDestroyed(ServletContextEvent sce)
Notification that the servlet context is about to be shut
down.
void contextInitialized(ServletContextEvent sce)

Notification that the web application initialization process is
starting.

JavaWEB 中其他的Servlet监听器

HttpSessionActivationListener

1).监听实现了该接口 和 Serializable 接口的 Java 类的对象随session钝化和活化事件

  >活化:从餐盘中读取session 对象

  >钝化:向磁盘中写入session对象

  >session 对象存储在tomcat 服务器的 work\Catalina\localhost\contextPath 目录下.SESSION.SER

2).注意:该监听器不需要再web.xml文件中进行配置.

3).

//在活化之后被调用.

public void sessionDidActivate(HttpSessionEvent se)

//在钝化之前被调用

public void sessionWillPassivate(HttpSessionEvent se)

HttpSessionEvent:getSession()

4).该监听器很少被使用.

-----------------------------------------------------------------------

HttpSessionBindingListener

1).监听实现了该接口的Java类的对象被绑定到 session 或从 session 中解除绑定的事件.

//当前对象被绑定到 session 时调用该方法

public void valueBound(HttpSessionBindingEvent event)

//当前对象从session中解除时调用该方法

public void valueUnbound(HttpSessionBindingEvent event)

2).注意:该监听器不需要再web.xml文件中进行配置.

3).HttpSessionBindingEvent:

getName(),getValue(),getSession()

JavaWEB 通过Listener理解域对象生命周期的更多相关文章

  1. JAVAEE_Servlet_03_Servlet对象生命周期

    Servlet的对象声明周期 * 什么是对象生命周期? - 生命周期表示一个JAVA对象从创建到销毁的过程是一个生命周期 * Servlet对象生命周期 1. Servlet对象创建 无参构造 2. ...

  2. Hibernate的三种状态及对象生命周期

        理解Hibernate的三种状态,更利于理解Hibernate的运行机制,这些可以让你在开发中对疑点问题的定位产生关键性的帮助. 三种状态 临时状态(Transient):在通过new关键字, ...

  3. .Net组件程序设计之对象生命周期

    .Net组件程序设计之对象生命周期 .NET 垃圾回收 IDisposable() Using语句 .NET 垃圾回收 是CLR管理着垃圾回收器,垃圾回收器监控着托管堆,而我们使用的对象以及系统启动是 ...

  4. Ninject之旅之三:Ninject对象生命周期

    摘要 DI容器的一个责任是管理他创建的对象的生命周期.他应该决定什么时候创建一个给定类型的对象,什么时候使用已经存在的对象.他还需要在对象不需要的时候处理对象.Ninject在不同的情况下管理对象的生 ...

  5. iOS视图控制对象生命周期

    iOS视图控制对象生命周期-init.viewDidLoad.viewWillAppear.viewDidAppear.viewWillDisappear.viewDidDisappear的区别及用途 ...

  6. IOS 视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear等的区别及用途

    iOS视图控制对象生命周期-init.viewDidLoad.viewWillAppear.viewDidAppear.viewWillDisappear.viewDidDisappear的区别及用途 ...

  7. 【转】【iOS知识学习】_视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear等的区别及用途

    原文网址:http://blog.csdn.net/weasleyqi/article/details/8090373 iOS视图控制对象生命周期-init.viewDidLoad.viewWillA ...

  8. _视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear等的区别及用途

    iOS视图控制对象生命周期-init.viewDidLoad.viewWillAppear.viewDidAppear.viewWillDisappear.viewDidDisappear的区别及用途 ...

  9. ASP.NET Core Web API下事件驱动型架构的实现(二):事件处理器中对象生命周期的管理

    在上文中,我介绍了事件驱动型架构的一种简单的实现,并演示了一个完整的事件派发.订阅和处理的流程.这种实现太简单了,百十行代码就展示了一个基本工作原理.然而,要将这样的解决方案运用到实际生产环境,还有很 ...

随机推荐

  1. Eclipse和MyEclipse工程描述符.classpath和.project和.mymetadata详解aaaaaa(转)

    Eclipse和MyEclipse工程描述符.classpath和.project和.mymetadata详解(转) (2012-03-28 15:06:54) 转载▼ 标签: .mymetadata ...

  2. PAT 1020. 月饼 (25)

    月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼.现给定所有种类月饼的库存量.总售价.以及市场的最大需求量,请你计算可以获得的最大收益是多少. 注意:销售时允许取出一部分库存.样 ...

  3. Android-完全退出当前应用程序的四种方法

    Android程序有很多Activity,比如说主窗口A,调用了子窗口B,如果在B中直接finish(), 接下里显示的是A.在B中如何关闭整个Android应用程序呢?本人总结了几种比较简单的实现方 ...

  4. [转]注释驱动的 Spring cache 缓存介绍

    原文:http://www.ibm.com/developerworks/cn/opensource/os-cn-spring-cache/ 概述 Spring 3.1 引入了激动人心的基于注释(an ...

  5. Wabpack系列:在webpack+vue开发环境中使用echarts导致编译文件过大怎么办?

    现象,在一个webpack+vue的开发环境中,npm install echarts --save了echarts,然后在vue文件中直接使用 import echarts from 'echart ...

  6. JavaScript:立即执行的函数表达式

    先要理解清楚几个概念:   以下转自:http://www.cnblogs.com/TomXu/archive/2011/12/31/2289423.html  问题的核心 当你声明类似functio ...

  7. struts2 Result Type四个常用转跳类型

    Result的四个常用转跳类型分别为 Dispatcher 用来转向页面,是Struts的默认形式 Redirect   重定向到一个URL Chain  用来处理Action链 RedirectAc ...

  8. 初学git:用git bash往github push代码

    对于我来说,最开始使用github主要是为了使用它的pages功能展示demo.其实这些都是用Github for Windows push上去的,图形化界面的客户端使用确实简单,但是逼格不够,好吧其 ...

  9. StackExchange.Redis--纯干货喂饱你

    Redis和StackExchange.Redis redis有多个数据库1.redis 中的每一个数据库,都由一个 redisDb 的结构存储.其中,redisDb.id 存储着 redis 数据库 ...

  10. MATLAB中plot()画图的颜色线型和希腊字母参数设置

    y         黄色           ·             点线      m         粉红           ○             圈线      c          ...