Filter与Listener(Java Web)

news2024/9/22 17:20:56

Filter与Listener(Java Web)

  • 概念:Filter表示过滤器,是JavaWeb三大组件(Servlet、Filter、Listener)之一。
  • 过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。
  • 过滤器一般完成一些通用的操作,比如:权限控制、统一编码处理、敏感字符处理等等…

Filter快速入门

  • 定义类,实现Filter接口,并重写其所有方法

    public class FilterDemo implements Filter{
        public void init(FilterConfig filterConfig)
    	public void doFilter(ServletRequest request
    	public void destroy(){}
    }
    
  • 配置Filter拦截资源的路径:在类上定义@WebFilter注解

    @WebFilter("/*") //拦截所有
    public class FilterDemo implements Filter{}
    
  • 在doFilter方法中输出一句话,并放行

    public void doFilter(ServletRequest request,ServletResponse response...){
        System.out.println("filter被执行了...");
    	//放行
    	chain.doFilter(request,response);
    }
    

Filter执行流程

请添加图片描述

  • 请求放行后访问对应资源,资源访问完成后,还会回到Filter中
  • 如果回到Filter中,会执行放行后的逻辑

Filter使用细节

  • Filter拦截路径配置:可以根据需求,配置不同的拦截资源路径

    • 拦截具体的资源:/index.jsp:只有访问index.jsp时才会被拦截。

    • 目录拦截:/user/:访问/user下的所有资源,都会被拦截

    • 后缀名拦截:*.jsp:访问后缀名为jsp的资源,都会被拦截

    • 拦截所有:/*:访问所有资源,都会被拦截

  • 过滤器链

一个Web应用,可以配置多个过滤器,这多个过滤器称为过滤器链。访问流程如下:

请添加图片描述

至于谁是Filter1,谁是Filter2,会根据字符串的顺序进行比对,来执行【A-Z】

案例

  • 登录验证

  • 需求:访问服务器资源时,需要先进行登录验证,如果没有登录,则自动跳转到登录页面

    //判惭访问资源路径是否和登录注册相关
    HttpServletRequest req = (HttpServletRequest)request;
    String[] urls ={"/login.jsp","/imgs/","/css/","/loginservlet","/register.jsp","/registerservlet","/checkCodeServlet"};
    //循环判断
    for (String u urls){
    	if(url.contains(U)){
    		//找到了
    		//放行
    		chain.doFilter(request,response);
    		return;
        }
    }
    //1.判断session中是否有User
    HttpSession session = req.getSession();
    Object user = session.getAttribute("user");
    //2.判断user是否为Null
    if(user!=null){
    	//登录过了
    	//放行
    	chain.doFilter(request,response);
    }else{
        //没有登陆,存储提示信息,跳转到登录页面
    	req.setAttribute("Login_msg","您尚未登陆!");
    	req.getRequestDispatcher("/Login.jsp").forward(req,response);
    }
    
    

Listener

  • 概念:Listener表示监听器,是JavaWeb三大组件(Servlet、Filter、.Listener)之一。

  • 监听器可以监听就是在application,session,request3三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件

  • Listener分类:JavaWeb中提供了8个监听器,这里仅介绍会用到的两个:

    监听器分类监听器名称作用
    ServletContext监听ServletContextListener用于对ServletContext对象进行监听(创建、销毁)
    ServletContextAttributeListener对ServletContext对象中属性的监听(增删改属性)
  • 这里代码演示仅演示第一个:

    @WebListener
    public class ContextLoaderListener implements ServletContextListener{
        @override
    	public void contextInitialized(ServletContextEvent sce){
    		//加载资源
    		System.out.println("ContextLoaderListener...");
        }
    	@override
    	public void contextDestroyed(ServletContextEvent sce){
    		//释放资源
        }
    }
    
    

如果觉得文章对您有帮助,请帮忙点赞或者收藏,如果在文章中发现什么错误或不准确的地方,欢迎与我交流。

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

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

相关文章

Hudi学习 6:Hudi使用

准备工作: 1.安装hdfs https://mp.csdn.net/mp_blog/creation/editor/109689143 2.安装spark spark学习4:spark安装_hzp666的博客-CSDN博客 3.安装Scala Hudi学习6:安装和基本操作_hzp666的博客-CSDN博客 spark-shell 写入和读取hudi 2.…

鸿蒙应用开发-自定义可删除列表弹窗

功能介绍: 自定义列表弹窗,可以对弹窗的列表点击删除,参考文档创建列表,自定义弹窗文档自定义弹窗(CustomDialog)。 知识点: 熟悉对List控件的使用。熟悉对List点击删除熟悉自定义弹窗。 使…

2024美赛C题完整解题教程及代码 网球运动的势头

2024 MCM Problem C: Momentum in Tennis (网球运动的势头) 注:在网球运动中,"势头"通常指的是比赛中因一系列事件(如连续得分)而形成的动力或趋势,这可能对比赛结果产生重要影响。球…

【Unity知识点详解】自定义程序集

今天来介绍一下Unity中的自定义程序集。在项目开发中我们经常接触到第三方插件的程序集,如DOTween、Newtonsoft.Json等。 使用自定义程序集有这么几个好处: 方便代码的的复用。当某一功能模块需要在多个项目中重复使用时,可以将代码编译成程…

canvas设置图形各种混合模式,类似photoshop效果

查看专栏目录 canvas实例应用100专栏,提供canvas的基础知识,高级动画,相关应用扩展等信息。canvas作为html的一部分,是图像图标地图可视化的一个重要的基础,学好了canvas,在其他的一些应用上将会起到非常重…

树莓派zero/zero w的区别

直观区别 1、zero没有WiFi和蓝牙模块,当然也没有网线接口,适合不需要网络的场景需求。 2、zero w带有WiFi和蓝牙模块,没有网线接口。适合需要网络的场景需求。 选购建议 我一般都是看有没有网络接口或者WiFi支持(一定要选择焊接…

未来电话呼叫技术的社会影响与发展趋势----云微呼

未来电话呼叫技术将以更为智能化、便捷化和个性化为主要发展趋势,其所带来的社会影响也将是多层面的。以下将探讨未来电话呼叫技术可能的发展趋势以及对社会的影响: 智能化助力生活便捷: 未来电话呼叫技术将更加智能化,通过人工智…

《计算机网络简易速速上手小册》第10章:未来网络技术趋势(2024 最新版)

文章目录 10.1 边缘计算与网络设计 - 未来网络的速度与激情10.1.1 基础知识10.1.2 重点案例:使用 Python 实现边缘计算的实时视频分析准备工作Python 脚本示例 10.1.3 拓展案例1:智能交通系统Python 脚本示例 - 边缘计算设备上的交通流量分析 10.1.4 拓展…

牛客网 OR76 两个整数二进制位不同个数

前提需备知识: 算法:n&(n-1)是用来求n中1的个数 常用代码形式为: while(n){count;nn&(n-1); //每次减去1的个数} 关于该算法的推导可以见http://t.csdnimg.cn/Tld2S,本文就不再赘述 思路&…

三种pdf转ppt方法?学会这几招轻松搞定转换

三种pdf转ppt方法?在当今的工作和生活中,PDF和PPT这两种文件格式常常会让我们感到困扰。有时候我们需要将PDF文件转换成PPT格式,以便更好地进行演示或工作汇报。但是,如何快速、准确地完成这项任务呢?本文将为你揭秘三…

4.java中的输入输出/输入中的next和nextLine区别问题

(笔试会经常让我们自己去处理输入输出) 一.输出到控制台 println 输出的内容自带 \n(换行) print 不带 \n printf 的格式化输出方式和 C 语言的 printf 是基本一致的. String msg "Hello, World!";System.out.print(m…

非常好看的CSS加载中特效,引用css文件既可用

非常好看的CSS加载中特效 demo效果源码&#xff1a; <!DOCTYPE html5> <head><link rel"stylesheet" type"text/css" href"demo.css"/><link rel"stylesheet" type"text/css" href"loaders.css&…

C语言内存分配函数知识汇总

C语言中的主要内存分配函数包括&#xff1a; 1. malloc() - 函数原型&#xff1a;void *malloc(size_t size) - 功能&#xff1a;动态分配指定大小&#xff08;以字节为单位&#xff09;的连续内存空间。 - 返回值&#xff1a;成功分配内存时&#xff0c;返回指向该内存区域…

力扣热门100题刷题笔记 - 3.无重复字符的最长子串

力扣热门100题 - 3.无重复字符的最长子串 题目链接&#xff1a;3. 无重复字符的最长子串 题目描述&#xff1a; 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。示例&#xff1a; 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字…

全球降水数据产品介绍

一、数据基本概况 降水数据在气象学、水文学、农业、生态学等领域有着广泛的用途。以下是一些降水数据的主要用途&#xff1a; 气象预报和监测&#xff1a; 降水数据是气象预报的重要组成部分&#xff0c;对预测天气、气候和自然灾害&#xff08;如暴雨、洪水&#xff09;至关…

Python学习从0到1 day13 Python数据容器.4.set集合、dict字典,映射

他往黑夜里去了&#xff0c;我陪他 ——24.2.4 一、set集合 1.为什么使用集合&#xff1f; 通过特性来分析&#xff1a; 列表可修改、支持重复元素且有序 元组、字符串不可修改、支持重复元素且有序 局限在于&#xff1a;它们都支持重复元素 当场景需要对内容进行去重处理&am…

微分几何——梅向明第四版学习笔记(一) 向量函数和曲线论

目录 引出向量函数曲线论简单曲线定义曲线的向量参数表示 曲线的切线【重要】曲线的法面【重要】曲线的自然参数表示 空间曲线曲线的密切平面空间曲线的基本三棱形【重要】单位切向量主法向量副法向量Frenet标架螺旋线的案例 曲线的曲率和曲率半径曲率的几何意义 曲线的挠率挠率…

政安晨:示例演绎Python的函数与获取帮助的方法

调用函数和定义我们自己的函数&#xff0c;并使用Python内置的文档&#xff0c;是成为一位Pythoner的开始。 通过我的上篇文章&#xff0c;相信您已经看过并使用了print和abs等函数。但是Python还有许多其他函数&#xff0c;并且定义自己的函数是Python编程的重要部分。 在本…

2024年美赛数学建模E题思路分析 - 财产保险的可持续性

# 1 赛题 问题E&#xff1a;财产保险的可持续性 极端天气事件正成为财产所有者和保险公司面临的危机。“近年来&#xff0c;世界已经遭受了1000多起极端天气事件造成的超过1万亿美元的损失”。[1]2022年&#xff0c;保险业的自然灾害索赔人数“比30年的平均水平增加了115%”。…

【lesson36】缓冲区的认识

文章目录 缓冲区的认识 缓冲区的认识 上次我们已经介绍了缓冲区的刷新策略&#xff0c;并且遇到了一个问题&#xff0c;这次我们就继续延续上次的话题。 一般而言行缓冲的设备文件-------显示器文件 一般而言全缓冲的设备文件-------磁盘文件 所有设备永远倾向于全缓冲&#…