JavaWeb-servlet6中过滤器和监听器

Servlet 过滤器

Servlet 过滤器(Filter)与 Servlet 十分相似,但 Filter 具有拦截客户端请求的功能, Filter 可以改变请求中的内容,以便满足实际开发中的需要。对于程序开发人员而言, Filter 实质上就是 Web 服务器上的一个应用组件,用于拦截客户端与目标资源的请求,并对这些请求进行一定过滤处理再发送给目标资源。如图所示:
在这里插入图片描述
如果一个 Web 应用中使用一个 Filter 不能解决史记中的业务需要,那么可以部署多个过滤器对业务请求进行多次处理,这样就组成了一个过滤器链。Web 容器在处理过滤器链时,将按照过滤器的先后顺序对请求进行处理,如图所示:
在这里插入图片描述

Filter创建过程:

要编写一个过滤器必须实现Filter接口。实现其接口规定的方法。
1、实现jakarta.servlet.Filter接口
2、实现init方法,读取过滤器的初始化参数
3、实现doFilter方法,完成对请求或响应的过滤
4、调用FilterChain接口对象的doFilter方法,向后续的过滤器传递请求或响应

创建Filter有两种方式:基于web.xml配置文件、基于@WebFilter注解

基于web.xml
<filter>
    <filter-name>MyFilter</filter-name>
    <filter-class>com.iss.filter.MyFilter</filter-class>
    <init-param>
        <param-name>userName</param-name>
        <param-value>admin</param-value>
    </init-param>
  </filter>
 <filter-mapping>
           <filter-name>MyFilter</filter-name>
            <!-- 配置过滤器 url 映射 -->
          <url-pattern>/*</url-pattern>
          <dispatcher>REQUEST</dispatcher>
  </filter-mapping>
创建filter
public class MyFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("初始化过滤器");
        System.out.println(filterConfig.getInitParameter("userName"));
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("执行url,进入此方法");
        chain.doFilter(request,response);//进入下一个过滤器或url
    }
    @Override
    public void destroy() {
        System.out.println("关闭服务器时执行");
    }
}
基于@WebFilter注解
@WebFilter(filterName = "myFilter",urlPatterns = "/*",initParams = {@WebInitParam(name="userName",value = "admin")},dispatcherTypes = DispatcherType.REQUEST)public class MyFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("初始化过滤器");
        System.out.println(filterConfig.getInitParameter("userName"));
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("执行url,进入此方法");
        chain.doFilter(request,response);//进入下一个过滤器或url
    }
    @Override
    public void destroy() {
        System.out.println("关闭服务器时执行");
    }
}
Filter应用示例 解决乱码问题fitler
@WebFilter(filterName = "charactorFilter", urlPatterns = "/*", initParams = {
        @WebInitParam(name = "encoding", value = "UTF-8") })
public class CharactorFilter implements Filter {
    private String encoding;
    public void init(FilterConfig fConfig) throws ServletException {
        encoding = fConfig.getInitParameter("encoding");
    }
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        if (encoding != null) {
            request.setCharacterEncoding(encoding);
            response.setContentType("text/html;charset=" + encoding);
        }
        chain.doFilter(request, response);
    }
    public void destroy() {
    }
}

Listener介绍

servlet监听器也叫web监听器。是servlet中一种特殊类。能够帮助开发者监听web应用中的特定事件。比如ServletContext,ServletSession,ServletRequest的创建和销毁,变量的创建和销毁等。
监听器常用的用途:
  统计在线人数,利用HttpSessionListener
  加载初始化信息:利用ServletContextListener
  统计网站访问量:利用ServletRequestListener
  实现访问监控:利用ServletRequestListener

Listener分类

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

Servlet 规范针对这三个对象上的操作,又把多种类型的监听器划分为三种类型:

  1. 监听域对象自身的创建和销毁的事件监听器。
  2. 监听域对象中的属性的增加和删除的事件监听器。
  3. 监听绑定到HttpSession域中的某个对象的状态的事件监听器。
listener应用

ServletContextListener 接口用于监听 ServletContext 对象的创建和销毁事件。
ServletContext 域对象创建和销毁时机:
创建:服务器启动针对每一个Web应用创建 ServletContext;
销毁:服务器关闭前先关闭代表每一个 web 应用的 ServletContext;

@WebListener
public class MyServletContextListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("ServletContext has create ...");
    }
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("ServletContext has destroyed ...");
    }
}

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

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

相关文章

SQL PLUS与Oracle数据库的交互

一、SQL Plus与数据库的交互 可以 使用2种基本类型的命令与数据库进行交互&#xff1a; 服务器执行的命令&#xff1a;SQLQ命令&#xff08;以&#xff1b;结束&#xff09;和PL/SQL程序块&#xff08;以/结束&#xff09; 本地命令&#xff1a;SQL Plus命令 二、设置SQL Pl…

Git系列之git tag和ReleaseMilestone

以下是关于 Git Tag、Release 和 Milestone 的深度融合内容&#xff0c;并补充了关于 Git Tag 的所有命令、详细解释和指令实例&#xff0c;条理清晰&#xff0c;结合实际使用场景和案例。 1. Git Tag 1.1 定义 • Tag 是 Git 中用于标记特定提交&#xff08;commit&#xf…

WinForm模态与非模态窗体

1、模态窗体 1&#xff09;定义&#xff1a; 模态窗体是指当窗体显示时&#xff0c;用户必须先关闭该窗体&#xff0c;才能继续与应用程序的其他部分进行交互。 2&#xff09;特点&#xff1a; 窗体以模态方式显示时&#xff0c;会阻塞主窗体的操作。用户必须处理完模态窗体上…

关闭Windows安全中心,解析与实操指南

在这个数字化时代&#xff0c;Windows操作系统作为我们日常工作和娱乐的基石&#xff0c;其内置的Windows安全中心&#xff08;Windows Defender Security Center&#xff09;在保护系统安全方面扮演着重要角色。然而&#xff0c;对于某些高级用户或特定需求场景&#xff0c;关…

【 <一> 炼丹初探:JavaWeb 的起源与基础】之 JSP 标签库:自定义标签的开发与应用

<前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、JSP 标签…

IDEA与Maven使用-学习记录(持续补充...)

1. 下载与安装 以ideaIU-2021.3.1为例&#xff0c;安装步骤&#xff1a; 以管理员身份启动ideaIU-2021.3.1修改安装路径为&#xff1a;D:\Program Files\JetBrains\IntelliJ IDEA 2021.3.1勾选【创建桌面快捷方式】&#xff08;可选&#xff09;、【打开文件夹作为项目】&…

JS中的闭包(closures)一种强大但易混淆的概念

JavaScript 中的闭包&#xff08;closures&#xff09;被认为是一种既强大又易混淆的概念。闭包允许函数访问其外部作用域的变量&#xff0c;即使外部函数已执行完毕&#xff0c;这在状态维护和回调函数中非常有用。但其复杂性可能导致开发者的误解&#xff0c;尤其在变量捕获和…

根据指定 Excel 模板将 Excel 明细数据生成新的 Excel 文档

在日常工作中&#xff0c;我们常常需要生成 Excel 文档&#xff0c;例如将 Excel 数据 自动转换为独立的 Excel 文件。在这种需求下&#xff0c;如何高效地将 Excel 表格 中的每一条数据生成一个对应的 Excel 文档&#xff0c;并且让文档中的内容根据 Excel 数据动态变化&#…

前端杂的学习笔记

什么是nginx Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器 Nginx是一款轻量级的Web 服务器/反向代理服务器&#xff0c;处理高并发能力是十分强大的&#xff0c;并且支持热部署&#xff0c;启动简单&#xff0c;可以做到7*24不间断运行 正代和反代 学习nginx&a…

C#控制台应用程序学习——3.8

一、语言概述 1、平台相关性 C# 主要运行在.NET 平台上。.NET 提供了一个庞大的类库&#xff0c;C# 程序可以方便地调用这些类库来实现各种功能&#xff0c;如文件操作、数据库访问、网络通信等。 2、语法风格 C# 的语法与 C、C 和 Java 有一定的相似性。例如&#xff0c;它使用…

【数据结构与算法】Java描述:第三节:栈与队列

一、 栈(Stack) 1.1 概念 栈&#xff1a; 一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守先进后出的原则。 压栈&#xff1a;栈的插入操作叫做进栈/压栈/…

MATLAB中movmax函数用法

目录 语法 说明 示例 向量的中心移动最大值 向量的尾部移动最大值 矩阵的移动最大值 包括缺失值的移动最大值 基于样本点计算移动最大值 仅返回满窗最大值 movmax函数的功能是求得移动最大值。 语法 M movmax(A,k) M movmax(A,[kb kf]) M movmax(___,dim) M mov…

linux学习(五)(服务器审查,正常运行时间负载,身份验证日志,正在运行的服务,评估可用内存)

服务器审查 在 Linux 中审查服务器的过程包括评估服务器的性能、安全性和配置&#xff0c;以确定需要改进的领域或任何潜在问题。审查的范围可以包括检查安全增强功能、检查日志文件、审查用户帐户、分析服务器的网络配置以及检查其软件版本。 Linux 以其稳定性和安全性而闻名…

Java中的栈的实现

Java中的栈的实现--双端队列&#xff08;Deque&#xff09; 1. 解释代码2.为什么不用 Stack<Character>&#xff1f;3.使用示例4.Deque 的常用方法5.LinkedList<> 和 ArrayDeque<> 的区别和联系6. 总结 1. 解释代码 Deque<Character> st new ArrayDe…

【Andrej Karpathy 神经网络从Zero到Hero】--2.语言模型的两种实现方式 (Bigram 和 神经网络)

目录 统计 Bigram 语言模型质量评价方法 神经网络语言模型 【系列笔记】 【Andrej Karpathy 神经网络从Zero到Hero】–1. 自动微分autograd实践要点 本文主要参考 大神Andrej Karpathy 大模型讲座 | 构建makemore 系列之一&#xff1a;讲解语言建模的明确入门&#xff0c;演示…

Go_zero学习笔记

<!-- go-zero --> 安装配置 go-zero_github go-zero文档 go install github.com/zeromicro/go-zero/tools/goctllatest goctl --version // goctl version 1.7.2 windows/amd64 gopath/bin/会生成goctl的执行进程(%GOPATH%\bin设置到path环境变量中) 安装protoc&pr…

nats jetstream server code 分析

对象和缩写 jetstream导入两个对象&#xff1a;stream and consumer&#xff0c;在stream 之上构造jetstreamapi。在nats代码中&#xff0c;以下是一些常见的缩写 1.mset is stream 2.jsX is something of jetstream 3.o is consumer 代码分析 对于producer &#xff0c;发送…

高效编程指南:PyCharm与DeepSeek的完美结合

DeepSeek接入Pycharm 前几天DeepSeek的充值窗口又悄悄的开放了&#xff0c;这也就意味着我们又可以丝滑的使用DeepSeek的API进行各种辅助性工作了。本文我们来聊聊如何在代码编辑器中使用DeepSeek自动生成代码。 注&#xff1a;本文适用于所有的JetBrains开发工具&#xff0c…

豆包大模型 MarsCode AI 刷题专栏 004

007.创意标题匹配问题 难度&#xff1a;易 问题描述 在广告平台中&#xff0c;为了给广告主一定的自由性和效率&#xff0c;允许广告主在创造标题的时候以通配符的方式进行创意提交。线上服务的时候&#xff0c;会根据用户的搜索词触发的 bidword 对创意中的通配符&#xff…

Blueprint —— Blueprint Editor(二)

目录 一&#xff0c;Blueprint Header View 二&#xff0c;Blueprint Bookmarks 三&#xff0c;Blueprint Editor Defaults Tab 获取类默认值 一&#xff0c;Blueprint Header View Blueprint Header View 可将虚幻引擎蓝图类和蓝图结构体转换为C代码&#xff1b;在转换过程…