JavaWeb——监听器Listener 过滤器Filter——韩顺平学习笔记

文章目录

  • JavaWeb 三大组件之监听器 Listener
    • Listener
    • JavaWeb 的监听器
      • ServletContextListener 监听器
      • ServletContextAttributeListener 监听器
    • 其它监听器-使用较少
      • HttpSessionListener 监听器
      • HttpSessionAttributeListener 监听器
      • ServletRequestListener 监听器
      • ServletRequestAttributeListener 监听器
      • HttpSessionBindingListener 感知监听器
      • HttpSessionActivationListener 感知监听器
  • JavaWeb 三大组件之 过滤器 Filter
    • 为啥要过滤器-需求示意图
    • 过滤器介绍
    • Filter 过滤器基本原理
    • 需求
    • Filter 过滤器生命周期
    • FilterConfig
    • FilterChain 过滤器链
      • 基本原理示意图
      • 需求:
      • FilterChain 注意事项和细节
    • Filter 作业练习

JavaWeb 三大组件之监听器 Listener

Listener

  1. Listener 监听器它是 JavaWeb 的三大组件之一。JavaWeb 的三大组件分别是:Servlet 程序、Listener 监听器、Filter 过滤器
  2. Listener 是 JavaEE 的规范,就是接口
  3. 监听器的作用是,监听某种变化(一般就是对象创建/销毁, 属性变化), 触发对应方法完成相应的任务
    在这里插入图片描述
  4. JavaWeb 中的监听器(共八个), 目前最常用的是 ServletContextListener,

JavaWeb 的监听器

ServletContextListener 监听器

  1. 作用:监听 ServletContext 创建或销毁(当我们 Web 应用启动时,就会创建 ServletContext),即生命周期监听,应用场景(1)加载初始化的配置文件;比如 spring 的配置文件 (2)任务调度(配合定时器 Timer/TimerTask)
  2. 相关方法
    在这里插入图片描述
/*
 * 1. 当一个类实现了 ServletContextListener
 * 2. 该类就是一个监听器
 * 3. 该类可以监听的事件 由该类实现的监听接口决定 ,比如 实现ServletContextListener
 *    , 则该类就可以监听 ServletContext对象的创建和销毁, 以此类推
 * 4. HspServletContextListener 就是一个监听者
 * 5. 当web应用启动时,就会产生 ServletContextEvent 事件, 会调用监听器的对应事件处理方法
 *    contextInitialized, 同时会传递 事件对象
 * 6. 程序员可以通过 ServletContextEvent 事件对象,来获取需要的信息, 然后再进行业务处理
 * 7. tomcat怎么知道这个监听器存在 ? 因为我们需要在web.xml中配置
 * */
@WebListener()
public class LGQServletContextListener implements ServletContextListener {
   
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
   
        ServletContext servletContext = servletContextEvent.getServletContext();
        System.out.println("监听器监听到servletContext被创建" + servletContext);
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
   
        ServletContext servletContext = servletContextEvent.getServletContext();
        System.out.println("监听器监听到servletContext被销毁" + servletContextEvent);
    }
}

ServletContextAttributeListener 监听器

  1. 作用:监听 ServletContext 属性变化
  2. 相关方法
    在这里插入图片描述
@WebListener
public class LGQServletContextAttributeListener implements ServletContextAttributeListener {
   
    @Override
    public void attributeAdded(ServletContextAttributeEvent servletContextAttributeEvent) {
   
        System.out.println("监听到属性被创建:" + servletContextAttributeEvent.getName() + " "
                + servletContextAttributeEvent.getValue());
    }


    @Override
    public void attributeRemoved(ServletContextAttributeEvent servletContextAttributeEvent) {
   
        System.out.println("监听到属性被删除:" + servletContextAttributeEvent.getName() + " "
                + servletContextAttributeEvent.getValue());
    }

    @Override
    public void attributeReplaced(ServletContextAttributeEvent servletContextAttributeEvent) {
   
        System.out.println("监听到属性被替换:" + servletContextAttributeEvent.getName() + " "
                + servletContextAttributeEvent.getValue());
    }
}

@WebServlet(urlPatterns = "/ServletContextAttributeServlet")
public class ServletContextAttributeServlet extends HttpServlet {
   
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
        ServletContext servletContext = req.getServletContext();
        servletContext.setAttribute("123", "aegf");
        servletContext.setAttribute("124", "t43wt");
        servletContext.setAttribute("123", "123");
        servletContext.removeAttribute("124");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
        doPost(req, resp);

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

泰迪智能科技分享:AI大模型发展趋势分析

大规模预训练语言模型,也被称为“大模型”或“基座模型”,其特点在于拥有巨大的参数量,构成了复杂的人工神经网络模型。大模型具有规模性(参数量大)、涌现性(产生预料之外的新能力)以及通用性&a…

uni-app condition启动模式配置

锋哥原创的uni-app视频教程: 2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中...共计23条视频,包括:第1讲 uni…

Java EE 网络原理之HTTP 响应详解

文章目录 1. 认识"状态码"(status code)2. 通过 form 表单构造 HTTP 请求3. 通过 ajax 构造 HTTP 请求 1. 认识"状态码"(status code) 表示了这次请求对应的响应,是什么样的状态 (成功,失败,其他的情况&…

Graph Transformer2023最新研究成果汇总,附15篇必看论文

图Transformer是一种结合了Transformer模型和图神经网络(GNN)的框架,用于在图形结构数据上执行预测任务。在图Transformer中,Transformer的自注意力机制被用来学习节点之间的关系,而GNN则被用来生成节点的嵌入表示。通…

数据结构与算法(C语言版)P10——图

1、图的基本概念和术语 前面学过: 线性是一对一树形是一对多 而今天要学习的图形结构是多对多。 图的定义: G(V,E) V:顶点(数据元素)的__有穷非空__集合。E:边的有穷集合。 __有向图:__每条边都是有方向的 __无…

【linux】touch的基本使用

碎碎念 刚接触linux时候的几个最基础的命令之一,用来创建文件。如果使用touch --help的时候会发现作者对于touch的简介:Update the access and modification times of each FILE to the current time.用于修改文件的访问和时间戳 带我的leader属于那种…

rsync的介绍与使用

rsync的介绍与使用 一、简介 rsync(remote synchronize)是Liunx/Unix下的一个远程数据同步工具。它能够以非常高效的方式传输和同步文件,它可以将一个目录的文件快速地同步到另一个目录,还可以通过网络快速同步多台主机间的文件…

使用Python Flask搭建一个简单的Web站点并发布到公网上访问

文章目录 前言1. 安装部署Flask并制作SayHello问答界面2. 安装Cpolar内网穿透3. 配置Flask的问答界面公网访问地址4. 公网远程访问Flask的问答界面 前言 Flask是一个Python编写的Web微框架,让我们可以使用Python语言快速实现一个网站或Web服务,本期教程…

springBoot整合redis做缓存

一、Redis介绍 Redis是当前比较热门的NOSQL系统之一,它是一个开源的使用ANSI c语言编写的key-value存储系统(区别于MySQL的二维表格的形式存储。)。和Memcache类似,但很大程度补偿了Memcache的不足。和Memcache一样,R…

TDengine 公布 2023 年发展“成绩”,六大亮点引人瞩目

今天,我们进行了 2023 年重大成就和发展成绩盘点,主要归纳为产品创新、市场发展、开源社区、生态建设、活动布道与奖项荣誉六大维度。在元旦前夕,我们也想把这份“2023 年成绩单”分享给所有关注 TDengine 的朋友们。 在今年,最值…

你好!Apache Seata

北京时间 2023 年 10 月 29 日,分布式事务开源项目 Seata 正式通过 Apache 基金会的投票决议,以全票通过的优秀表现正式成为 Apache 孵化器项目! 根据 Apache 基金会邮件列表显示,在包含 13 个约束性投票 (binding votes) 和 6 个…

百分点科技成为中国“数据要素×”生态合作伙伴

12月24日,由中国经济体制改革研究会、中国电子、郑州市人民政府、中国经济改革研究基金会联合主办的中国“数据要素”生态大会在郑州召开,百分点科技受邀出席,并获颁中国“数据要素x”2024年度生态伙伴合作证书。 大会邀请了国家数据局党组成…

华天动力OA TemplateService 任意文件读取漏洞复现

0x01 产品简介 华天动力OA是一款将先进的管理思想、 管理模式和软件技术、网络技术相结合,为用户提供了低成本、 高效能的协同办公和管理平台。 0x02 漏洞概述 华天动力OA TemplateService接口处存在任意文件读取漏洞,未经身份认证的攻击者可利用此漏洞…

边缘计算网关:在智慧储能系统中做好储能通信管家

背景 目前储能系统主要由储能单元和监控与调度管理单元组成,储能单元包含储能电池组(BA)、电池管理系统(BMS)、储能变流器(PCS)等;监控与调度管理单元包括中央控制系统(MGCC)、能量管理系统(EMS)等。 2021年8月,国家发改委发布《电化学储能…

axios配置请求头content-type 和 get/post请求方式

axios配置请求头content-type https://blog.csdn.net/wojiushiwo945you/article/details/107653962 axios 是Ajax的一个插件,axios虽然是一个插件,但是我们不需要通过Vue.use(axios)来使用,下载完成后,只需在项目中引入即可。(一…

Frappe Charts:数据可视化的强大工具

一、产品简介: 一个简单、零依赖、响应式的 开源SVG 图表库。这个图表库无论是数据更新还是屏幕大小变化,都能快速响应并更新图表。数据生成和悬停查看都有舒服的交互动效,体验感很好。不仅支持配置颜色,外观定制也很方便。还支持…

c++学习笔记(13)-左值和右值

一、左值与右值 啥是左值和右值呢? 左值:在内存有确定存储地址、有变量名,表达式结束依然存在的值,简单来说左值就是非临时对象。 右值:就是在内存没有确定存储地址、没有变量名,表达式结束就会销毁的值&…

【Vue】高级系列(二)消息订阅与发布--$nextTick--动画效果

2.1 消息订阅与发布(pubsub) 一种组件间通信的方式,适用于任意组件间通信。 使用步骤: 安装pubsub:npm i pubsub-js 引入: import pubsub from pubsub-js 接收数据:A组件想接收数据,则在A组件…

使用克魔助手进行iOS数据抓包和HTTP抓包的方法详解

摘要 本文博客将介绍如何在iOS环境下使用克魔助手进行数据抓包和HTTP抓包。通过抓包,开发者可以分析移动应用程序的网络请求发送和接收过程,识别潜在的性能和安全问题,提高应用的质量和安全性。 引言 在移动应用程序的开发和测试过程中&am…

Codeforces Pinely Round 3 (Div. 1 + Div. 2) A~F

A.Distinct Buttons(思维) 题意: 你在开始时站在点 ( 0 , 0 ) (0,0) (0,0),同时,手上有一个遥控器,上面有四个按钮: U:移动到 ( x , y 1 ) (x, y 1) (x,y1)的位置 R:移动到 ( x 1 , y ) (x 1, y) (x1,y)的位置 …