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

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用

内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系。

本人互联网技术爱好者,互联网技术发烧友

微博:伊直都在0221

QQ:951226918

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

1.简介

  1)监听器:专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动

  2)Servlet 监听器:Servlet 规范中定义的一种特殊类,它用于监听 web 应用程序中的 ServletContext, HttpSession 和 ServletRequest 等域对象的创建与销毁事件,以及监听这些域对象中的属性发生修改的事件

2.按监听的事件类型 Servlet 监听器可分为如下三种类型 

  1)监听域对象自身的创建和销毁的事件监听器

    > 域对象创建和销毁的事件监听器就是用来监听 ServletContext(Application 对象), HttpSession (Session 对象), HttpServletRequest (request 对象) 这三个对象的创建和销毁事件的监听器

    > 域对象的创建和销毁时机

      

     > ServletContextListener 接口

      what: ServletContextListener 接口用于监听 ServletContext 对象的创建和销毁事件

      * 当 ServletContext 对象被创建时,激发contextInitialized (ServletContextEvent sce)方法。当前web 应用被加载到服务器的时候

* 当 ServletContext 对象被销毁时,激发contextDestroyed(ServletContextEvent sce)方法。当前 web 应用从服务器卸载的时候

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

           public class HelloServletContextListner implements ServletContextListener

          ② 在web.xml 文件中配置Listener   

  <listener>
<listener-class>com.jason.listener.HelloServletContextListner</listener-class>
</listener>

      Why:ServletContextListener 是最常用的 listener,可以在当前 WEB 应用加载时对当前 WEB 应用的相关进行初始化操作

        比如:创建数据库连接池,创建spring的IOC容器,读取当前web应用的初始化参数,

            API: 

 @Override
//ServletContext 对象被(即,当前web应用被加载时)创建的时候,Servlet 容器调用该方法
public void contextInitialized(ServletContextEvent sce) {
// TODO Auto-generated method stub
System.out.println("ServletContext 对象被创建"); } @Override
//ServletContext 对象被销毁之前(即,当前web应用被卸载时)的时候, Servlet 容器调用该方法
public void contextDestroyed(ServletContextEvent sce) {
// TODO Auto-generated method stub
System.out.println("ServletContext 对象被销毁");
}

     

      > HttpSessionListener 接口   与ServletContextListener类似

      * HttpSessionListener 接口用于监听HttpSession对象的创建和销毁

      * 创建一个Session时,激发sessionCreated (HttpSessionEvent se) 方法

       * 销毁一个Session时,激发sessionDestroyed (HttpSessionEvent se) 方法。

    > ServletRequestListener接口  与ServletContextListener 类似

      * ServletRequestListener 接口用于监听ServletRequest 对象的创建和销毁

      * 创建一个ServletRequest 对象时,激发requestInitialized(ServletRequestEvent sre)方法

       * 销毁一个Session时,激发requestDestroyed(ServletRequestEvent sre)方法

        

  

  2)监听域对象中的属性的增加和删除的事件监听器

  3)监听绑定到 HttpSession 域中的某个对象的状态的事件监听器

3.编写 Servlet 监听器 

  1) Servlet 规范为每种事件监听器都定义了相应的接口,开发人员编写的事件监听器程序只需实现这些接口,web 服务器根据用户编写的事件监听器所实现的接口把它注册到相应的被监听对象上

 

 package com.jason.listener;

 import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener; public class HelloServletContextListner implements ServletContextListener { @Override
//ServletContext 对象被(即,当前web应用被加载时)创建的时候,Servlet 容器调用该方法
public void contextInitialized(ServletContextEvent sce) {
// TODO Auto-generated method stub
System.out.println("ServletContext 对象被创建"); } @Override
//ServletContext 对象被销毁之前(即,当前web应用被卸载时)的时候, Servlet 容器调用该方法
public void contextDestroyed(ServletContextEvent sce) {
// TODO Auto-generated method stub
System.out.println("ServletContext 对象被销毁");
} }

 2) 一些 Servlet 事件监听器需要在 web 应用程序的 web.xml 文件中进行注册,一个 web.xml 文件中可以注册多个 Servlet 事件监听器,web 服务器按照它们在 web.xml 文件中的注册顺序来加载和注册这些 Serlvet 事件监听器。

   

 <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <!-- 配置listener --> <listener>
<listener-class>com.jason.listener.HelloServletContextListner</listener-class>
</listener>
</web-app>

 3) Serlvet 事件监听器的注册和调用过程都是由 web 容器自动完成的,当发生被监听的对象被创建,修改或销毁事件时,web容器将调用与之相关的 Servlet 事件监听器对象的相关方法,开发人员在在这些方法中编写的事件处理代码即被执行

  4)由于一个 web 应用程序只会为每个事件监听器创建一个对象,有可能出现多个线程同时调用同一个事件监听器对象的情况,所以,在编写事件监听器类时,应考虑多线程安全的问题

4.利用ServletContextListener ,HttpSessionListener,ServletRequestListener理解 application session request 对象的生命周期

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

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

    session销毁: session 时间过期  或者  直接调用session 的invalidate 方法  或者 当前web 应用被卸载

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

  

  > application: 贯穿与当前的web 应用声明周期,当前web 应用被加载时创建application,当前web 应用被卸载的时候销毁application 对象

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

  1. [原创]java WEB学习笔记44:Filter 简介,模型,创建,工作原理,相关API,过滤器的部署及映射的方式,Demo

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

  2. [原创]java WEB学习笔记95:Hibernate 目录

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  3. [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  4. [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  5. [原创]java WEB学习笔记11:HttpServlet(HttpServletRequest HttpServletRsponse) 以及关于 Servlet 小结

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

  6. [原创]java WEB学习笔记01:javaWeb之tomcat的安装和配置

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

  7. [原创]java WEB学习笔记59:Struts2学习之路---OGNL,值栈,读取对象栈中的对象的属性,读取 Context Map 里的对象的属性,调用字段和方法,数组,list,map

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  8. [原创]java WEB学习笔记70:Struts2 学习之路-- struts2拦截器源码分析,运行流程

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  9. [原创]java WEB学习笔记48:其他的Servlet 监听器:域对象中属性的变更的事件监听器 (3 个),感知 Session 绑定的事件监听器(2个)

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

随机推荐

  1. 【转】深入浅出 JavaScript 中的 this

    Java 等面向对象的语言中,this 关键字的含义是明确且具体的,即指代当前对象.一般在编译期确定下来,或称为编译期绑定.而在 JavaScript 中,this 是动态绑定,或称为运行期绑定的,这 ...

  2. your project contains error(s),please fix them before running your application.错误总结

             Android开发中的问题总是多种多样,今天我来总结一个浪费了我一个晚上的错误T-T:your project contains error(s),please fix them b ...

  3. 估值十亿美元、1.5亿用户,公司CEO却跑路了

    转载这篇文章是觉得配图非常好玩的,文章的真实性有待证明 年收益3600万美元的.曾经拥有高口碑产品的Evernote,却正在把一手好牌打烂,距离IPO越来越远,屡屡被业界唱衰. "独角兽公司 ...

  4. 分享一个开源的流程图绘制软件--Diagram Designer

    最近在写专利文件,在制作说明书附图时想到自己还只会用wps进行简单的绘制,于是想学习下,填补下这方面的短板.这两天查到了DiagramDesigner这个小工具,派上了大用场.用它写完了一个发明专利, ...

  5. BLE Device Monitor的使用

    1 综述 BLE Device Monitor是一个用来显示任意蓝牙低功耗设备服务(services).特征(characteristics).属性(attributes)的windows程序.除了测 ...

  6. jQuery.mobile.activePage获取当点活动的page

    <!doctype html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  7. Python基本数据类型之int 、 float

    首先要明确的是:在python中,一切皆为对象. 从底层角度看,对象就是保存在内存中的一个数据块.从抽象层看,对象就是我们的代码模拟出的一个类的独立个体. 在python中变量不需要声明类型,也不需要 ...

  8. 在VC6.0中编译头文件时产生moc文件

    1.在FileView视图中 右键点击需要产生moc文件的头文件(就是类中包含Q_OBJECT宏,如果没有这个宏就不需要产生moc文件) 2.在右键菜单中选择Setting... 3.选择Custom ...

  9. 创建podSpec,使用pod管理第三方库

    提要: podfile文件会先读取.podspec文件,根据.podspec文件的指向来下载第三方库到项目中. 本文先通过一.二.三项,这三个步骤讲解了如何建立一个.podspec文件在本地.coco ...

  10. Surround the Trees---hdu1392(凸包GraHam模板)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1392 题意:有n棵树,每棵树有一个坐标,想用一些绳子把这些树包含起来,求需要绳子的长度: 就是求凸包的 ...