【Servlet】7:监听器和过滤器的原理和应用

news2024/11/20 3:37:00

目录

| 监听器

监听器 基本概述

ServletContextListener监听器

ServletContextAttributeListener监听器

监听器的应用场景

| 过滤器

过滤器 基本概述

过滤器 实现步骤

过滤器 应用场景


本文章属于后端全套笔记的第三部分

(更新中)【后端入门到入土!】Java+Servlet+JDBC+SSM+SpringBoot+SpringCloud 基础入门_m0_57265007的博客-CSDN博客一篇文章,后端入门到入土。包含 Java基础+高级、MySQL、JDBC、Servlet、SSM、SpringBoot、SpringCloud、项目 的笔记。https://blog.csdn.net/m0_57265007/article/details/127962617?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22127962617%22%2C%22source%22%3A%22m0_57265007%22%7D一篇文章,后端入门到入土。包含 Java基础+高级、MySQL、JDBC、Servlet、SSM、SpringBoot、SpringCloud、项目 的笔记。https://blog.csdn.net/m0_57265007/article/details/127962617?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22127962617%22%2C%22source%22%3A%22m0_57265007%22%7D

| 监听器

监听器 基本概述

  • 介绍

    • 监听器是一组来自于Servlet规范下接口,共有8个接口。在Tomcat存在servlet-api.jar包

    • 监听器接口需要由开发人员亲自实现Http服务器提供jar包并没有对应的实现类

    • 监听器的主要作用是:用于监控【作用域对象生命周期变化时刻】以及【作用域对象共享数据变化时刻】

    • 待会儿我们会学习最重要的两个监听器:ServletContextListener、ServletContextAttributeListener

  • 复习:作用域对象

    • 在Servlet规范中,认为在服务端内存中可以在某些条件下为两个Servlet之间提供数据共享方案的对象,被称为【作用域对象】

    • 需要注意的是:Servlet规范下作用域对象: Cookie是作为浏览器缓存而存在的,不是作用域对象

    • 作用域对象有三个:ServletContext 全局作用域对象、HttpSession 会话作用域对象、HttpServletRequest 请求作用域对象


ServletContextListener监听器

简介

  • 作用:通过这个接口合法的监测 ServletContext全局作用域对象 被初始化时刻以及被销毁时刻

  • ServletContextListener接口实现类开发三大步骤

    1. 实现ServletContextListener接口

public class ListenerClass implements ServletContextListener
  1. .

  2. 重写监听器监听事件处理方法:contextInitialized、contextDestroyed

  3. 在web.xml文件将监听器接口实现类注册到Http服务器

    <!--将监听器接口注册到Tomcat-->
    <listener>
        <listener-class>监听器类</listener-class>
    </listener>

监听事件处理方法:

public void contextInitlized();   //全局作用域对象被Http服务器初始化被调用
public void contextDestory();   //在全局作用域对象被Http服务器销毁时候触发调用

示例

public class ListenerClass implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("全局作用域对象 ServletContext 被创建");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("全局作用域对象 ServletContext 被销毁");
    }
}

public class S1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }
}

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <servlet>
        <servlet-name>S1</servlet-name>
        <servlet-class>S1</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>S1</servlet-name>
        <url-pattern>/S1</url-pattern>
    </servlet-mapping>

    <!--将监听器接口注册到Tomcat-->
    <listener>
        <listener-class>ListenerClass</listener-class>
    </listener>

</web-app>

 

 

ServletContextAttributeListener监听器

简介

  • 作用:通过这个接口合法的监测 ServletContext全局作用域对象 共享数据变化时刻

  • ServletContextAttributeListener接口实现类开发三大步骤

    1. 实现ServletContextListener接口

public class ListenerClass implements ServletContextAttributeListener

  1. 重写监听器监听事件处理方法:attributeAdded、attributeRemoved、attributeReplaced

  2. 在web.xml文件将监听器接口实现类注册到Http服务器

监听事件处理方法:

public void contextAdd();   //在全局作用域对象添加共享数据
public void contextReplaced();   //在全局作用域对象更新共享数据
public void contextRemove();   //在全局作用域对象删除共享数据

示例

public class ListenerClass2 implements ServletContextAttributeListener {
    @Override
    public void attributeAdded(ServletContextAttributeEvent scae) {
        System.out.println("检测到全局作用域对象数据有【新增】");
    }

    @Override
    public void attributeRemoved(ServletContextAttributeEvent scae) {
        System.out.println("检测到全局作用域对象数据有【删除】");
    }

    @Override
    public void attributeReplaced(ServletContextAttributeEvent scae) {
        System.out.println("检测到全局作用域对象数据有【修改】");
    }
}

 

public class S1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext application = req.getServletContext();
        application.setAttribute("key1",100);  //新增
        application.setAttribute("key1",200);  //更新
        application.removeAttribute("key1");   //删除
    }
}

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <servlet>
        <servlet-name>S1</servlet-name>
        <servlet-class>S1</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>S1</servlet-name>
        <url-pattern>/S1</url-pattern>
    </servlet-mapping>

    <!--将ListenerClass2监听器实现类注册到Tomcat-->
    <listener>
        <listener-class>ListenerClass2</listener-class>
    </listener>

</web-app>

 

 

监听器的应用场景

  • 使用 ServletContextListener监听器,可在 contextInitlized( ) 方法内写上需要全局初始化的代码;可以在 contextDestroy( ) 方法内写上需要内存释放的代码

  • 使用ServletContextAttributeListener监听器,可以监测数据变动,从而编写相应的行为


| 过滤器

过滤器 基本概述

  • 介绍

    • 过滤器接口是来自于Servlet规范下接口,在Tomcat中存在于servlet-api.jar包

    • Filter接口实现类由开发人员负责编写,Http服务器不负责提供

    • Filter的作用:在Http服务器调用资源文件之前,对Http服务器进行拦截

  • 具体作用

    • 拦截Http服务器,帮助Http服务器检测当前请求合法性,若合法则放行

    • 拦截Http服务器,对当前请求进行增强操作


过滤器 实现步骤

  • Filter接口实现类开发步骤:三步

    1. 创建一个Java类实现Filter接口(注意:有很多个Filter,我们要实现的是Sevlet的Filter)

    2. 重写Filter接口中doFilter方法

public class FilterClass implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        
    }
}

 3.web.xml将过滤器接口实现类注册到Http服务器

<filter-mapping>
    <filter-name>oneFilter</filter-name>
    <url-pattern>拦截地址</url-pattern>
</filter-mapping>

(拦截地址通知Tomcat在调用何种资源文件之前需要调用OneFilter过滤进行拦截) 拦截地址的写法有很多,下面列举一些:

<!--要求Tomcat在调用【某一个具体文件】之前,来调用OneFilter拦截-->
<url-pattern>/img/mm.jpg</url-pattern>

<!--要求Tomcat在调用【某一个文件夹下所有的资源文件】之前,来调用OneFilter拦截-->
<url-pattern>/img/*</url-pattern>

<!--要求Tomcat在调用【任意文件夹下某种类型文件】之前,来调用OneFilter拦截-->
<url-pattern>*.jpg</url-pattern>

<!--要求Tomcat在调用【网站中任意文件】时,来调用OneFilter拦截-->
<url-pattern>/*</url-pattern>

过滤器 应用场景

  • 要求Tomcat在调用【某一个具体文件】之前,来调用OneFilter拦截:获取用户信息,判断条件,若条件不符合则拒绝用户访问目标文件

 

要求Tomcat在调用【网站中任意文件】时,来调用OneFilter拦截:通知拦截的请求对象,使用UTF-8字符集进行编码(减少代码耦合度)

 

要求Tomcat在调用【网站中任意文件】时,来调用OneFilter拦截:防止恶意登录(没有HttpSession就不给登录,只能注册)

 

让与公共页面相关的页面无条件放行(即未登录、无HttpSession也能被访问)

 

 

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

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

相关文章

leetcode 494.目标和 动态规划背包问题 (c++版本)

题目描述 说白了就是让一部分数减去剩下的一部数使得差值为target&#xff0c;计算有多少中组合的方法 下面来个数学公式推导一下 leftrightsumleft−righttargetleftsum−lefttargetleft(sumtarget)/2leftright sum\\ left-righttarget\\ leftsum-lefttarget\\ left(sumtarge…

用户行为分析-如何用数据驱动增长

用户行为分析-如何用数据驱动增长 2022-11-22 看完书才知道是 GrowingIO 公司出的一本书&#xff0c;干货还是挺多的。 第一章从商业进化的角度认识用户行为数据的重要性&#xff0c;帮助大家了解什么是用户行为数据&#xff0c;以及用户行为数据怎么发挥价值。接着四章详细…

【操作系统】2.2 操作系统的调度

2.2.1 操作系统之处理机调度的概念及层次 2.2.1操作系统之处理机调度的概念及层次_StudyWinter的博客-CSDN博客_操作系统调度的层次 高级调度&#xff08;作业调度&#xff09;&#xff1a;外存-》内存 中级调度&#xff08;内存调度&#xff09;&#xff1a;外存-》内存 低…

用最少的代码模拟gRPC四种消息交换模式

我们知道&#xff0c;建立在HTTP2/3之上的gRPC具有四种基本的通信模式或者消息交换模式&#xff08;MEP&#xff1a; Message Exchange Pattern&#xff09;&#xff0c;即Unary、Server Stream、Client Stream和Bidirectional Stream。本篇文章通过4个简单的实例演示它们在.NE…

HTML+CSS大作业 格林蛋糕(7个页面) 餐饮美食网页设计与实现

&#x1f380; 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

编写第一个Qt程序和分析第一个Qt程序

文章目录编写第一个Qt程序新建一个项目项目的文件组成和管理项目的编译、调试与运行分析第一个Qt程序创建项目1) main.cpp2) mainwindow.h和mainwindow.cpp编码实现简易的窗口界面编写第一个Qt程序 已剪辑自: http://c.biancheng.net/view/1817.html 学习一种编程语言或编程环…

最漂亮:yWorks yFiles Diagramming SDK 5.4.0.2

yWorks yfiles Diagramming SDK 5.4.0.2 卓越的 绘图 SDK 使用 yFiles 自动布局的图表 您的数据可视化软件开发套件 yFiles是行业领先的 图表软件库。20 多年来&#xff0c;公司和机构一直在使用此 SDK 来 描述、编辑和分析他们的连接数据。 准备好探索自动布局和交互式图形组…

Qt-OpenCV学习笔记--人脸识别--基于Haar特征的cascade分类器

概述 基于Haar特征的cascade分类器(classifiers) 是Paul Viola和 Michael Jone在2001年&#xff0c;论文”Rapid Object Detection using a Boosted Cascade of Simple Features”中提出的一种有效的物品检测(object detect)方法。它是一种机器学习方法&#xff0c;通过许多正…

G1D21-作业-AttacKGSVMkg_book偷懒哈哈哈

唔~咖啡泡出来好好看呀&#xff01; 一、写作业 第一件事是将昨天读的NER综述补充到作业之中~大概30min 50分钟&#xff0c;补充完了思维导图和文档&#xff0c;明确了下一步论文的阅读方向——NER的综述/网安NER具体技术类文章&#xff08;找找最新的叭&#xff09;。 二、…

2022 IDEA大会引领科技创新趋势 沈向洋团队重磅发布低空经济白皮书

11月22日&#xff0c;2022 IDEA大会在深圳顺利开幕。大会由深圳市科技创新委员会、深圳市人才工作局和深圳市福田区人民政府指导&#xff0c;粤港澳大湾区数字经济研究院&#xff08;International Digital Economy Academy&#xff0c;简称“IDEA研究院”&#xff09;主办。 …

leetcode 216. 组合总和 III

文章目录题目思考代码和注释总结题目 找出所有相加之和为 n 的 k 个数的组合&#xff0c;且满足下列条件&#xff1a; 只使用数字1到9 每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次&#xff0c;组合可以以任何顺序返回。 来源&…

【图像分类】Efficientnet的学习

文章目录1. Efficientnet的学习1.1 网络模型1.2 MBConv卷积块1.3 模型规模1.4 模型训练方式2. Efficientnet-pytorch代码3.参考1. Efficientnet的学习 论文&#xff1a;https://arxiv.org/abs/1905.11946 1.1 网络模型 主要结构&#xff1a; 基线模型EfficientNet-B0Effici…

ImmunoChemistry艾美捷Annexin DNA损伤ELISA试剂盒方案

使用ImmunoChemistry艾美捷DNA损伤&#xff08;8-OHdG&#xff09;ELISA试剂盒定量尿液、细胞培养物、血浆和其他样品基质中的8-OHdG。该试剂盒提供了快速的培养时间、稳定的试剂和用户友好的方案。使用吸光度板读取器分析结果。 8-羟基-2-脱氧鸟苷&#xff08;8-OHdG&#xff…

开放式激光振镜运动控制器:C++ 快速调用图形库应用

今天&#xff0c;正运动小助手给大家分享一下开放式激光振镜运动控制器&#xff1a;C快速调用图形库应用&#xff0c;本文以二维码打标、文本打标、矢量图形打标为例&#xff0c;解决用户在激光打标时需要进行各种复杂的操作和函数库调用时容易出现的错误问题。 01 ZMC408SCAN…

牛客网语法篇练习复合类型(一)

1.试计算在区间1 到n 的所有整数中&#xff0c;数字x&#xff08;0 ≤ x ≤ 9&#xff09;共出现了多少次&#xff1f; 例如&#xff0c;在1到11 中&#xff0c;即在1、2、3、4、5、6、7、8、9、10、11 中&#xff0c;数字1 出现了4 次。 n,x list(map(int,input().split())) …

CSS的两种渐变

线性渐变和径向渐变 几个常见的例子效果 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>.a{font-size: 20px;width: 100%;height: 50px;margin: 10px;background-image: linear-gradient(r…

应急监管双重预防机制数字化管理解决方案

新《安全生产法》&#xff0c;将组织建立并落实双重预防工作机制写入生产经营单位主要负责人职责中&#xff0c;双重预防机制建设已上升到法律的高度。2021 年 12 月 31 日国务院安委会印发《全国危险化学品安全风险集中治理方案》&#xff0c;将推进基于信息化的危险化学品企业…

大二Web课程设计——海贼王中乔巴专题漫画(可以很好的应付老师的作业)HTML+CSS

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 精彩专栏推荐&#x1f4…

Baklib帮助中心|如何设置好客户服务帮助您的客户?

在如今这个高度智能化的时代&#xff0c;很多人已经习惯了靠自己解决问题&#xff0c;所以当人们浏览网页、使用某件商品时&#xff0c;首先想到的不是客户服务&#xff0c;而是服务中心。 那么&#xff0c;您如何设计帮助中心帮助您的客户&#xff1f;这是大多数公司希望解决…

工程项目管理的主要内容都是什么?

工程项目资金管理组织工作主要就文本是什么&#xff1f; 1&#xff0e;物业公司的资金管理组织工作&#xff08;工程建设建筑工程&#xff09; 物业公司的资金管理组织工作是全过程的&#xff0c;主要就包括工程项目重大决策和实行期的全过程&#xff0c;也即从基本建设工程项…