Listener--------监听器
Listener:监听器的原理和实例
八大监听器:
ServletRequest对象:
生命周期监听:ServletRequestListener
属性监听:ServletRequestAttributeListener
HttpSession对象:
生命周期监听:HttpSessionListener
属性监听:HttpSessionAttributeListener
对象绑定监听1:HttpSessionBindingListener
对象钝化活化监听2:HttpSessionActivationListener
ServletContext对象:
生命周期监听:ServletContextListener
属性监听:ServletContextAttributeListener
一、监听对象,主要监听servlet的三大域对象request,session,application(ServletRequest,HttpSession,ServletContext)
监听内容:
A:监听域对象的创建和销毁,也就是生命周期的监听
B:监听域对象的属性添加,移除和更改
C:监听被加入域对象中的对象
二、三大域对象的生命周期
ServletRequest 什么时候被创建:
A: 请求一个jsp页面时,tomcat 翻译jsp页面为一个servlet类,执行servlet 类中的service()方法是,tomcat帮我们创建了9大内置对象,其中就有request。
B: 请求一个servlet时,doGet() 或者是doPost()方法,tomcat 自动也会帮我们创建request,
ServletRequest 什么时候被销毁:
执行完service()方法或者 doGet()方法,doPost()方法即销毁
HttSesssion 什么时候被创建:
Request.getSession(): 先判断是否存在session对象,如果存在就直接返回,如果不存在就帮我们创建一个session,然后返回。
HttSesssion 什么时候被销毁:
是根据cookie的生命周期来判断的,如果cookie是浏览器生命周期的话,那么浏览器关闭后,session即销毁;如果cookie是保存到文件中的,那么就具体情况,具体对待。
ServletContext 什么时候被创建:
Tomcat启动项目,即创建了application对象。
ServletContext 什么时候被销毁:
Tomcat关闭项目,即销毁了application对象。
三、【实例】
创建一个监听器
A:选择一个接口,根据监听对象,监听内容的不同选择不同的接口
B:在web.xml中添加监听器的配置信息
<listener>
<listener-class>监听器文件的相对路径</listener-class>
</listener>
监听器: HttpSessionAttributeListener
【原理】
HttpSessionAttributeListener是对SessionAttribute的监听,当在会话对象中加入属性,移除属性和替换属性时就会触发HttpSessionAttributeListener监
听器。
接口HttpSessionAttributeListener有3个方法:
1、public void attributeAdded(HttpSessionBindingEvent sbe){}:该方法在session添加对象是触发
2、public void attributeRemoved(HttpSessionBindingEvent sbe){}:该方法是在session移除对象时触发的
3、public voidattributeReplaced(HttpSessionBindingEvent se):在Session属性被重新设置时
【实例】统计一下系统的登录人数
package com.aaa.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import javax.servlet.http.HttpSessionBindingEvent;
@WebListener()
public class Listener2 implements ServletContextListener,
HttpSessionListener, HttpSessionAttributeListener {
public int count=0;//统计登录的人数
// Public constructor is required by servlet spec
public Listener2() {
}
// -------------------------------------------------------
// ServletContextListener implementation
// -------------------------------------------------------
public void contextInitialized(ServletContextEvent sce) {
/* This method is called when the servlet context is
initialized(when the Web application is deployed).
You can initialize servlet context related data here.
*/
}
public void contextDestroyed(ServletContextEvent sce) {
/* This method is invoked when the Servlet Context
(the Web application) is undeployed or
Application Server shuts down.
*/
}
// -------------------------------------------------------
// HttpSessionListener implementation
// -------------------------------------------------------
public void sessionCreated(HttpSessionEvent se) {
/* Session is created. */
}
public void sessionDestroyed(HttpSessionEvent se) {
/* Session is destroyed. */
}
// -------------------------------------------------------
// HttpSessionAttributeListener implementation
// -------------------------------------------------------
public void attributeAdded(HttpSessionBindingEvent sbe) {
/* This method is called when an attribute
is added to a session.
*/
//session对象中加入属性了触发此方法
//sbe.getName()得到session里的属性名
if(sbe.getName().equals("user")){
count++;
//将count放在全局域对象ServletContext里
sbe.getSession().getServletContext().setAttribute("count",count);
System.out.println("现在系统登录的用户人数"+count);
}
}
public void attributeRemoved(HttpSessionBindingEvent sbe) {
/* This method is called when an attribute
is removed from a session.
*/
//session对象中删除属性时触发此方法
if(sbe.getName().equals("user")){
count--;
sbe.getSession().getServletContext().setAttribute("count",count);
System.out.println("现在系统登录的用户人数"+count);
}
}
public void attributeReplaced(HttpSessionBindingEvent sbe) {
/* This method is invoked when an attibute
is replaced in a session.
*/
}
}
转载于:https://www.cnblogs.com/fbbg/p/11099169.html
Listener--------监听器相关推荐
- Listener 监听器
Listener 监听器 前言:之前写了一篇关于Filter的文章:http://tianweili.github.io/blog/2015/01/26/java-filter/,现在再来一篇List ...
- 【Servlet】Java Serlvet Listener 监听器
Listener监听器 Servlet规范中定义的一种特殊的组件,用来监听Servlet容器产生的事件并进行相应的处理 容器产生的事件分类- 生命周期相关的事件- 设置和删除Attribute数据相关 ...
- 第 8 章 配置listener监听器
第 8 章 配置listener监听器 注意 还记得我们之前讲过的在线列表吗?第 4.2 节 "例子:在线列表".我们曾经说过那个在线列表无法判断用户非法退出,很可能造成在线列表无 ...
- Filter(过滤器)、Listener(监听器)
一: 过滤器: 可以把"不和谐"的东西给过滤掉 01.过滤器概述 生活中的过滤器:带有过滤功能的净水器,滤纸,香烟的过滤嘴,测试,丈母娘.程序中的过滤器:在JAVA中最小的程序单元 ...
- javaweb(11) Listener监听器与Filter过滤器
javaweb(11) Listener监听器与Filter过滤器 Listener监听器 什么是Listener监听器 Listener 监听器它是 JavaWeb 的三大组件之一.JavaWeb ...
- Filter 过滤器和 Listener 监听器,java面试必问底层
一.Filter 过滤器 1.概述 2.开发步骤 3.过滤器执行流程 4.过滤器生命周期 5.过滤器配置问题 6.过滤器链(配置多个过滤器) [二.Listener 监听器]( <一线大厂Jav ...
- Java中的Listener监听器与Ajax技术和Axios异步框架以及JSON传递接收数据
Listener监听器与Ajax Listener 概念 Listener 表示监听器,是 JavaWeb 三大组件(Servlet.Filter.Listener)之一. 监听器可以监听就是在 ap ...
- web核心 8-filter过滤器 listener监听器 相对路径 绝对路径 项目名路径
内容介绍 1.Filter过滤器 2.listener监听器 Filter过滤器 概述 web服务器端有三大技术:Servlet Filter Listener Servlet:本质上是一个类,这个类 ...
- Listener(监听器)的简单介绍
Listener(监听器)的作用和内部机制 作用:监听某个事件的发生,状态的改变 内部机制:接口回调 八个web监听器 实现监听: 创建类实现监听器接口 web.xml文件中配置(注册)监听器< ...
- Listener(监听器)详解
Listener(监听器)详解 作用:监听某个事件的发生,状态的改变 内部机制:接口回调 监听器用于监听Web应用中某些对象的创建.销毁.增加,修改,删除等动作的发生,然后作出相应的响应处理.当监听范 ...
最新文章
- python将控制台输出保存至文件
- java 日期的加减_用java实现日期类的加减
- slice_input_producer在2.0版本里怎么用_用Gan生成一维数据(附代码)
- Kubernetes Nginx Ingress 安装与使用
- RPC框架原理及从零实现系列博客(二):11个类实现简单RPC框架
- 人工智能实战_第三次作业_陈泽寅
- linux下重新分区、数据备份相关(parted、dd等命令)
- ajax post form表单提交中文乱码,ajax XMLHTTP Post Form时的表单乱码综合解决
- ubuntu安装opencv4.X+opencv_contrib教程(c++)
- 怎么在Excel中快速将英文翻译为中文
- 痞子衡嵌入式:ARM Cortex-M内核那些事(3.2)- 安全模块看特性(M23/33/35P)
- 联想Win10安装Ubuntu双系统教程
- 解决Ubuntu DVD 用wubi 安装时候要重新下载镜像的笨方法
- 蓝牙连接打印机打印资产标签.
- 打开浏览器时主页被锁定怎么也改不掉的一个好办法
- 智慧校园:校务助手微信小程序端源码
- Acer传奇Go电脑开机几分钟就会蓝屏怎么重装系统?
- 自定义notepad++ --添加插件SourceCookifier
- PHP面试题2021和2022面试、跳槽必备大全!
- 23种设计模式——UML类图+简要分析+例题
热门文章
- linux环境中通过useradd命令,创建用户的时候指定用户的base-dir
- 2017甲骨文JavaOne参会感想
- [C#] C# 知识回顾 - 装箱与拆箱
- 【java】map的几种遍历方式
- 二十六个月Android学习工作总结
- PHD considerations
- Another Rejection from University of Oxford MRes in Engineering
- SWIFT入门 Dictionary
- CodeForces - 1029B.Creating the Contest(最长上升子序列0(n)解法)
- 第4章:介绍python对象类型/4.1 python的核心数据类型/4.7 集合