Listener(1)—基础知识
一、监听器
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.nodejs权威指南--基础知识
1. 基础知识 1.1 全局作用域及函数 1.1.1 全局作用域 在nodejs中,定义了一个global对象,代表nodejs中的全局命名空间,任何全局变量.函数或对象都是该对象的一个属性值 1.1 ...
- 【Xamarin开发 Android 系列 4】 Android 基础知识
原文:[Xamarin开发 Android 系列 4] Android 基础知识 什么是Android? Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Li ...
- 【RAC】RAC相关基础知识
[RAC]RAC相关基础知识 1.CRS简介 从Oracle 10G开始,oracle引进一套完整的集群管理解决方案—-Cluster-Ready Services,它包括集群连通性.消息和锁. ...
- 【OGG】OGG基础知识整理
[OGG]OGG基础知识整理 一.GoldenGate介绍 GoldenGate软件是一种基于日志的结构化数据复制软件.GoldenGate 能够实现大量交易数据的实时捕捉.变换和投递,实现源数据库与 ...
- JavaWeb基础知识总结
JavaWeb基础知识总结. 1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Internet上供 ...
- JMeter性能测试的基础知识和个人理解
JMeter性能测试的基础知识和个人理解 1. JMeter的简介 JMeter是Apache组织开发的开源项目,设计之初是用于做性能测试的,同时它在实现对各种接口的调用方面做的比较成熟,因此,常 ...
- JSP SERVLET 基础知识
jsp(java server page)和servlet是JAVA EE规范的两个基本成员,是JAVA WEB开发的重点也是基础知识.JSP本质上也需要编译成SERVLET运行. JSP比较简单,可 ...
- 【温故知新】—— React/Redux/React-router4基础知识&独立团Demo
前言:React专注View层,一切皆组件:全部使用ES6语法,最新版本为React16. Redux是专注于状态管理的库,和react解耦:单一状态,单向数据流.[独立团github地址] 一.Re ...
- Quartz学习笔记:基础知识
Quartz学习笔记:基础知识 引入Quartz 关于任务调度 关于任务调度,Java.util.Timer是最简单的一种实现任务调度的方法,简单的使用如下: import java.util.Tim ...
随机推荐
- Faster-RCNN tensorflow 程序细节
tf-faster-rcnn github:https://github.com/endernewton/tf-faster-rcnn backbone,例如vgg,conv层不改变feature大小 ...
- 【loj6142】「2017 山东三轮集训 Day6」A 结论题+Lucas定理
题解: 当奇数 发现答案就是C(n,1)^2+C(n,3)^2+...C(n,n)^2 倒序相加,发现就是C(2n,n) 所以答案就是C(2n,n)/2 当偶数 好像并不会证 打表出来可以得到 2.当 ...
- [转]java位运算(1)
http://blog.csdn.net/xiaochunyong/article/details/7748713 Java提供的位运算符有:左移( << ).右移( >> ) ...
- Web前端开发:Sublime Text 常用插件
在安装这些插件之前,确保你已经安装了Package Control. 安装Package Control方法: 通过菜单栏View->Show Console 或者快捷键Ctrl+` 打 ...
- python辅助sql手工注入猜解数据库案例分析
发现存在sql注入漏洞 简单一点可以直接用sqlmap工具暴库 但是如果想深入理解sql注入的原理,可以尝试手工注入,配合python脚本实现手工猜解数据库 首先hachbar开启 获取cms登录后的 ...
- POJ1469 COURSES 二分图匹配 匈牙利算法
原文链接http://www.cnblogs.com/zhouzhendong/p/8232649.html 题目传送门 - POJ1469 题意概括 在一个大矩阵中,有一些障碍点. 现在让你用1*2 ...
- BZOJ2553 [BeiJing2011]禁忌 AC自动机 矩阵
原文链接http://www.cnblogs.com/zhouzhendong/p/8196279.html 题目传送门 - BZOJ2553 题意概括 引用一下lych大佬的: 在字母只有前alph ...
- Kafka生产者案例报警告SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
一.SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 这个报警告的原因简单来说时因为slf4j的版本 ...
- Gym 102091K The Stream of Corning 2【线段树】
<题目链接> 题目大意: 进行两种操作:1.给定一个数的出现时间.价值.消失时间: 2.进行一次询问,问你当前时间,第K大的数的价值. 解题分析: 采用离线集中处理,将每个数的出现时间和它 ...
- 分布式事务?咱先弄明白本地事务再说 - ACID
过去一段时间面试的同学,对于数据库事务,可以按照配置正常使用,但很多都无法讲清楚和理解数据库事务这个东西真正的意义,以及互联网兴起以后,当今数据库在ACID面前面临怎样的问题和抉择. 事务,是各大 ...