JavaWeb——过滤器

  • Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。
  • 它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理。使用Filter的完整流程:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。

过滤器的使用

  1. 过滤器类实现Filter接口,则为过滤器类
    • doFilter()
      • 进行通用的逻辑处理代码
        • 进入Servlet前用户是否登录
        • 对请求和响应进行编码设置
      • 可继续指定请求的链式处理,可进入下一个filter或直接进入Servlet
        • Filter可能会有多个,因此执行链式处理时,如果后续还有Filter,则会先执行Filter,待所有的Filter处理完成后,再去执行Servlet
  1. 在Tomcat中注册
    • 注解
      • @WebFilter(String value)
        • value为该Filter可以处理的所有请求资源路径
          • /*为通配符
          • 多个参数WebFilter({"/servlet","/servlet2"})
    • XML配置文件
<web-app>
    <filter>
        <filter-name>filter1</filter-name>
        <filter-class>com.wry.javaweb.filter.Filter1</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>filter1</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>
//@WebFilter("")配置Filter可以处理的所有请求资源路径 /*为通配符
@WebFilter({"/servlet"})
public class Filter1 implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //这里可以进行通用的逻辑处理代码,如设置编码格式,检测是否登录
        System.out.println("进入Filter");
        //设置响应类型和编码
        servletRequest.setCharacterEncoding("UTF-8");
        servletResponse.setContentType("text/html;charset=UTF-8");
        //设置统一的响应编码
        servletResponse.setCharacterEncoding("UTF-8");

        //继续执行请求的链式处理,可能进入下一个Filter或直接进入Servlet
        /*
        *Filter可能会有多个,因此执行链式处理时,如果后续还有Filter,
        *则会先执行Filter,待所有的Filter处理完成后,再去执行Servlet
        * */
        filterChain.doFilter(servletRequest,servletResponse);
    }
}

过滤器的生命周期

  • 初始化方法 init(FilterConfig filterConfig)
    • 开发人员通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象。
  • 拦截请求方法 doFilter()
    • 这个方法完成实际的过滤操作。当客户请求访问与过滤器关联的URL的时候,Servlet过滤器将先执行doFilter方法。FilterChain参数用于访问后续过滤器。
  • 销毁方法 destroy()
    • Filter对象创建后会驻留在内存,当web应用移除或服务器停止时才销毁。在Web容器卸载 Filter 对象之前被调用。该方法在Filter的生命周期中仅执行一次。在这个方法中,可以释放过滤器使用的资源。

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

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

相关文章

学会Sass的高级用法,减少样式冗余

在当今的前端开发领域&#xff0c;样式表语言的进步已经显著提升了代码组织性和可维护性。Sass&#xff08;Syntactically Awesome Style Sheets&#xff09;作为CSS预处理器的翘楚&#xff0c;以其强大的变量、嵌套规则、混合宏&#xff08;mixin&#xff09;、循环和函数等高…

【Canvas与艺术】淡蓝辉光汽车速度仪表盘

【关键点】 内圈处渐变色的采用。 【效果图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>淡蓝辉光汽车速度仪表盘</t…

Windows11 安装VitrulBox Ubuntu20 虚拟机启动后卡在“Freeing initrd memory: 131304K”

步骤&#xff1a;点击启动Ubuntu后&#xff0c;一直起不来&#xff1f;没办法正常关机&#xff0c;选择重启又一直卡在这里&#xff0c;原来是同样的错误 Freeing initrd memory: 131304K 原因&#xff1a;本机联想小新14Pro&#xff0c;AMD 7840HS&#xff0c;锐龙版。而Ryze…

基于TensorFlow的花卉识别(算能杯)%%%

Anaconda Prompt 激活 TensorFlow CPU版本 conda activate tensorflow_cpu //配合PyCharm环境 直接使用TensorFlow1.数据分析 此次设计的主题为花卉识别&#xff0c;数据为TensorFlow的官方数据集flower_photos&#xff0c;包括5种花卉&#xff08;雏菊、蒲公英、玫瑰、向日葵…

设计模式之单例模式精讲

UML图&#xff1a; 静态私有变量&#xff08;即常量&#xff09;保存单例对象&#xff0c;防止使用过程中重新赋值&#xff0c;破坏单例。私有化构造方法&#xff0c;防止外部创建新的对象&#xff0c;破坏单例。静态公共getInstance方法&#xff0c;作为唯一获取单例对象的入口…

后端常问面经之Redis

Redis基础 常见的读写策略有哪些&#xff08;保证缓存和数据库数据的一致性&#xff09; Cache Aside Pattern&#xff08;旁路缓存模式&#xff09; Cache Aside Pattern 是我们平时使用比较多的一个缓存读写模式&#xff0c;比较适合读请求比较多的场景。 Cache Aside Pat…

Linux内核err.h文件分析

在阅读和编写内核相关的代码时&#xff0c;经常会看到IS_ERR、ERR_PTR等函数。这些函数在内核头文件的err.h中。以我服务器的代码为例&#xff0c;内核版本为5.15。 这个文件的代码如下&#xff1a; /* SPDX-License-Identifier: GPL-2.0 */ #ifndef _LINUX_ERR_H #define _L…

Ubuntu deb文件 安装 MySQL

更新系统软件依赖 sudo apt update && sudo apt upgrade下载安装包 输入命令查看Ubuntu系统版本 lsb_release -a2. 网站下载对应版本的安装包 下载地址. 解压安装 mkdir /home/mysqlcd /home/mysqltar -xvf mysql-server_8.0.36-1ubuntu20.04_amd64.deb-bundle.tar# …

阿里 Modelscope 创空间部署在本地环境操作文档

创建创空间的步骤直接跳过。 备注:我的电脑是Windows 第一步&#xff1a;获取创空间代码&#xff0c;直接下载代码太慢了&#xff0c;建议通过git获取代码 第二步:复制链接,打开cmd 直接粘贴回车下载。下载完之后的到了我的Service-Assistant文件夹。再git clone https://gith…

Publish Over SSH实现Jenkins构建项目发布

1. 在Jenkins上安装Publish Over SSH插件 在“系统设置–插件管理–可选插件”界面搜索&#xff1a;SSH&#xff0c;然后选择 Publish Over SSH&#xff0c;点击安装&#xff0c;然后重启。 这里是已经安装过&#xff0c;所以在“已安装”界面里&#xff01; 2. 配置 Publis…

Linux系统下安装部署Linux管理面板1panel

目录 一 1panel介绍 1、1Panel简介 2、1Panel特点 二、本地环境规划 1、本此实验目的 2、本地环境部署 三、部署1Panel&#xff08;在线安装&#xff09; 1.创建安装目录 2.一键部署1Panel 3.检查1Panel服务运行状态 4.检查1Panel监听端口 四、关闭防火墙和selinux…

线程的状态:操作系统层面和JVM层面

在操作系统层面&#xff0c;线程有五种状态 初始状态&#xff1a;线程被创建&#xff0c;操作系统为其分配资源。 可运行状态(就绪状态)&#xff1a;线程被创建完成&#xff0c;进入就绪队列&#xff0c;参与CPU执行权的争夺。或因为一些原因&#xff0c;从阻塞状态唤醒的线程…

2024年购买阿里云服务器多少钱?1000元年预算配置报价

2024年阿里云服务器优惠价格表&#xff0c;一张表整理阿里云服务器最新报价&#xff0c;阿里云服务器网整理云服务器ECS和轻量应用服务器详细CPU内存、公网带宽和系统盘详细配置报价单&#xff0c;大家也可以直接移步到阿里云CLUB中心查看 aliyun.club 当前最新的云服务器优惠券…

区块链创新:探索 Web3 的去中心化应用

引言 随着数字化时代的发展&#xff0c;区块链技术作为一种颠覆性的技术正在改变着我们的社会和经济生活。在这个背景下&#xff0c;Web3的概念应运而生&#xff0c;它代表了一种去中心化的互联网新时代&#xff0c;为去中心化应用&#xff08;DApps&#xff09;的发展提供了坚…

面试笔记——MyBatis(执行流程、延迟加载和缓存)

MyBatis 是一个持久层框架&#xff0c;用于简化 Java 应用程序与数据库之间的交互过程。具体而言&#xff0c;它提供了一种将数据库操作映射到 Java 方法的方式&#xff0c;通过 XML 文件或注解配置 SQL 语句与 Java 方法的映射关系。使用 MyBatis&#xff0c;开发人员可以通过…

Visual Studio QT6 工程引入组件模块,例如:QtXml

QT 工程引入 QtXml QT 版本 6.6.1 Visual Studio 版本 Microsoft Visual Studio Community 2022 (64 位) - Current 版本 17.7.5 打开 Visual Studio 项目工程选择 工具栏 - 扩展 - QT VS Tools -Qt Project Settings 勾选 xml 后点击确定 点击应用即可 注意&#xff1a;配置环…

数字三角形

分析&#xff1a; 由上图可以知道&#xff0c;最大和的路径是7->3->8->7->5 (30)。 题意是一个有N层的三角形&#xff0c;来寻找从顶部到底部&#xff0c;每个数字加起来的最大和。向下移动的过程中&#xff0c;只能向左或右。 我们是找最大的和的&#xff0c;那么…

Mac电脑虚拟显示器:BetterDisplay Pro for Mac v2.0.11激活版

BetterDisplay Pro是一款由waydabber开发的Mac平台上的显示器校准软件&#xff0c;可以帮助用户调整显示器的颜色和亮度&#xff0c;以获得更加真实、清晰和舒适的视觉体验。 软件下载&#xff1a;BetterDisplay Pro for Mac v2.0.11激活版 以下是BetterDisplay Pro的主要特点&…

Java数据结构-ArrayList

目录 1. 初识集合框架2. ArrayList的介绍3. ArrayList的使用3.1 构造方法3.2 add3.3 addAll3.4 remove3.5 get3.6 set3.7 contains3.8 IndexOf3.9 lastIndexOf3.10 subList 4. ArrayList的遍历4.1 简单粗暴法4.2 循环遍历法4.3 迭代器 1. 初识集合框架 Java集合框架是Java编程…

【前端面试3+1】01闭包、跨域

一、对闭包的理解 定义&#xff1a; 闭包是指在一个函数内部定义的函数&#xff0c;并且该内部函数可以访问外部函数的变量。闭包使得函数内部的变量在函数执行完后仍然可以被访问和操作。 特点&#xff1a; 闭包可以访问外部函数的变量&#xff0c;即使外部函数已经执行完毕。…