Eclipse14:Listener

本文详细介绍了Java中的监听器,包括监听器的概念、用途和术语。特别关注Servlet中的监听器,如ServletContextListener、HttpSessionListener和ServletRequestListener,以及它们在实际应用中的场景,例如加载框架配置、统计在线人数等。同时讲解了监听域对象属性变更和Java类状态改变的监听器,以及相关配置和使用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、监听器

1.1 概述

监听器就是一个实现了特定接口的Java类,这个Java类用于监听另一个Java类的方法调用或者属性的改变。当被监听对象发生上述事件后,监听器某个方法将会立即被执行。

1.2 用途

用来监听其他对象的变化的。主要应用在图形化界面开发上。

Java中GUI,Android

1.3 术语(监听器可想象为汽车报警器)

  1. 事件源:指的是被监听对象(汽车)
  2. 监听器:指的是监听的对象(报警器)
  3. 事件源和监听器绑定:在汽车上安装报警器
  4. 事件:指的是事件源对象的改变(踹了汽车一脚)----主要功能获得事件源对象

1.4 入门案例

1.5 监听器的执行过程

 1.6 Servlet的监听器

在Servlet中定义了多种类型的监听器,它们用于监听的事件源分别是ServletContext、HttpSession和ServletRequest这三个域对象。

分为三类:

  1. 一类:监听三个域对象的创建和销毁的监听器(三个)
  2. 二类:监听三个域对象的属性变更(属性添加、移除、替换)的监听器(三个)
  3. 三类:监听HttpSession中JavaBean的状态改变(钝化、活化、绑定、解除绑定)的监听(两个)

 1.6.1 ServletContextListener监听器的使用(第一类)

(1)ServletContext监听器的作用:用来监听ServletContext域对象的创建和销毁的监听器

(2)ServletContext监听器的创建和销毁:

  1. 创建:在服务器启动的时候,为每个web应用创建单独的ServletContext对象。
  2. 销毁:在服务器关闭的时候,或者项目从web服务器中移除的时候。

(3)ServletContextListener监听器的方法

编写监听器:

// 监听器类
package com.itheima.listener;

import javax.servlet.ServletContextEvent;

public class ServletContextListener implements javax.servlet.ServletContextListener {

	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		// TODO Auto-generated method stub
		System.out.println("ServletContextListener对象被销毁了");
		
	}

	@Override
	public void contextInitialized(ServletContextEvent sce) {
		// TODO Auto-generated method stub
		System.out.println("ServletContextListener对象被创建了");
		
	}
	
}

事件源和监听器绑定:通过配置文件web.xml绑定

 (4)ServletContextListener企业用途

  1. 加载框架的配置文件:
    1. Spring框架提供了一个核心监听器ContextLoaderListener。
  2. 定时任务调度:

1.6.2 HttpSessionListener监听器的使用(第一类)

(1)作用:用来监听HttpSession对象的创建和销毁

(2)HttpSession的创建和销毁

  1. 创建:
    1. 服务器端第一次调用getSession()方法时候。
  2. 销毁:
    1. 非正常关闭服务器(正常关闭服务器session会被序列化)。
    2. Session过期(默认过期时间30分钟)。
    3. 手动调用session.invalidate()方法

(3)HttpSessionListener监听器的方法

 (4)编写监听器监听HttpSession对象创建和销毁

 

注意

  1. 访问HTML是否创建Session           :不会
  2. 访问JSP是否创建Session                 :会
  3. 访问Servlet是否创建Session        :不会(默认没有调用getSession方法)

 1.6.3 ServletRequestListener监听器的使用(第一类)

(1)作用:用户监听ServletRequest对象的创建和销毁

(2)ServletRequest对象的创建和销毁

  1. 创建:从客户端向服务器发送一次请求,服务器就会创建request对象。
  2. 销毁:服务器对这次请求作出了响应之后,request对象就销毁了。

(3)ServletRequestListener监听器的方法

 (4)代码

(5)注意:

  1. 访问HTML页面是否创建请求对象       :会
  2. 访问JSP页面是否创建请求对象            :会
  3. 访问Servlet是否创建请求对象              :会

 1.7 案例:统计当前在线人数

 分析:

代码:

新建包和类,新建类时直接继承

监听器配置:

 JSP页面编写

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isELIgnored="false" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>在线人数:${count}</h1>
</body>
</html>

访问jsp页面即可

1.8 监听三个域对象的属性变更的监听器(第二类)

1.8.1 ServletContextAttributeListener

 监听ServletContext对象中的属性变更(属性添加,移除,替换)的监听器

1.8.2 HttpSessionAttributeListener

监听HttpSession对象中的属性变更(属性添加,移除,替换)的监听器

1.8.3 ServletRequestAttributeListener

监听ServletRequest对象中的属性变更(属性添加,移除,替换)的监听器

 1.8.4 代码演示

演示HttpSessionAttributeListener

 1.9 监听HttpSession中Java类状态改变的监听器(第三类)

第三类监听器概述

保存在Session域中的Java类可以有多种状态:绑定到session中;从session中解除绑定;随session对象持久化到一个存储设备中(钝化);随session对象从一个存储设备中恢复(活化)。

Servlet对方中定义了两个特殊的监听的接口来帮助Java类了解自己在Session域中的状态

HttpSessionBindingListener接口

HttpSessionActivationListener接口,

实现这两个接口的类不需要在web.xml中进行配置。

 1.9.1 HttpSessionBindingListener监听器

监听Java类在HttpSession中的绑定和解除绑定的状态的监听器

 

 1.9.2 HttpSessionActivationListener监听器

监听HttpSession中Java类的钝化和活化监听器

  1. 配置完成session的序列化和反序列化(正常关闭服务器序列化,但是一般情况肯定不能采用关闭服务器)

Context标签可以配置在:

tomcat/conf/context.xml :所有tomcat下虚拟主机和虚拟目录下的工程都会序列化session

tomcat/conf/Catalina/localhost/context.xml:localhost虚拟主机下的所有项目会序列化session

工程/META-INF/context.xml   :当前工程才会序列化session

<Context>
<Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">
	<Store className="org.apache.catalina.session.FileStore" directory="itheima"/>
</Manager>
</Context>

 先访问demo4.jsp,1分钟不操作,访问jsp5,获取不到bean.name

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值