一、监听器

1.概念:

专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监听的对象状态发生情况时,立即采取相应的
行动。Servlet规范为每种事件监听器都定义了相应的接口,web服务器根据用户编写的事件监听器所实现的接口把它注册到相应的被监听对象
上,一些Servlet事件监听器需要在web应用程序的web.xml文件中进行注册,一个web.xml文件中可以注册多个Servlet事件监听器
web服务器按照他们在web.xml中的注册顺序来加载和注册这些事件监听器。
Servlet事件监听器的注册和调用过程都是由web容器自动完成的,当发生被监听的对象被创建、修改、销毁事件时,web容器会调用
与之相关的Servlet事件监听器对象的的相关方法。
一个web应用程序只会为每个事件监听器创建一个对象,所以使用时应考虑到多线程安全问题。

2.

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

3.分类:

①按监听的事件类型:
监听域对象自身的创建和销毁的事件监听器
监听域对象中属性的增加和删除的事件监听器
监听绑定到HttpSession域中的某个对象的状态的事件监听器

4.监听域对象自身的创建和销毁的事件监听器接口:

①ServletContextListener接口用于监听ServletContext对象的创建和销毁事件,当ServletContext对象被创建
时激发contextInitialized(ServletContextEvent sce)方法,当ServletContext对象被销毁是激发
contextDestroyed(ServletContextEvent sce)方法
②HttpSessionListener接口用于监听HttpSession对象的创建销毁,创建时调用sessionCreated(HttpSessionEvent se)
方法,销毁时调用sessionDestroyed(HttpSessionEvent se)方法
③ServletRequestListener接口用于监听ServletRequest对象的创建和销毁,创建时调用
requestInitialized(ServletReuqestEvent sre)方法,销毁时调用requestDestroyed(ServletRequestEvent sre)方法

5.作用:

ServletContextListener是最常用的Listener可以在当前web应用被加载时对当前web应用的相关资源进行初始化操作
包括:创建数据库连接池,创建springIOC容器,初始化参数...

6.

使用时继承相应的接口,并在web.xml文件中注册

7.

监听域对象中属性的增加和删除的事件监听器接口
①HttpSessionAttributeListener
②ServletContextAttributeListener
③ServletRequestAttributeListener
这些接口作用与以上接口类似,不在详细说明

8.

监听绑定到HttpSession域中的某个对象的状态的事件监听器
保存在session域中的对象可以有多种状态:绑定到Session中,从Session中接触绑定,随Session对象持久化到存储设备中,
随Session对象从存储设备中恢复。
Servlet规范中定义了两个特殊的监听器接口来帮助JavaBean对象了解自己在Session域中的状态,即接口:
HttpSessionBindingListener:实现该接口的JavaBean对象可以感知自己被绑定到Session中和从Session中删除的事件
HttpSessionActivationListener:实现该接口的JavaBean对象可以感知自己活化或钝化的事件
实现这两个接口的类不需要在web.xml文件中注册 *利用Listener对request、session、application的生命周期做进一步的了解
request:
页面-页面:是一个请求,当发送一个请求时,立即创建,当一个响应返回时,立即销毁。所以说使用超链接在另一个页面上获取该request对象,
是无法获取到的,所以不能使用超链接传递request对象,更不能使用request.setAttribute(name, value)传递参数,同时也是因为
超链接是客户端跳转,但是可以使用<jsp:forward></jsp:forward>来进行不同页面传参,这个跳转方式却是服务端跳转
Servlet-页面:
request.getRequestDispatcher("demo3.jsp").forward(request, response);
过程是:request对象创建,request对象销毁,
response.sendRedirect("demo3.jsp");
过程是:request对象创建,request对象销毁,request对象创建,session对象创建(该session创建原因是发出请求的页面中的session被删除了,请求发出session就又被创建了),
request对象销毁
session:创建:当第一次访问web应用的一个JSP或Servlet时,且JSP或Servlet中还需要创建session对象
销毁:直接调用invalidate方法,当前web应用被销毁,下载web应用时,session并没有被销毁而是被持久化到硬盘上
注意:关闭浏览器,不意味着session被销毁,还可以通过jsessionid找到服务器中的对象,关闭浏览器,表示会话结束,不销毁session,
但是重新打开浏览器访问,会再创建一个session,上一个session依旧保存在服务器中,若是重新打开浏览器访问时,把JSESSIONID
传给服务器,就不会在创建一个新的session,会找到之前的session。 application:创建:当前应用被加载到web服务器,销毁: 当前web应用被卸载时

Listener(1)—基础知识的更多相关文章

  1. 1.nodejs权威指南--基础知识

    1. 基础知识 1.1 全局作用域及函数 1.1.1 全局作用域 在nodejs中,定义了一个global对象,代表nodejs中的全局命名空间,任何全局变量.函数或对象都是该对象的一个属性值 1.1 ...

  2. 【Xamarin开发 Android 系列 4】 Android 基础知识

    原文:[Xamarin开发 Android 系列 4] Android 基础知识 什么是Android? Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Li ...

  3. 【RAC】RAC相关基础知识

    [RAC]RAC相关基础知识 1.CRS简介    从Oracle 10G开始,oracle引进一套完整的集群管理解决方案—-Cluster-Ready Services,它包括集群连通性.消息和锁. ...

  4. 【OGG】OGG基础知识整理

    [OGG]OGG基础知识整理 一.GoldenGate介绍 GoldenGate软件是一种基于日志的结构化数据复制软件.GoldenGate 能够实现大量交易数据的实时捕捉.变换和投递,实现源数据库与 ...

  5. JavaWeb基础知识总结

    JavaWeb基础知识总结.   1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Internet上供 ...

  6. JMeter性能测试的基础知识和个人理解

    JMeter性能测试的基础知识和个人理解 1. JMeter的简介   JMeter是Apache组织开发的开源项目,设计之初是用于做性能测试的,同时它在实现对各种接口的调用方面做的比较成熟,因此,常 ...

  7. JSP SERVLET 基础知识

    jsp(java server page)和servlet是JAVA EE规范的两个基本成员,是JAVA WEB开发的重点也是基础知识.JSP本质上也需要编译成SERVLET运行. JSP比较简单,可 ...

  8. 【温故知新】—— React/Redux/React-router4基础知识&独立团Demo

    前言:React专注View层,一切皆组件:全部使用ES6语法,最新版本为React16. Redux是专注于状态管理的库,和react解耦:单一状态,单向数据流.[独立团github地址] 一.Re ...

  9. Quartz学习笔记:基础知识

    Quartz学习笔记:基础知识 引入Quartz 关于任务调度 关于任务调度,Java.util.Timer是最简单的一种实现任务调度的方法,简单的使用如下: import java.util.Tim ...

随机推荐

  1. System.Data.Entity.Internal.AppConfig"的类型初始值设定项引发异常

    在学习EF code First的小案例的时候,遇见了这个异常 <configSections> <!-- For more information on Entity Framew ...

  2. Atcoder ARC101 Ribbons on Tree

    题解: 前面牛客网的那个比赛也有一道容斥+dp 两道感觉都挺不错的 比较容易想到的是 f[i][j]表示枚举到了i点,子树中有j个未匹配 这样的话我们需要枚举儿子中匹配状态 这样是n^2的(这是个经典 ...

  3. Codeforces 1092E Minimal Diameter Forest

    Minimal Diameter Forest 首先我们找出每个连通块中的特殊点, 特殊点的定义是到各种个连通块中距离的最大值最小的点, 每个连通块肯定通过特殊点连到其他连通块, 我们把有最大值的特殊 ...

  4. docker inspect命令

    docker inspect -f {{.NetworkSettings.Networks.crawling_pro.NetworkID}} crawling_internationalmacro_p ...

  5. python--类中的对象方法、类方法、静态方法的区别

    1.对象方法:顾名思义,是对类实例化后的对象有效的,由对象调用 2.类方法:第一个参数是cls(当前类),是对当前类做的额外的处理,类方法需要用类去调用,而不是实例对象调用 3.静态方法:没有参数!没 ...

  6. 今天这篇内容分享Apache由http自动跳转到https的多种方法

    本文主要和大家分享Apache http自动跳转到https的几种方法,非常不错,具有参考借鉴价值,需要的朋友参考下 本文主要和大家分享Apache http自动跳转到https的几种方法,当你的站点 ...

  7. Spark中groupByKey、reduceByKey与sortByKey

    groupByKey把相同的key的数据分组到一个集合序列当中: [("hello",1), ("world",1), ("hello",1 ...

  8. 用面向对象重写thread 实现多次调用一个线程

    思路: 利用thread类中,run方法在子线程中调用,其他方法在主线程调用,所以将生产者写入主线程,将消费者写入run函数中在子线程中执行,完成生产者消费者模型 注意: 1. 要在 init 函数中 ...

  9. css3流动布局

    -webkit-box-ordinal-group: 2;1...布局优先显示 display: -webkit-box;盒子 -webkit-box-orient:horizontal;显示方式 - ...

  10. P2659 美丽的序列

    P2659 美丽的序列对于当前的最小值,找到最大的左右边界,然后更新答案.用单调队列确定左右边界,O(n)做法. #include<iostream> #include<cstdio ...