6.Javaweb-过滤器与监听器

news2024/11/18 13:37:27

Javaweb-过滤器与监听器

文章目录

  • Javaweb-过滤器与监听器
      • 一、过滤器
        • **Filter接口API:**
      • 过滤器生命周期
          • 1.创建(Creation):
          • 2.初始化(Initialization):
          • 3.执行(Execution):
          • 4.销毁(Destroy):
      • 二、 Listener & 监听器
      • 监听器概述
        • **监听器分类:**
          • **按监听的对象划分:**
          • 2.**按监听的事件划分:**
      • Java Web的监听器
          • 常用监听器
          • 其他监听器
            • . session域监听器
            • HttpSessionListener 监听器
            • ServletRequestAttributeListener 监听器
          • session域的两个特殊监听器
          • HttpSessionBindingListener 监听器
          • HttpSessionActivationListener 监听器

一、过滤器

Filter是Java Web开发中的一种技术,它可以对目标资源的请求进行过滤。简单来说,Filter就像是一个前置处理器或者拦截器,它会在目标资源被请求之前执行,对请求进行一定的处理或者拦截。

  • Filter接口是Filter的开发规范,所有开发的Filter都需要实现这个接口。当一个请求到达Filter时,容器会先创建一个HttpServletRequest和HttpServletResponse对象,然后调用Filter的doFilter方法。

  • doFilter方法决定了一个请求是否可以继续执行。如果doFilter方法允许请求继续,那么请求将会被转发到目标资源。如果doFilter方法拒绝了请求,那么请求就会在这个Filter中停止,由Filter自己对请求做出响应。

  • 除了对请求进行过滤,Filter也可以在目标资源响应之前对响应进行再次处理。因此,Filter不仅可以用于对请求的过滤,也可以用于对响应的处理。

  • Filter是GOF(设计模式)中责任链模式的典型案例。责任链模式是指多个对象形成一个处理请求的链条,每个对象都有机会处理请求,直到有一个对象处理了请求为止。

  • Filter的常用应用非常广泛,包括但不限于登录权限检查、解决网站乱码、过滤敏感字符、日志记录、性能分析等。这些应用都是通过Filter技术实现的。

  • 在这里插入图片描述

Filter接口API:

从IDEA上面的Filter.java上扒下来的源码,也就三个抽象方法:

  • init(FilterConfig filterConfig):这是过滤器初始化时调用的方法。在这个方法中,可以设置过滤器的一些配置信息,如参数等。默认的实现是不执行任何操作。

  • doFilter(ServletRequest request, ServletResponse response, FilterChain chain):这是过滤器的主要工作方法。每次客户端请求资源时,都会调用此方法。在这个方法中,可以根据需要修改请求和响应对象,并决定是否将请求传递给下一个过滤器或目标资源。这通常涉及检查请求,可能修改请求或响应,然后调用chain.doFilter()来继续过滤器链,最后可能直接在响应上设置头信息。

  • destroy():这是过滤器被移除服务时调用的方法。在这个方法中,可以进行一些清理工作,例如释放资源,确保所有持久状态与内存中的当前状态同步。默认的实现同样不执行任何操作。

过滤器生命周期

Filter在Web项目中是一个重要的组件,其生命周期与Servlet有些类似,但也有一些区别。

1.创建(Creation):

Filter对象在系统启动时就会被创建。不像Servlet需要配置load-on-startup参数才能实现系统启动时立即创建,Filter的创建是默认行为,系统启动时就会立即创建Filter对象。

2.初始化(Initialization):

在Filter对象创建后,会调用其init方法进行初始化。这个过程通常会接收一个FilterConfig对象作为参数,通过这个对象可以获取到Filter的配置信息。

3.执行(Execution):

初始化完成后,Filter就可以开始执行其任务。在Web应用中,Filter通常被用来执行一些通用的操作,如日志记录、数据压缩、认证授权等。Filter的执行顺序是根据其在web.xml中的配置顺序来决定的。

4.销毁(Destroy):

当Web应用关闭或重启时,Filter的生命周期结束,会调用其destroy方法进行资源清理。

二、 Listener & 监听器

监听器概述

Listener 监听器是 JavaWeb 应用程序中的一种组件,它是 Servlet、Filter 和 Listener 这三个组件之一。Listener 是 Java EE 规范中的一部分,它是一个接口,用于监听特定事件或变化,并在触发时执行相应的任务。

监听器的作用是监听特定的对象或事件,例如对象的创建/销毁或属性变化等,当这些事件发生时,监听器会触发对应的方法来完成相应的任务。

有八个常用的监听器

其中最常用的是 ServletContextListenerServletContextAttributeListener

监听器分类:

根据所监听的对象和事件的不同,可以将监听器大致分为以下几类:

  1. 按监听的对象划分:
  • Application域监听器:这类监听器监听的是ServletContext对象,其中包括ServletContextListener和ServletContextAttributeListener。ServletContextListener用于监听ServletContext对象的创建和销毁事件,而ServletContextAttributeListener则用于监听ServletContext对象属性的变化。

  • Session域监听器:这类监听器监听的是HttpSession对象,其中包括HttpSessionListener、HttpSessionAttributeListener和HttpSessionBindingListener。HttpSessionListener用于监听HttpSession对象的创建和销毁事件,HttpSessionAttributeListener用于监听HttpSession对象属性的变化,而HttpSessionBindingListener则用于监听HttpSession对象绑定和解绑事件。

  • Request域监听器:这类监听器监听的是ServletRequest对象,其中包括ServletRequestListener和ServletRequestAttributeListener。ServletRequestListener用于监听ServletRequest对象的创建和销毁事件,ServletRequestAttributeListener用于监听ServletRequest对象属性的变化。

2.按监听的事件划分:
  • 域对象的创建和销毁监听器:这类监听器包括ServletContextListener、HttpSessionListener和ServletRequestListener,它们分别用于监听ServletContext、HttpSession和ServletRequest对象的创建和销毁事件。

  • 域对象数据增删改事件监听器:这类监听器包括ServletContextAttributeListener、HttpSessionAttributeListener和ServletRequestAttributeListener,它们分别用于监听ServletContext、HttpSession和ServletRequest对象属性的变化事件。

  • 其他监听器:这类监听器包括HttpSessionBindingListener和HttpSessionActivationListener等,它们分别用于监听HttpSession对象绑定和解绑事件以及激活事件等。

Java Web的监听器

常用监听器

在Java Web监听器中,常用的监听器是

ServletContextListenerServletContextAttributeListener

ServletContextListener: 这个接口提供了一个监听器,可以监听ServletContext对象的创建和销毁事件。当Web应用程序启动时,会创建一个ServletContext对象,而在应用程序关闭时,该对象将被销毁。通过实现ServletContextListener接口,可以在这两个关键时刻执行特定的操作。例如,可以在ServletContext对象创建时初始化一些全局变量或执行其他必要的设置,或在对象销毁时进行资源清理。

ServletContextAttributeListener: 这个接口提供了一个监听器,可以监听ServletContext属性(即在ServletContext对象中存储的属性)的添加和移除事件。可以通过实现这个接口来监听特定属性的添加或移除操作,并在这些操作发生时执行特定的操作。例如,当某个属性被添加到ServletContext时,可以进行一些初始化操作;当某个属性被移除时,可以执行一些清理操作。

其他监听器

除了ServletContextListener和ServletContextAttributeListener,其他的监听器用的比较少

. session域监听器
HttpSessionListener 监听器

**作用:**HttpSessionListener 是一个监听器,用来监听 HTTP 会话的创建和销毁。

当一个 HTTP 会话被创建或销毁时,它就会触发相应的事件,我们可以编写代码来响应这些事件。

ServletRequestAttributeListener 监听器

**作用:**ServletRequestAttributeListener 监听器可以监听 ServletRequest 对象中的属性变化。当属性被添加、移除或替换时,这个监听器会收到通知并执行相应的操作。

session域的两个特殊监听器
HttpSessionBindingListener 监听器

HttpSessionBindingListener 监听器也叫session绑定监听器

**作用:**HttpSessionBindingListener 监听 HttpSession 中对象的添加和移除,以确保数据的准确性和一致性。它可以帮助我们跟踪数据变化并触发相应操作。

HttpSessionActivationListener 监听器

HttpSessionActivationListener 监听器也叫钝化活化监听器

作用:HttpSessionActivationListener 监听 HttpSession 中对象的序列化和反序列化。在分布式系统中,它帮助处理对象的存储和恢复,允许在序列化和反序列化时执行特定操作。

监听器也叫钝化活化监听器

作用:HttpSessionActivationListener 监听 HttpSession 中对象的序列化和反序列化。在分布式系统中,它帮助处理对象的存储和恢复,允许在序列化和反序列化时执行特定操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2173857.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【设计模式-状态模式】

定义 状态模式(State Pattern)是一种行为型设计模式,允许对象在其内部状态改变时改变其行为。该模式将状态的变化封装在状态对象中,从而使得对象的行为随着状态的变化而变化。 UML图 角色 Context(上下文&#xff0…

使用scroll-behavior属性实现页面平滑滚动的几个问题

在较长的页面中,为了便于用户浏览,开发人员经常会使用锚点链接,锚点链接默认的效果是瞬间跳转,为了让用户体验更好,往往会添加滚动效果。我记得要实现滚动效果,以前一般是结合一段JavaScript代码来实现。 后…

CSS04-Chrome调试工具

Chrome 浏览器提供了一个非常好用的调试工具,可以用来调试我们的 HTML结构和 CSS 样式。

万户OA-ezOFFICE fileUpload.controller 任意文件上传漏洞复现

0x01 产品描述: 万户OA(Office Automation)是一款企业级协同办公管理软件,旨在为企业提供全面的办公自动化解决方案。万户ezOFFICE存在任意文件上传漏洞。攻击者可以通过该远程下载任意文件到目标服务器,导致攻击者可获…

生信初学者教程(十四):差异结果的火山图

文章目录 介绍加载R包导入数据画图函数火山图输出结果总结介绍 火山图(Volcano Plot)是一种用于展示基因差异表达分析结果的二维散点图。它通过同时展示统计显著性和变化幅度,帮助研究者识别出在不同条件下显著差异表达的基因。火山图的横轴通常表示基因表达变化的倍数对数(…

第 18 章 从猫爷借钱说起——事务简介

18.1 事务的起源 CREATE TABLE account ( id INT NOT NULL AUTO_INCREMENT COMMENT 自增id, name VARCHAR(100) COMMENT 客户名称, balance INT COMMENT 余额, PRIMARY KEY (id) ) EngineInnoDB CHARSETutf8;insert into account (name, balance) values (狗哥, 11), (猫爷, 2…

VS开发C++项目常用基础属性配置

这篇文件简单讨论一下visual studio中项目属性的常用基础配置。 1.输出目录:项目目标文件生成位置。 2.中间目录:项目生成的中间文件所在的位置。 3.目标文件名:项目生成目标文件名称。 4.附加包含目录:三方库等头文件所在的位…

图新说 注册机使用 功能介绍

图新说简介 1. 什么是图新说? 图新说是一款技术自主可控的国产三维BIMGIS数字化方案汇报、成果交付平台。主要解决汇报方案的精准还原、方案展示、方案汇报及成果交付问题。 将影像、实景三维等周边现状数据与设计成果完美融合将设计方案二三维一体化表达流畅讲解设…

用Promise实现前端并发请求

/** * 构造假请求 */ async function request(url) {return new Promise((resolve) > {setTimeout(() > {resolve(url);},// Math.random() * 500 800,1000,);}); }请求一次,查看耗时,预计应该是1s: async function requestOnce() {c…

vue 项目打包更新后,界面未刷新时js与css资源加载404,监听资源文件404后自动重新加载页面。

问题 vue 项目打包更新(生成环境)后,界面未刷新时js与css资源加载404,如图: 期望 希望可以监听到资源文件加载404时,刷新界面,解决打包后由于文件名的变化导致点击旧页面时 JS 和 CSS 文件出…

Spring MVC常用注解(绝对经典)

文章目录 一、元注解1.1 Target:1.2 Retention: 二、常见注解2.1 Controller:2.2 SpringBootApplication:2.3 RequestMapping:2.4 RequestParam:2.5 PathVariable:2.6 RequestPart:2…

OpenCV 形态学相关函数详解及用法示例

OpenCV形态学相关的运算包含腐蚀(MORPH_ERODE),膨胀(MORPH_DILATE),开运算(MORPH_OPEN),闭运算(MORPH_CLOSE),梯度运算(MORPH_GRADIENT),顶帽运算(MORPH_TOPHAT),黑帽运算(MORPH_BLACKHAT),击中…

『网络游戏』GoLand服务器框架【01】

打开GoLand创建项目 编写Go程序:main.go package mainimport ("fmt""newgame/game/gate""os""os/signal""syscall""time" )var (SinChan make(chan os.Signal, 1)closeChan chan struct{} )func ma…

【JavaEE】——线程池大总结

阿华代码,不是逆风,就是我疯, 你们的点赞收藏是我前进最大的动力!!希望本文内容能够帮助到你! 目录 引入:问题引入 一:解决方案 1:方案一——协程/纤程 (1…

SwiftUI简明概念(3):Path.addArc的clockwise方向问题

一、画个下半圆 SwiftUI中绘制下半圆的一个方法是使用Path.addArc,示例代码如下: var body: some View {Path { path inpath.addArc(center: CGPoint(x: 200, y: 370), radius: 50, startAngle: Angle(degrees: 0), endAngle: Angle(degrees: 180.0), …

谷歌发布Imagen 3,超过SD3、DALL・E-3,谷歌发布新RL方法,性能提升巨大,o1模型已证明

谷歌发布Imagen 3,超过SD3、DALL・E-3,谷歌发布新RL方法,性能提升巨大,o1模型已证明。 谷歌DeepMind发布了全新文生图模型Imagen 3,在文本语义还原、色彩搭配、文本嵌入、图像细节、光影效果等方面相比第二代大幅度提升…

2024新版IDEA创建JSP项目

1. 创建项目 依次点击file->new->Project 配置如下信息并点击create创建项目 2. 配置Web项目 点击file->Project Structure 在点击Project Settings->Module右键右边模块名称->ADD->Web 点击Create Artifact 出现如下界面就表示配置完毕,…

3.整数二分

模板 package base;public class Bsearch {public int binary_search1(int l, int r){while (l<r){int mid (lr1)>>1;if(check(mid)) lmid;else r mid-1;}return l;}public int binary_search2(int l, int r){while (l<r){int mid (lr)>>1;if (check(mid…

Python酷库之旅-第三方库Pandas(129)

目录 一、用法精讲 576、pandas.DataFrame.merge方法 576-1、语法 576-2、参数 576-3、功能 576-4、返回值 576-5、说明 576-6、用法 576-6-1、数据准备 576-6-2、代码示例 576-6-3、结果输出 577、pandas.DataFrame.update方法 577-1、语法 577-2、参数 577-3、…

实操了 AI 大模型项目落地, 程序员成功转变为 AI 大模型工程师

根据《2024 年全球人工智能行业报告》最新的数据显示&#xff0c;全球 AI 市场预计将以每年超过 40% 的速度增长&#xff0c;到 2030 年市值将达到数万亿美元&#xff0c;这也是预示着在接下来的十年到十五年里&#xff0c;人工智能将获得巨大的发展红利。 在过去的一年多时间…