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 ...
随机推荐
- spring security实现动态配置url权限的两种方法
缘起 标准的RABC, 权限需要支持动态配置,spring security默认是在代码里约定好权限,真实的业务场景通常需要可以支持动态配置角色访问权限,即在运行时去配置url对应的访问角色. 基于s ...
- ELK+Redis+Nginx服务数据存储以及Nginx日志的收集
PS:此片文章是承接上篇ELK部署文档,再次便不详细说明了 [安装Redis] [root@Redis ~]# wget http://download.redis.io/releases/redi ...
- Flask---第一个例子--使用Flask写的【Hello World !】的web程序
from flask import Flask;------->引入Flask插件,pip install Flask; app=Flask(__name__) #变量app是Flask的一个实 ...
- HDU2853 Assignment KM
原文链接http://www.cnblogs.com/zhouzhendong/p/8284105.html 题目传送门 - HDU2853 题意概括 (来自谷歌翻译) 题解 这是一道好题. 我们首先 ...
- Linux安装Tomcat-Nginx-FastDFS-Redis-Solr-集群——【第八集之安装Nginx】
1,务必保证安装Nginx之前,所需的环境必须安装完备. gcc 安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc:yum install gcc ...
- Node.js实现网络编程
http://www.cnblogs.com/myzhibie/p/4579122.html
- SpringBoot统一错误处理
1.处理错误请求页面 import org.springframework.stereotype.Controller; import org.springframework.web.bind.ann ...
- 四、Python导入自己写的包报错:没有该包如何解决
场景:当你运行文件时,提示没有你想要导入的这个包,这是只需在你运行文件的开头添加俩行代码: import sys sys.path.apprnd('../') 原理:请看图解 另外解释下sys.pat ...
- 大家的备忘录——xpage_在同一页面展开文档显示该文档详细信息(可显示处理过的Rich Text)
Xpage大纲: 解析: 1.通过[link2]点击触发jQuery事件来展开[面板:thispanel] 2.[面板:thispanel]写了onClientLoad事件:让thispanel隐藏. ...
- Farewell Party-构造
Farewell Party 思路 : 转换思路 ,有 a [ i ] 个不相等的 ,那么至少得有 n - a [ i ]个与它相等的. 但是有可能与它拥有相同数目的有很多. 但是为了能够最终 分配成 ...