SpringMVC稳扎稳打(3)之拦截器

第五章:转矩脉动的成因与抑制技术:从根源到解决方案 本文摘要: 转矩脉动是电机运行中的关键问题,涉及电磁、机械和控制三大因素。电磁因素包括谐波、齿槽转矩和磁饱和;机械因素涵盖动平衡和轴承缺陷;控制因素涉及测量误差和死区效应。解决方案采用多层面优化:硬件上通过斜极设计和死区补偿(提供算法代码)降低脉动70%;控制上采用扰动观测器和谐振控制器进行动态抑制;针对齿槽转矩开发离线学习+在线查表补偿方案。测试环节建立振动噪声量化评价体系,包括加速度计测量和A计权声学评估。最终形成从设计到控制的系统化抑制策略,显著提升电机静音性、平顺性和寿命。 阅读详情

1、我们最常见的拦截器(编码拦截器)

	<!-- 编码过滤器 -->
	<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<async-supported>true</async-supported>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>



2、配置拦截器(实现拦截器)

如果有多个拦截器、则按配置的顺序执行!

2.1、实际开发用这种配置方式


	<!--类似全局的拦截器:springmvc配置类似全局的拦截器,springmvc框架将配置的类似全局的拦截器注入到每个HandlerMapping中。-->
	<mvc:interceptors>
		<mvc:interceptor>
			<!-- /**表示所有url包括子url路径 -->
			<mvc:mapping path="/**"/>
			<bean class="org.chenzhengyou.com.HandlerInterceptorData.HandlerInterceptor01"></bean>
		</mvc:interceptor>
	</mvc:interceptors>


2.2、这种也可以实现

	<!--拦截器:springmvc拦截器针对HandlerMapping进行拦截设置,-->
	<!--如果在某个HandlerMapping中配置拦截,经过该 HandlerMapping映射成功的handler最终使用该 拦截器。-->
	<!--实际开发不使用这种-->
	<!--<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">-->
		<!--<property name="interceptors">-->
			<!--<list>-->
				<!--<ref bean="handlerInterceptor1"/>-->
			<!--</list>-->
		<!--</property>-->
	<!--</bean>-->
	<!--<bean id="handlerInterceptor1" class="org.chenzhengyou.com.HandlerInterceptorData.HandlerInterceptor01"/>-->


3、实现拦截器类:HandlerInterceptor01.class  implements HandlerInterceptor


package org.chenzhengyou.com.HandlerInterceptorData;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Created by czy on 2016/11/5.<br/>
 * 1、测试拦截器1、实现 HandlerInterceptor 接口
 * 也可以实现WebRequestInterceptor 接口<br/>
 * 2、把定义的拦截器类加到SpringMVC的拦截体系中
 */
public class HandlerInterceptor01 implements HandlerInterceptor {



	//进入 Handler方法之前执行
	//用于身份认证、身份授权
	//比如身份认证,如果认证通过表示当前用户没有登陆,需要此方法拦截不再向下执行
	@Override
	public boolean preHandle(HttpServletRequest httpServletRequest,
	                         HttpServletResponse httpServletResponse, Object o) throws Exception {

		System.out.println("HandlerInterceptor1...preHandle");

		//return false表示拦截,不向下执行
		//return true表示放行
		return true;
	}


	//进入Handler方法之后,返回modelAndView之前执行
	//应用场景从modelAndView出发:将公用的模型数据(比如菜单导航)在这里传到视图,也可以在这里统一指定视图
	@Override
	public void postHandle(HttpServletRequest httpServletRequest,
	                       HttpServletResponse httpServletResponse,
	                       Object o, ModelAndView modelAndView) throws Exception {

		System.out.println("HandlerInterceptor1...postHandle");

	}



	//执行Handler完成执行此方法
	//应用场景:统一异常处理,统一日志处理
	@Override
	public void afterCompletion(HttpServletRequest httpServletRequest,
	                            HttpServletResponse httpServletResponse,
	                            Object o, Exception e) throws Exception {

		System.out.println("HandlerInterceptor1...afterCompletion");
	}
}



4、随便访问一个页面(因为我们的拦截规则是 /**)



5、结果




6、解释

6.1、postHandle (HttpServletRequest request, HttpServletResponse response,Object handle, ModelAndView modelAndView) 方法

       由preHandle 方法的解释我们知道这个方法包括后面要说到的afterCompletion方法都只能是在当前所属的Interceptor 的preHandle 方法的返回值为true 时才能被调用。postHandle 方法,顾名思义就是在当前请求进行处理之后,也就是Controller 方法调用之后执行,但是它会在DispatcherServlet 进行视图返回渲染之前被调用,所以我们可以在这个方法中对Controller 处理之后的ModelAndView 对象进行操作。

       postHandle 方法被调用的方向跟preHandle 是相反的,也就是说先声明的Interceptor 的postHandle 方法反而会后执行,这和Struts2 里面的Interceptor 的执行过程有点类型。Struts2 里面的Interceptor 的执行过程也是链式的,只是在Struts2 里面需要手动调用ActionInvocation 的invoke 方法来触发对下一个Interceptor 或者是Action 的调用,然后每一个Interceptor 中在invoke 方法调用之前的内容都是按照声明顺序执行的,而invoke 方法之后的内容就是反向的。 



6.2、afterCompletion(HttpServletRequest request, HttpServletResponse response,Object handle, Exception ex) 方法

       该方法也是需要当前对应的Interceptor 的preHandle 方法的返回值为true 时才会执行。顾名思义,该方法将在整个请求结束之后,也就是在DispatcherServlet 渲染了对应的视图之后执行。这个方法的主要作用是用于进行资源清理工作的。




6.3、postHandle (HttpServletRequest request, HttpServletResponse response,Object handle, ModelAndView modelAndView) 方法

        由preHandle 方法的解释我们知道这个方法包括后面要说到的afterCompletion方法都只能是在当前所属的Interceptor 的preHandle 方法的返回值为true 时才能被调用。postHandle 方法,顾名思义就是在当前请求进行处理之后,也就是Controller 方法调用之后执行,但是它会在DispatcherServlet 进行视图返回渲染之前被调用,所以我们可以在这个方法中对Controller 处理之后的ModelAndView 对象进行操作。

       postHandle 方法被调用的方向跟preHandle 是相反的,也就是说先声明的Interceptor 的postHandle 方法反而会后执行,这和Struts2 里面的Interceptor 的执行过程有点类型。Struts2 里面的Interceptor 的执行过程也是链式的,只是在Struts2 里面需要手动调用ActionInvocation 的invoke 方法来触发对下一个Interceptor 或者是Action 的调用,然后每一个Interceptor 中在invoke 方法调用之前的内容都是按照声明顺序执行的,而invoke 方法之后的内容就是反向的。



系列文章




TC3XX - MCAL知识点(三十五):Tasking编译器下,Tc3xx的MCAL代码如何使用多核,多核中断、多核任务、多核外设之间的MCAL配置与代码例程 文章用于记录在裸机情况下使用多核Tc387芯片,如何高效运行以及正确的代码、工程属性、链接文件配置等问题,相互结合、相互影响的地方,以示后续使用记录。 阅读详情

相关推荐

从翼型到湍流:用生活化案例图解空气动力学核心概念(中英双语版)

本文通过飞机机翼、F1赛车、高尔夫球等生活化案例,图解空气动力学核心概念。深入浅出地解释了攻角如何产生升力、边界层与流动分离如何影响阻力、马赫数如何划分速度世界,以及涡流与湍流的特性与应用。文章还介绍了计算流体动力学(CFD)这一现代数字风洞工具,帮助读者直观理解这些塑造现代交通与运动设计的无形之力。

metaverse5vr的博客 477

Spring boot拦截器Interceptor引用外部properties配置(@Value)

Spring boot的web mvc项目中,经常会使用自定义拦截器进行权限的验证,安全验证等步骤。自定义拦截器往往会引用外部properties配置。比如:为了防范CSRF攻击,需要拦截每一个请求,并判断request header中Referer属性是不是来自合法的服务器地址。而服务器地址url为了方便管理和维护,在*.properties文件中配置。   本文基于Spring boot构建w

南熏门前一只喵 7858

Matlab子图排版终极指南:从tight_subplot到tiledlayout的实战对比

本文深入对比Matlab中两大子图排版工具:社区经典函数tight_subplot与官方现代布局管理器tiledlayout。针对默认subplot产生的子图间距与边缘距离问题,详细解析两者的设计哲学、参数控制与实战应用,帮助用户根据版本与需求选择最佳方案,实现高效、精确且美观的多子图排版。

weixin_29048309的博客 360

合辑 | 面试必备!18篇Java面试疑难点详解

简介:就目前就业环境来看,学习Java软件开发是不会过时的,据各大招聘网站统计,Java程序员的需求10年来一直跃居首位。本节小编汇总了18篇Java面试相关的疑难点解析,知识点+理论详解帮助你稳扎稳打,学好Java不再是难事~ Java数据库开发 1.面试疑难点解析——Java数据库开发(一) 当面试官提问数据库优化及NoSQL使用场景时,该如何回答?在现实的开发环境之中所谓的数据库优...

阿里云开发者 6818

博士申请-考核制经验分享(2)——个人简历

申博过程中一般在联系导师时就将个人简历作为邮件附件,有些学校也会在提交材料或者复试阶段提交个人简历。

weixin_49282401的博客 5529

UNSW-NB15数据集:网络流量分析与恶意攻击检测实战指南

本文提供了UNSW-NB15数据集在网络流量分析与恶意攻击检测领域的实战指南。详细介绍了该数据集的构成、核心特征解析、特征工程处理、机器学习模型训练与评估方法,并探讨了模型部署及持续优化的挑战与思路,帮助读者构建高效的网络攻击检测系统。

weixin_29193359的博客 261

springmvc整合freemarker教程

1、介绍 我最近喜欢freemarker在网上找了大半天、都没有找到一个简单又容易理解的案例。虽然只是一个模板技术、但是相对刚开始什么都不知道的,很难入手。下面是自学(其实是谷歌和百度的东找西补)、写了个小案例,入门的。喜欢的可以看看、不喜欢的可以微笑! 开发工具:idea 项目构建:maven 开发语言:java 整合框架:SpringMV

用心做每件事 1万+

21、使用 FastHenry 进行片上电感器的模拟与参数预测

本文介绍了使用 FastHenry 对片上电感器进行模拟和参数预测的方法。讨论了 FastHenry 的适用场景、线圈几何形状的选择与离散化方法,以及如何考虑模拟中的寄生效应。同时对比了 FastHenry 和 Magnet 在不同基板电阻率下的模拟精度,并提出了优化电感器设计的策略,为高效准确地预测电感参数提供了技术指导。

y9z0a1b的博客 296

ssm整合maven项目启动报错、架包冲突

先来个在idea(eclipse也一样)SSM项目整合、maven依赖服务器启动报错的情况、大家应该遇见过吧! at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(B

用心做每件事 4471

2023华为od机试C卷【最富裕的小家庭】Python 实现

在一颗树中,每个节点代表一个家庭成员,节点的数字表示其个人的财富值,一个节点及其直接相连的子节点被定义为个小家庭。现给你一颗树,请计算出最富裕的小家庭的财富和。

MISAYAONE的博客 2046

用 ADT 的 RAP Generator 把 RAP 栈一键搭起来:从表到可预览的 OData V4 应用

摘要 SAP RAP Generator 工具能显著提升开发效率,通过一键生成从数据库表到完整 OData UI Service 的全套对象(包括 CDS、Behavior、Service Definition 等)。该工具特别适用于原型验证和标准化应用开发,可节省 60% 以上的基础编码时间。使用时需注意: 表设计需包含关键管理字段(如 last_changed 时间戳) 向导配置决定分层架构和命名规范 生成结果包含可立即预览的 Fiori Elements 界面 后续可专注于业务逻辑增强(校验、权限等)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1281

SpringMVC稳扎稳打(1)之入门篇

Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1,Struts2等。

用心做每件事 2151

Android 13.0 app进程保活白名单功能实现

在13.0的系统rom产品开发中,在某些重要的app即使进入后台,产品需求要求也不想被系统杀掉进程,需要app长时间保活,就是app进程保活白名单功能的实现, 所以需要在系统杀进程的时候不杀掉白名单的进程,接下来就看怎么样来实现这些功能

安卓兼职framework和app工程师的博客 3143

SpringMVC稳扎稳打(2)之控制器

DispathcerServlet作为springmvc的中央调度器存在,DispatcherServlet创建时会默认从DispatcherServlet.properties文件加载springmvc所用的各各组件,如果在springmvc.xml中配置了组件则以springmvc.xml中配置的为准,DispatcherServlet的存在降低了springmvc各各组件之间的耦合度。

用心做每件事 1989

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Redis+Spring 整合应用教程

Redis+spring 整合应用教程 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。 Redis 教程之spring整合应用、redis安装、等等

用心做每件事 1811

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

httpclient 实例教程

1、什么是httpclient HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。 HttpClient特性:基于标准、纯净的Java语言。实现了Http1.0和Http1.1。支持HTTPS协议。通过Http代理建立透明的连接。 下载地址:http://hc.apache.org/

用心做每件事 1718

Spring稳扎稳打(0)之核心基础篇

Spring Framework是一个开源的Java/Java EE全功能栈(full-stack)的应用程序框架,以Apache许可证形式发布,也有.NET平台上的移植版本。该框架基于 Expert One-on-One Java EE Design and Development(ISBN 0-7645-4385-7)一书中的代码,最初由Rod Johnson和Juergen Hoeller等开发。Spring Framework提供了一个简易的开发方式,这种开发方式,将避免那些可能致使底层代码变得繁杂

用心做每件事 1661

第三篇 第 6 课

前置:第三篇第 1 课(stdx 引入),第二篇第 1 课(std.regex)。环境:仓颉 SDK 1.2.0。本文所有代码与输出均逐行实测。

weixin_41618057的博客 556

MCP 2026-07-28 无状态协议大改版:Spring AI 2.1 多轮往返请求与网关路由落地

无状态,所以任何实例都能处理任何请求,扩容不再需要粘性会话;显式句柄,所以跨调用状态是可审计、可过期的,而不是藏在进程内存里;幂等重放,所以交互式中断在分布式环境下也可恢复,代价是你要自己保证副作用可对账;头部路由,所以网关能在不解析 body 的前提下做治理,而校验 header/body 一致性成了新的安全底线。这些没有一个是在发明新概念。它们是分布式系统里被验证过二十年的老手艺:无状态、显式上下文、幂等、网关治理、fail-fast、可观测。

qq_36021478的博客 176

压缩省了60%磁盘,写入TPS掉了25%——InnoDB页压缩的三类隐性代价与适用边界

InnoDB页压缩能显著降低表空间占用,但磁盘的节省不是免费的。压缩页在写入时需要CPU执行压缩算法、读取时需要CPU解压;压缩后的页在Buffer Pool中占用更少空间,但命中后的解压开销和未命中时的解压延迟会改变缓存的实际效能;写密集场景下,压缩/解压带来的写入放大可能让TPS明显下降。本文拆解InnoDB页压缩的物理机制、三类隐性代价的量化表现,以及“什么场景该用、什么场景该绕开”的判断框架。

DBAxiaoye的博客 337

实际工程问题:AI 生成 Spring Cache(@Cacheable / @CachePut / @CacheEvict)缓存注解踩坑

商品详情服务,要求:商品基础信息走缓存,减少 DB 查询;典型:AI 只贴注解,忽略 AOP 代理、key 设计、缓存穿透/击穿/过期、序列化、同步刷新,本地单测正常,上线后缓存脏数据、命中率异常、雪崩。如果业务在事务中,@CacheEvict / @CachePut 如果在事务提交前执行,一旦事务回滚,缓存已经被删掉/更新,数据不一致。• 如果在同一个类里用 this.xxx() 调用带缓存注解的方法,不走代理,缓存直接失效;// 更新商品:先更新 DB,再删除缓存,而不是直接 @CachePut。

2401_89363342的博客 489

模型“看不见”中间的东西——prompt cache 与 Zone 分区

本文揭示了LLM系统中promptcache失效的根源:动态内容错置于系统提示词前缀,导致缓存命中率从80%骤降至4%。核心教训是“变化内容必须排在最后”——通过Zone分区(ZoneA稳定区、ZoneB动态区),将每轮可能变化的内容移至末尾,可确保前缀稳定,恢复高命中率。关键在于:前缀匹配要求逐字节相同,任何一处变动即导致后续全部失效。修复建议包括:重构提示词结构、正确分类内容、监控缓存单位(字节与token不可混用)、避免压缩破坏前缀。最终实现成本降低9倍,提升推理效率。

qinglongcn的博客 222

SpringBoot 新闻推荐系统:88个Java文件105个接口,首页推荐位是后端按点击数排出来的

# SpringBoot 新闻推荐系统:88个Java文件105个接口,首页推荐位是后端按点击数排出来的 > 这是一套基于 Spring Boot 的新闻推荐系统源码,配套 `db.sql` 建表脚本,业务覆盖新闻发布、排行榜管理、评论回复、点赞点踩、收藏夹和轮播图配置。形态是**前后台双端**:前台是读者用的 layui 静态站,后台是管理员用的 Vue 单页应用(编译产物已嵌在工程里)。最值

面朝大海 878

Spring 事务详解:@Transactional 如何生效、何时回滚、传播行为怎么选

从订单与库存写入出发,拆解 @Transactional 的代理调用链、默认回滚规则与自调用问题;通过 Spring Boot + H2 的五个验证用例比较 REQUIRED、REQUIRES_NEW、NESTED,并说明数据库事务与 Redis、消息和远程接口的边界。

qq_74421990的博客 334

【从零理解 Spring AI · 12】MCP 的两种角色:做客户端还是做服务端

上一篇讲了 MCP 的概念:标准协议、三大角色、M+N 替代 M×N。

nice_lcj520的博客 581

Spring Framework 7 HTTP Interface 实战:声明式 RestClient、超时与测试

Spring Framework 7 中,Java 开发者如何使用 HTTP Interface 管理外部服务调用?本文从传统 RestClient 出发,介绍 @HttpExchange、`@GetExchange`、`RestClientAdapter` 和 HttpServiceProxyFactory 的使用方式,并结合商品服务案例说明客户端配置、超时控制、异常处理及 Mock 测试。最后讨论从 RestTemplate、Feign 迁移时的技术取舍,帮助开发者建立更清晰的 HTTP 客户端架构。

代码不止,探索不息 256

基于 Springboot3+SpringAI+Agent+RAG+Function Calling的校园闲置物品循环流转 AI 智能估价平台

基于SpringBoot3+SpringAI1.0,打造校园闲置循环平台,实现从发布、智能估价(规则+大模型校准)、担保交易到信用治理与运营看板的闭环。通过RAG问答、FunctionCalling工具调用、流式SSE输出及本地降级策略,将AI能力深度嵌入业务链路。项目强调可落地性:无APIKey也能演示,向量存MySQL,状态机防绕过,代码清晰可读。适合想做真实AI全栈项目、准备面试或提升工程化思维的开发者。

深耕开发,专注编程实战。分享源码解析、项目搭建、问题排查笔记,沉淀技术,持续更新。 311
上一篇: spring mvc拦截器
下一篇: 设计模式—六大原则之(道之禅)
AndyChen9988
博客等级 码龄11年 276粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值