SpringMVC的拦截器
SpringMVC的拦截器
SpringMVC的拦截器
- SpringMVC的拦截器
- 01-SpringMVC拦截器-拦截器的作用(理解)
- 02-SpringMVC拦截器-interceptor和filter区别(理解,记忆)
- 03-SpringMVC拦截器-快速入门(应用)
- (1)项目前准备
- (2)快速入门
01-SpringMVC拦截器-拦截器的作用(理解)
- Spring MVC 的拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理。
- 将拦截器按一定的顺序联结成一条链,这条链称为拦截器链(InterceptorChain)。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。拦截器也是AOP思想的具体实现。
02-SpringMVC拦截器-interceptor和filter区别(理解,记忆)
- 关于interceptor和filter的区别,如图所示:

03-SpringMVC拦截器-快速入门(应用)
(1)项目前准备
- 首先参照文章👉👉👉Spring课程工程构建➕SpringMVC简介及其快速入门搭建项目👈👈👈搭建好一个项目
itheima_spring_interceptor, - 在创建好的项目里面根据上面的文章,依次①导入SpringMVC相关坐标、②配置SpringMVC核心控制器DispathcerServlet、③创建Controller类和视图页面、④使用注解配置Controller类中业务方法的映射地址、⑤配置SpringMVC核心文件spring-mvc.xml。
- 在项目里面
src\main\java创建com.itheima.controller包,然后新建一个TargetController类。
package com.itheima.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;@Controller
public class TargetController {@RequestMapping("/target")public ModelAndView show(){System.out.println("目标资源执行......");ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("name","itcast");modelAndView.setViewName("index");return modelAndView;}
}
- 在
src\main\resources\spring-mvc.xml里面进行配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
"><!--1.mvc注解驱动--><mvc:annotation-driven/><!--2.配置视图解析器--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/"/><property name="suffix" value=".jsp"/></bean><!--3.静态资源权限开放--><mvc:default-servlet-handler/><!--4.组件扫描,扫描Controller--><context:component-scan base-package="com.itheima.controller"/>
</beans>
- 在
webapp里面创建index.jsp文件。
<html>
<head><title>Title</title>
</head>
<body>
<h1>Hello World!! ${name} </h1>
</body>
</html>
(2)快速入门
- 自定义拦截器很简单,只有如下三步:
- ①、编写拦截器:创建拦截器类实现HandlerInterceptor接口,在
com.itheima.interceptor包里创建拦截器类MyInterceptor1
package com.itheima.interceptor;import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class MyInterceptor1 implements HandlerInterceptor {//在目标方法执行之前 执行@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("preHandle...");return true;//返回值是false,那么后面的postHandle、afterCompletion都无法执行}//在目标方法执行之后 视图对象返回之前执行@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("postHandle...");}//在整个流程都执行完毕后 执行@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("afterCompletion...");}
}
- ②配置拦截器;配置:在SpringMVC的配置文件中配置
<!--配置拦截器-->
<mvc:interceptors><mvc:interceptor><!--对哪些资源执行拦截操作--><mvc:mapping path="/**"/><!--所有资源--><bean class="com.itheima.interceptor.MyInterceptor1"/></mvc:interceptor>
</mvc:interceptors>
- ③测试拦截器的拦截效果
- 编写测试程序测试:
- 编写Controller,发请求到controller,跳转页面

- 当拦截器的preHandle方法返回true则会执行目标资源,如果返回false则不执行目标资源;

- 拦截器中的方法执行顺序是:preHandler-------目标资源----postHandle---- afterCompletion

//在目标方法执行之前 执行
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("preHandle...");String param = request.getParameter("param");if ("yes".equals(param)){return true;}else {request.getRequestDispatcher("/error.jsp").forward(request,response);return false;}
}

//在目标方法执行之后 视图对象返回之前执行
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {modelAndView.addObject("name","itheima");System.out.println("postHandle...");
}

- 拦截器在预处理后什么情况下会执行目标资源,什么情况下不执行目标资源,以及在有多个拦截器的情况下拦截器的执行顺序是什么?
- 再编写一个拦截器2,
public class MyInterceptor2 implements HandlerInterceptor {//在目标方法执行之前 执行public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException {System.out.println("preHandle22222.....");return true;}//在目标方法执行之后 视图对象返回之前执行public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {System.out.println("postHandle2222...");}//在流程都执行完毕后 执行public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {System.out.println("afterCompletion2222....");}
}
- 配置拦截器2
<!--配置拦截器-->
<mvc:interceptors><mvc:interceptor><!--对哪些资源执行拦截操作--><mvc:mapping path="/**"/><bean class="com.itheima.interceptor.MyInterceptor2"/></mvc:interceptor><mvc:interceptor><!--对哪些资源执行拦截操作--><mvc:mapping path="/**"/><bean class="com.itheima.interceptor.MyInterceptor1"/></mvc:interceptor>
</mvc:interceptors>
- 结论:
当拦截器的preHandle方法返回true则会执行目标资源,如果返回false则不执行目标资源
多个拦截器情况下,配置在前的先执行,配置在后的后执行
相关文章:
SpringMVC的拦截器
SpringMVC的拦截器 SpringMVC的拦截器SpringMVC的拦截器01-SpringMVC拦截器-拦截器的作用(理解)02-SpringMVC拦截器-interceptor和filter区别(理解,记忆)03-SpringMVC拦截器-快速入门(应用)(1)项目前准备(2)快速入门01…...
dolphinscheduler-3.1.4
1、相关环境 1.1、创建用户,配置免密 useradd hadoop; echo "Hadoop#149" | passwd --stdin hadoop#配置sudo免密 sed -i $ahadoop ALL(ALL) NOPASSWD: NOPASSWD: ALL /etc/sudoers sed -i s/Defaults requirett/#Defaults requirett/g /etc/su…...
大前端05-用vue轻量级第三方组件库快速创建个画板,可以支持画板、直线、圆形等输入,可以撤回,改变颜色
第三方组件介绍: 1. vue-whiteboard vue-whiteboard 是一个基于Vue.js的轻量级画板组件库。 GitHub仓库: https://github.com/craynic/vue-whiteboard 优势: 轻量级支持基本绘图功能,如画线、圆等支持橡皮擦功能支持清空画布 劣势&…...
ChatGPT使用案例之生成PPT
ChatGPT使用案例之生成PPT ChatGPT使用案例系列我们一直在寻找ChatGPT在哪些方面可以可以帮我们节省时间提高效率,越来越多的用户发掘出了ChatGPT更多实用性的功能,其中一项便是协助用户快速生成PPT。 作为一个基于大型语言处理模型的文字聊天工具,ChatGPT能够帮助用户围绕…...
ChatGPT基础知识系列之模型介绍
ChatGPT基础知识系列之模型介绍 前面我们已经介绍很多ChatGPT的使用案例了,更多案例可以参考我们下面的文章 ChatGPT使用案例之写代码 ChatGPT使用案例之画思维导图 ChatGPT使用案例之自然语言处理 ChatGPT使用案例之操作Excel ChatGPT使用案例之图像生成 ChatGPT使用案…...
ChatGPT助力软件开发
抛开Stack Overflow不谈,开发人员有了一个新的好朋友,它就是ChatGPT。ChatGPT是由人工智能驱动的语言模型,可以理解代码,还可以用自然语言回答问题。有了它,程序员再也不用在无尽的Stack Overflow页面和评论中搜索答案…...
这些关于高压放大器的常识,你知道多少?(二)
高压放大器是一种用于放大高压信号的电子测量仪器,具有高压输出,低噪声,高精度,高稳定性,高可靠性,低功耗,低成本等的优点。关于高压放大器的相关常识,相信还有不少新手工程师不太了…...
使用神经网络中的卷积核生成语谱图
主题思想: 正交基函数, sin,cos 是通过网络训练得到的参数。 使用一维卷积核直接对于原始音频,进行卷积生成语谱图; 使用一维卷积核生成语谱图特征, 不同于以往的方式,正是因为这些正交基函数是通过卷积…...
文章五:Python 网络爬虫实战:使用 Beautiful Soup 和 Requests 抓取网页数据
一、简介 本篇文章将介绍如何使用 Python 编写一个简单的网络爬虫,从网页中提取有用的数据。我们将通过以下几个部分展开本文的内容: 网络爬虫的基本概念Beautiful Soup 和 Requests 库简介选择一个目标网站使用 Requests 获取网页内容使用 Beautiful Soup 解析网页内容提取…...
【大数据之Hadoop】八、MapReduce之序列化
1 概述 序列化: 把内存中的对象,转换成字节序列(或其他数据传输协议),以便于存储到磁盘(持久化)和网络传输。 反序列化: 将收到字节序列(或其他数据传输协议)…...
Python网络爬虫之Selenium详解
1、什么是selenium? Selenium是一个用于Web应用程序测试的工具。Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样。支持通过各种driver(FirfoxDriver,IternetExplorerDriver,OperaDriver,ChromeDriver)驱动真实浏览器…...
中睿天下受邀出席电促会第五次会员代表大会
3月21日,中国电力发展促进会(以下简称“电促会”)第五次会员代表大会暨第五届理事会第一次会议在京召开,中睿天下作为网络安全专业委员会会员单位受邀出席。 会议表决通过了第五次会员代表大会工作报告、第四届理事会财务报告、《…...
Chat GPT:软件测试人员的危机?
Chat GPT,作为一个引起科技巨头“红色警报”的人工智能语言模型,短期内便席卷全球,上线仅两个月活跃用户破亿。比尔盖茨更是如此评价“这种AI技术出现的重大历史意义,不亚于互联网和个人电脑的诞生。” 在各个行业备受关注的Chat …...
【Redis】高可用:Redis的主从复制是怎么实现的?
【Redis】高可用:主从复制详解 我们知道要避免单点故障,即保证高可用,便需要冗余(副本)方式提供集群服务。而Redis 提供了主从库模式,以保证数据副本的一致,主从库之间采用的是读写分离的方式。…...
WLAN速度突然变慢
目录 一、问题 二、在设置中重置网络 1. 按下组合键“WinI”打开设置,在设置窗口中点击“网络和Internet”。 2、点击左侧的“状态”,在右侧选择“网络重置”。 3、然后会进入“网络重置”页面,点击“立即重置”后点击“是”等待完成即可…...
GDAL python教程基础篇(12)GDAL和 Pillow 的互操作
GDAL和 Pillow GDAL和PIL处理和操作的对象都是栅格图像。 但它们又不一样。 GDAL主要重点放在地理或遥感数据的读写和数据建模以及地理定位和转换, 但是PIL的重点是放在图像本身处理上的。 至于在底层数据处理上,两者都可以用 numpy 转化的二进制作为数…...
快速学习java路线建议
还有2 ,3个月就要毕业了,啥都不会的你是不是很慌呢,是不是想知道怎么样快速学习java呢。嘿嘿!它来了。 首先是java的学习 ,推荐 【尚硅谷】7天搞定Java基础,Java零…...
【MySQL】深入浅出主从复制数据同步原理
【MySQL】深入浅出主从复制数据同步原理 参考资料: 全解MySQL之主从篇:死磕主从复制中数据同步原理与优化 MySQL 日志:undo log、redo log、binlog 有什么用? 文章目录【MySQL】深入浅出主从复制数据同步原理一、主从复制架构概述…...
Redis持久化和高可用
Redis持久化和高可用一、Redis持久化1、Redis持久化的功能2、Redis提供两种方式进行持久化二、RDB持久化1、触发条件2、bgsave执行流程3、启动时加载三、Redis高可用1、什么是高可用2、Redis高可用技术四、AOF持久化(支持秒级写入)1、开启AOF2、执行流程…...
【数据结构】第六站:栈和队列
目录 一、栈 1.栈的概念和结构 2.栈的实现方案 3.栈的具体实现 4.栈的完整代码 5.有效的括号 二、队列 1.队列的概念及结构 2.队列的实现方案 3.队列的实现 4.队列实现的完整代码 一、栈 1.栈的概念和结构 栈:一种特殊的线性表,其只允许在固定…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
AI语音助手的Python实现
引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...
