springMVC-自定义拦截器

一、先来看一个需求

Spring MVC也可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,比如对临时文件的清除,或者对某些ip地址进行拦截器.

二、springMVC自定义拦截器介绍

(1)需要实现一个接口 HandlerInterceptor.
(2)有三个方法需要我们重写
        preHandlerO.在目标方法执行之前被调用
        postHandleO:在目标方法执行后在被调用
        afterCompletion0:在所有的任务完毕后,再调用,比如页面渲染完毕后在调用.

三、入门示例 

1、在springMVC的配置文件配置拦截器

<!--    配置拦截器--><mvc:interceptors><ref bean="myInterceptor"/></mvc:interceptors>

2、 自定义一个拦截器,实现接口HandlerInterceptor,并重写这三个方法

//交给springMVC管理
@Component
public class MyInterceptor implements HandlerInterceptor {public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("preHandle....");return true;}public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("postHandle....");}public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("afterCompletion....");}
}

3、写一个测试handler

@Controller
public class InterceptorTestHandler {@RequestMapping(value = "/testInterceptor")public String testInterceptor() {System.out.println("调用了test方法");return "success";}@RequestMapping(value = "/testInterceptor2")public String testInterceptor2() {System.out.println("调用了test2方法");return "success";}
}

4、写一个测试页面

<body>
<h1>test01</h1>
<a href="testInterceptor">测试拦截器01</a><h1>test02</h1>
<a href="testInterceptor2">测试拦截器02</a>
</body>

5、效果

可以看出,拦截器方法的执行顺序 preHandler >目标方法>postHandler>afterCompletion

四、拦截器的细节

1、如果preHandle方法_返回false,则不会再执行目标方法.实际上可以在此响应请求返回给页面

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("preHandle....");String mess = "炸弹";if(mess.equals("炸弹")){request.getRequestDispatcher("/WEB-INF/pages/error.jsp").forward(request,response);return false;}else {return true;}}

2.说明:postHandle 在目标方法被执行之后执行.可以在方法中访问到目标方法返回ModelAndView对象 (例如可以改变这个MondelAndView的去向)

在postHandle中,做二次处理

  public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {modelAndView.getView();modelAndView.setView();System.out.println("postHandle....");}

3、若preHandle 返回true,则afterCompletion 方法在渲染视图之后被执行
若preHandle 返回false,则afterCompletion方法不会被调用

4、也可以在配置拦截器时,指定该拦截器对某个请求生效,其它请求不生效

<mvc:mapping></mvc:mapping>

<!--    配置拦截器-->
<!--    <mvc:mapping></mvc:mapping> 表示被配置的拦截器只对指定路径的目标方法有效--><mvc:interceptors><mvc:interceptor><mvc:mapping path="/testInterceptor2"/><ref bean="myInterceptor"/></mvc:interceptor></mvc:interceptors>

5、排除掉某些请求<mvc:exclude-mapping path="/test"/>

6、多个拦截器时,如何拦截器中的方法如何执行

简单案例:

1、配置两个拦截器

<!--    配置拦截器-->
<!--    <mvc:mapping></mvc:mapping> 表示被配置的拦截器只对指定路径的目标方法有效--><mvc:interceptors><ref bean="myInterceptor"/>  //即示意图中的A拦截器<ref bean="multiInterceptor"/> //即示意图中的B拦截器</mvc:interceptors>

2、复制刚刚案例的拦截器(新建一个拦截器multiInterceptor),将输出语句加多一个2(入门示例)

3、点击请求,看控制台效果

7、多拦截器时, 还需要注意

(1)如果在第一个拦截器的preXxx方法返回false , 后面的代码统统不执行了
2)如果在第二个拦截器的prexxx方法返回false,则会执行前一个拦截器的aftefxxx方法,再退出.

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

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

相关文章

【Proteus仿真】【Arduino单片机】蓝牙遥控小车

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使LCD1602液晶&#xff0c;L298电机&#xff0c;直流电机&#xff0c;HC05/06蓝牙模块等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1602…

内网渗透基础

内网 内网指的是内部局域网&#xff0c;常说的LAN&#xff08;local area network&#xff09;。常见家庭wifi网络和小型的企业网络&#xff0c;通常内部计算机直接访问路由器设备&#xff0c;路由器设备接入移动电信的光纤实现上网。 内部局域网可以通过交换机/防火墙组成多个…

玩转 Scrapy 框架 (一):Scrapy 框架介绍及使用入门

目录 一、Scrapy 框架介绍二、Scrapy 入门 一、Scrapy 框架介绍 简介&#xff1a; Scrapy 是一个基于 Python 开发的爬虫框架&#xff0c;可以说它是当前 Python 爬虫生态中最流行的爬虫框架&#xff0c;该框架提供了非常多爬虫的相关组件&#xff0c;架构清晰&#xff0c;可扩…

Android开发——添加图片

1、首先选择一张需要的图片&#xff0c;通过左侧的Resource Manage选择“”并选择Import Drawables 选择一张图片 并调整以下两个内容 这两个内容的作用借用谷歌官方的Android开发教程的内容&#xff1a; *Android 设备具有不同的屏幕尺寸&#xff08;手机、平板电脑和电视等…

【Java JMM】编译和优化

1 前端编译 在 Java 技术下, “编译期” 是一个比较含糊的表述, 因为它可能指的是 前端编译器 (“编译器的前端” 更准确一些) 把 *.java 文件转变成 *.class 文件的过程Java 虚拟机的即时编译器 (常称 JIT 编译器, Just In Time Compiler) 运行期把字节码转变成本地机器码的过…

【华为鸿蒙系统学习】- HarmonyOS4.0之App项目开发|自学篇

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 &#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 创建鸿蒙第一个App项目 项目创建 工程目录区 预览区 运行Hello World 基本工程目录 ws:工…

ROS-小海龟案例---ROS命令

ROS-小海龟案例—ROS命令 rosnoderos&#xff1a;节点管理命令&#xff0c;通过此命令可以查看、操作以及监测已经运行的ros节点&#xff1a; rosnode 命令 作用 rosnode list 列出当前运行的node信息 rosnode i…

Jmeter参数化 —— 循环断言多方法

1、参数化接口测试数据 注意&#xff1a;csv文档参数化&#xff0c;里面有多少条数据&#xff0c;就要在线程组里循环多少次&#xff0c;不然就只执行一次 2、添加配置元件-计数器 关于计数器&#xff1a; ①Starting Value&#xff1a;给定计数器的初始值; ②递增&#xff1a…

Java开发框架和中间件面试题(1)

1.什么是Spring框架&#xff1f; Spring是一种轻量级框架&#xff0c;旨在提高开发人员的开发效率以及系统的可维护性。 我们一般说的Spring框架就是Spring Framework,它是很多模块的集合&#xff0c;使用这些模块可以很方便的协助我们进行开发。这些模块是核心容器、数据访…

安卓手机如何打开ics文件?ics格式文件用什么软件打开?

什么是ics格式文件&#xff1f;Ics格式文件是什么呢&#xff1f;其实ics格式文件是一种用于保存和交换日历信息的标准格式&#xff0c;它通常可以保存事件的名称、时间等信息&#xff0c;有不少日历、待办软件在导出数据的时候&#xff0c;都是以ics文件导出的。 有不少网友目…

求职方略-倒金字塔型自我介绍

第一步,开头第一句话提纲挈领,点出你的主要“卖点” 自我介绍的第一句话很重要,要有足够的吸引力,有足够的信息量,还要有足够的说服力,能产生先声夺人的效果。 一般的自我介绍喜欢按照时间线索依次介绍自己的经历,例如:“我大学毕业后就进入一家大公司的研发中心,工…

java.lang.IllegalStateException: Duplicate key

序言 最近监控扫描出我们项目的某些异常信息&#xff0c;报错java.lang.IllegalStateException: Duplicate key xxx&#xff0c;看到异常来自stream流&#xff0c;然后定位看了一下是某位同事的代码使用stream流把List转Map集合出现重复的key异常信息。List集合A对象来源于某个…

C# WPF上位机开发(QT vs WPF)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 最近经常收到朋友们的私信&#xff0c;他们对C# WPF开发很感兴趣&#xff0c;但是呢&#xff0c;正当准备学习的时候&#xff0c;又有人告诉他们应…

Linux编程环境和软件设施安装

目录 一、Linux编程环境安装 1.yum安装 2. vim安装&#xff08;文本编辑工具&#xff09; 3. lrzsz安装&#xff08;文件上传下载工具&#xff09; &#xff08;1) 搜索lrzsz安装包 &#xff08;2) 在线安装lrzsz &#xff08;3) 测试 二、Linux软件安装 1. 软件安装方…

Ubuntu 常用命令之 history 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 history命令在Ubuntu系统中用于显示用户执行过的命令列表。这个命令在bash shell中非常有用&#xff0c;特别是当你需要记住你之前执行过的命令时。 history命令的参数如下 -c&#xff1a;清除历史记录。-d offset&#xff1a;删…

Python如何生成随机图形验证码

python生成随机图形验证码 使用python生成随机图片验证码,需要使用pillow模块 1.安装pillow模块 pip install pillow 2.pillow模块的基本使用 1.创建图片 from PIL import Image #定义使用Image类实例化一个长为400px,宽为400px,基于RGB的(255,255,255)颜色的图片 img1Ima…

win11下配置visual studio 2022+PCL1.13.1

第一部分&#xff1a;visual studio2022 安装 vs官网网址如下&#xff1a;https://visualstudio.microsoft.com/zh-hans/vs/ 第一步&#xff1a;我们打开官网链接&#xff0c;按如下操作点击下载免费版本的exe文件 第二步&#xff1a;打开下载目录下的安装文件进行安装&#…

SQL 多字段条件查询

SQL 多字段条件查询 一个数据库表&#xff0c;几十个字段&#xff0c;查找任意字段里包含北京的记录&#xff0c;在 mysql 里这句 sql 应该是这样&#xff1a; SELECT * FROM table WHERE concat(field1,field2,field3……fieldn) like ‘% 北京 %’ 反正是少不了将几十个字…

【论文笔记】3D Gaussian Splatting for Real-Time Radiance Field Rendering

原文链接&#xff1a;https://arxiv.org/abs/2308.04079 1. 引言 网孔和点是最常见的3D场景表达&#xff0c;因其是显式的且适合基于GPU/CUDA的快速栅格化。神经辐射场&#xff08;NeRF&#xff09;则建立连续的场景表达便于优化&#xff0c;但渲染时的随机采样耗时且引入噪声…

Win11安装ise14.7~不需要虚拟机了~

之前一直无法在win11上安装ise14.7&#xff0c;网上搜索也无果&#xff0c;所有一直vmware虚拟机使用。直到最近看了水木上jesce的回复&#xff0c;试了下果然可以直接安装使用的。 步骤如下即可&#xff1a; 安装时切勿勾选最后一项&#xff0c;Enable WebTalk to send softwa…