一、监听器

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. CentOS6—HAProxy安装与配置

    概述 Haproxy下载地址:http://pkgs.fedoraproject.org/repo/pkgs/haproxy/ 关闭SElinux.配置防火墙 1.vi /etc/selinux/co ...

  2. docker运行php网站程序

    有一个之前的php网站程序需要迁移到K8S,简单调研了下. 基础镜像 官方提供了诸如php:7.1-apache的基础镜像,但是确认必要的扩展,例如gd,当然官方提供了docker-php-ext-i ...

  3. HttpWatch入门使用教程

    HttpWatch V10.0.20.0 官方免费版 HttpWatch是强大的网页数据分析工具.集成... HttpWatch Professional V10.0.20.0 官方下载 HttpWa ...

  4. js写三级联动

    <!DOCTYPE HTML> <html> <head> <title>联动菜单</title> <meta charset=&qu ...

  5. .netcore加入APM系统 SkyWalking

    安装环境:windows 2016 必要条件: JDK8+ Elasticsearch 5.x(注:目前不支持es6) 8080,10800,11800,12800 端口不被占用 下载skywalki ...

  6. Oozie

    Oozie的功能模块 workflow 由多个工作单元组成 工作单元之间有依赖关系 MR1->MR2->MR3->result hadoop jar:提交1个MR oozie:监控当 ...

  7. 001 Hello Security 的框架搭建

    一:STS 1.下载STS 官网:http://spring.io/tools 使用一个干净的STS进行操作学习. 2.jdk检查 3.添加自己的maven 4.使用tomcat 二:新建项目 1.新 ...

  8. Ubuntu 装机软件

    Ubuntu16.04 软件商店闪退打不开 sudo apt-get update sudo apt-get dist-upgrade # 应该执行一下更新就好,不需要重新安装软件中心 sudo ap ...

  9. Mysql 查询实现成绩排名

    Mysql 查询实现成绩排名,相同分数名次相同,类似于rank()函数 近日系统要实现总分成绩排名,而且相同分数的学生排名要一样,在网上搜了一圈,没有找到合适的方法,只能靠自己实现了,这里提供两种方法 ...

  10. 比特币源码分析--C++11和boost库的应用

    比特币源码分析--C++11和boost库的应用     我们先停下探索比特币源码的步伐,来分析一下C++11和boost库在比特币源码中的应用.比特币是一个纯C++编写的项目,用到了C++11和bo ...