当前位置: 首页 > news >正文

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区别(理解&#xff0c;记忆)03-SpringMVC拦截器-快速入门(应用)&#xff08;1&#xff09;项目前准备&#xff08;2&#xff09;快速入门01…...

dolphinscheduler-3.1.4

1、相关环境 1.1、创建用户&#xff0c;配置免密 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轻量级第三方组件库快速创建个画板,可以支持画板、直线、圆形等输入,可以撤回,改变颜色

第三方组件介绍&#xff1a; 1. vue-whiteboard vue-whiteboard 是一个基于Vue.js的轻量级画板组件库。 GitHub仓库: https://github.com/craynic/vue-whiteboard 优势&#xff1a; 轻量级支持基本绘图功能&#xff0c;如画线、圆等支持橡皮擦功能支持清空画布 劣势&…...

ChatGPT使用案例之生成PPT

ChatGPT使用案例之生成PPT ChatGPT使用案例系列我们一直在寻找ChatGPT在哪些方面可以可以帮我们节省时间提高效率,越来越多的用户发掘出了ChatGPT更多实用性的功能,其中一项便是协助用户快速生成PPT。 作为一个基于大型语言处理模型的文字聊天工具,ChatGPT能够帮助用户围绕…...

ChatGPT基础知识系列之模型介绍

ChatGPT基础知识系列之模型介绍 前面我们已经介绍很多ChatGPT的使用案例了,更多案例可以参考我们下面的文章 ChatGPT使用案例之写代码 ChatGPT使用案例之画思维导图 ChatGPT使用案例之自然语言处理 ChatGPT使用案例之操作Excel ChatGPT使用案例之图像生成 ChatGPT使用案…...

ChatGPT助力软件开发

抛开Stack Overflow不谈&#xff0c;开发人员有了一个新的好朋友&#xff0c;它就是ChatGPT。ChatGPT是由人工智能驱动的语言模型&#xff0c;可以理解代码&#xff0c;还可以用自然语言回答问题。有了它&#xff0c;程序员再也不用在无尽的Stack Overflow页面和评论中搜索答案…...

这些关于高压放大器的常识,你知道多少?(二)

高压放大器是一种用于放大高压信号的电子测量仪器&#xff0c;具有高压输出&#xff0c;低噪声&#xff0c;高精度&#xff0c;高稳定性&#xff0c;高可靠性&#xff0c;低功耗&#xff0c;低成本等的优点。关于高压放大器的相关常识&#xff0c;相信还有不少新手工程师不太了…...

使用神经网络中的卷积核生成语谱图

主题思想&#xff1a; 正交基函数&#xff0c; sin,cos 是通过网络训练得到的参数。 使用一维卷积核直接对于原始音频&#xff0c;进行卷积生成语谱图&#xff1b; 使用一维卷积核生成语谱图特征&#xff0c; 不同于以往的方式&#xff0c;正是因为这些正交基函数是通过卷积…...

文章五:Python 网络爬虫实战:使用 Beautiful Soup 和 Requests 抓取网页数据

一、简介 本篇文章将介绍如何使用 Python 编写一个简单的网络爬虫,从网页中提取有用的数据。我们将通过以下几个部分展开本文的内容: 网络爬虫的基本概念Beautiful Soup 和 Requests 库简介选择一个目标网站使用 Requests 获取网页内容使用 Beautiful Soup 解析网页内容提取…...

【大数据之Hadoop】八、MapReduce之序列化

1 概述 序列化&#xff1a; 把内存中的对象&#xff0c;转换成字节序列&#xff08;或其他数据传输协议&#xff09;&#xff0c;以便于存储到磁盘&#xff08;持久化&#xff09;和网络传输。 反序列化&#xff1a; 将收到字节序列&#xff08;或其他数据传输协议&#xff09…...

Python网络爬虫之Selenium详解

1、什么是selenium? Selenium是一个用于Web应用程序测试的工具。Selenium 测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。支持通过各种driver(FirfoxDriver&#xff0c;IternetExplorerDriver&#xff0c;OperaDriver&#xff0c;ChromeDriver)驱动真实浏览器…...

中睿天下受邀出席电促会第五次会员代表大会

3月21日&#xff0c;中国电力发展促进会&#xff08;以下简称“电促会”&#xff09;第五次会员代表大会暨第五届理事会第一次会议在京召开&#xff0c;中睿天下作为网络安全专业委员会会员单位受邀出席。 会议表决通过了第五次会员代表大会工作报告、第四届理事会财务报告、《…...

Chat GPT:软件测试人员的危机?

Chat GPT&#xff0c;作为一个引起科技巨头“红色警报”的人工智能语言模型&#xff0c;短期内便席卷全球&#xff0c;上线仅两个月活跃用户破亿。比尔盖茨更是如此评价“这种AI技术出现的重大历史意义&#xff0c;不亚于互联网和个人电脑的诞生。” 在各个行业备受关注的Chat …...

【Redis】高可用:Redis的主从复制是怎么实现的?

【Redis】高可用&#xff1a;主从复制详解 我们知道要避免单点故障&#xff0c;即保证高可用&#xff0c;便需要冗余&#xff08;副本&#xff09;方式提供集群服务。而Redis 提供了主从库模式&#xff0c;以保证数据副本的一致&#xff0c;主从库之间采用的是读写分离的方式。…...

WLAN速度突然变慢

目录 一、问题 二、在设置中重置网络 1. 按下组合键“WinI”打开设置&#xff0c;在设置窗口中点击“网络和Internet”。 2、点击左侧的“状态”&#xff0c;在右侧选择“网络重置”。 3、然后会进入“网络重置”页面&#xff0c;点击“立即重置”后点击“是”等待完成即可…...

GDAL python教程基础篇(12)GDAL和 Pillow 的互操作

GDAL和 Pillow GDAL和PIL处理和操作的对象都是栅格图像。 但它们又不一样。 GDAL主要重点放在地理或遥感数据的读写和数据建模以及地理定位和转换&#xff0c; 但是PIL的重点是放在图像本身处理上的。 至于在底层数据处理上&#xff0c;两者都可以用 numpy 转化的二进制作为数…...

快速学习java路线建议

还有2 &#xff0c;3个月就要毕业了&#xff0c;啥都不会的你是不是很慌呢&#xff0c;是不是想知道怎么样快速学习java呢。嘿嘿&#xff01;它来了。 首先是java的学习 &#xff0c;推荐 ​​​​​​【尚硅谷】7天搞定Java基础&#xff0c;Java零…...

【MySQL】深入浅出主从复制数据同步原理

【MySQL】深入浅出主从复制数据同步原理 参考资料&#xff1a; 全解MySQL之主从篇&#xff1a;死磕主从复制中数据同步原理与优化 MySQL 日志&#xff1a;undo log、redo log、binlog 有什么用&#xff1f; 文章目录【MySQL】深入浅出主从复制数据同步原理一、主从复制架构概述…...

Redis持久化和高可用

Redis持久化和高可用一、Redis持久化1、Redis持久化的功能2、Redis提供两种方式进行持久化二、RDB持久化1、触发条件2、bgsave执行流程3、启动时加载三、Redis高可用1、什么是高可用2、Redis高可用技术四、AOF持久化&#xff08;支持秒级写入&#xff09;1、开启AOF2、执行流程…...

【数据结构】第六站:栈和队列

目录 一、栈 1.栈的概念和结构 2.栈的实现方案 3.栈的具体实现 4.栈的完整代码 5.有效的括号 二、队列 1.队列的概念及结构 2.队列的实现方案 3.队列的实现 4.队列实现的完整代码 一、栈 1.栈的概念和结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定…...

GD32F103C8T6烧录方式全解析:串口ISP、ST-Link Utility、Keil在线,哪种最适合你?

GD32F103C8T6烧录方案深度评测&#xff1a;从原型开发到量产部署的全场景指南 在嵌入式开发领域&#xff0c;选择正确的程序烧录方式往往决定着开发效率和生产成本。作为STM32F103的国产替代方案&#xff0c;GD32F103C8T6凭借其出色的性价比赢得了广泛关注。但许多开发者在迁移…...

ncmdumpGUI:3分钟掌握网易云音乐ncm格式转换的终极方案

ncmdumpGUI&#xff1a;3分钟掌握网易云音乐ncm格式转换的终极方案 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经在网易云音乐下载了心爱的歌曲&a…...

高效视频帧提取终极指南:为深度学习构建专业数据集

高效视频帧提取终极指南&#xff1a;为深度学习构建专业数据集 【免费下载链接】video2frame Yet another easy-to-use tool to extract frames from videos, for deep learning and computer vision. 项目地址: https://gitcode.com/gh_mirrors/vi/video2frame 在计算机…...

Lingoose框架实战:构建智能客服工单处理AI工作流

1. 项目概述&#xff1a;从“Lingo”到“Goose”&#xff0c;一个AI应用编排框架的诞生如果你最近在折腾大语言模型应用&#xff0c;尤其是想把OpenAI、Anthropic这些API的能力整合到自己的业务流程里&#xff0c;那你大概率已经体会过那种“胶水代码”的烦恼了。今天要聊的这个…...

Qwen2.5-14B实战指南:3个关键步骤突破本地大模型部署瓶颈

Qwen2.5-14B实战指南&#xff1a;3个关键步骤突破本地大模型部署瓶颈 【免费下载链接】Qwen2.5-14B 项目地址: https://ai.gitcode.com/hf_mirrors/ai-gitcode/Qwen2.5-14B 当开发者面对复杂的代码生成任务或技术文档分析需求时&#xff0c;往往会受限于云端API的延迟和…...

AI原生编程语言Reia:为LLM设计的编程范式变革

1. 项目概述&#xff1a;Reia&#xff0c;一个面向未来的AI原生编程语言最近在AI和编程语言交叉领域&#xff0c;一个名为Reia的项目引起了我的注意。它来自Quaint-Studios&#xff0c;定位是“AI原生”的编程语言。这听起来有点抽象&#xff0c;但简单来说&#xff0c;Reia试图…...

Adafruit Feather RP2040 SCORPIO:专为大规模NeoPixel灯光控制而生的开发板

1. 项目概述&#xff1a;为什么你需要一块专为大规模灯光控制而生的开发板&#xff1f;如果你曾经尝试过用一块普通的微控制器驱动超过几百个NeoPixel&#xff08;或WS2812&#xff09;LED&#xff0c;你很可能已经撞上了性能的天花板。CPU被时序生成任务完全占用&#xff0c;动…...

多数人支持!微软或把 Xbox 重新品牌化为 XBOX,回归最初形式

Xbox 品牌重塑&#xff1a;从民意调查到账号更名微软 Xbox 首席执行官阿莎夏尔马在 X&#xff08;原推特&#xff09;上发起民意调查&#xff0c;询问粉丝微软应使用 Xbox 还是 XBOX&#xff0c;结果多数人支持 XBOX&#xff0c;随后公司将其 X 账号更名。不过&#xff0c;Xbox…...

构建高质量代码数据池:从数据堆到模型营养基的进化之路

1. 项目概述&#xff1a;一个为代码生成模型量身定制的数据池最近在折腾大语言模型&#xff0c;特别是代码生成这块&#xff0c;发现一个挺有意思的现象&#xff1a;很多开发者手头有不错的代码数据集&#xff0c;但直接丢给模型训练&#xff0c;效果总是不尽如人意。要么是数据…...

基于Slack Bolt与OpenAI API构建企业级AI助手:从集成部署到高级应用

1. 项目概述&#xff1a;当ChatGPT遇上Slack&#xff0c;团队协作的智能革命 如果你和我一样&#xff0c;每天的工作都泡在Slack里&#xff0c;与团队沟通、同步进度、处理各种消息&#xff0c;那你一定也经历过这样的时刻&#xff1a;一个技术问题卡住了&#xff0c;需要快速…...