随笔记录-springmvc_ResourceHandlerRegistry+ResourceHttpRequestHandler

环境:springboot-2.7.5

配置文件配置静态资源映射

springboot配置静态资源映射方式是通过 WebMvcAutoConfiguration 实现的

spring:
#  resources:
# 	 # 自springboot 2.5.5之后,该属性已经被废弃,使用spring.web.resources.static-locations代替
#    static-locations: classpath:/static/,classpath:/META-INF/resources/,classpath:/META-INF/resources/webjars/,file:E:/images/# 静态资源配置mvc:# 静态资源访问接口前缀static-path-pattern: /static/**web:resources:# 静态资源本地路径static-locations: classpath:/static/,classpath:/META-INF/resources/,classpath:/META-INF/resources/webjars/,file:E:/images/

该方式仅支持一种前缀匹配(spring.mvc.static-path-pattern)

自定义静态资源映射

可以继承 WebMvcConfigurationSupport 或者 WebMvcConfigurer 接口。

建议:
a、无须覆盖原有的静态资源,实现 WebMvcConfigurer 接口
b、需要覆盖静态资源,继承 WebMvcConfigurationSupport 类,重写所有资源映射
注意:
a、继承 WebMvcConfigurationSupport 类时,WebMvcAutoConfiguration 配置 和 其他所有实现 WebMvcConfigurer 接口的的配置都失效
b、实现 WebMvcConfigurer 接口时,最好通过 ResourceHandlerRegistry#hasMappingForPattern 方法判断一下,否则存在多个同名前缀,启动会报错

配置静态资源映射

ResourceHandlerRegistryaddResourceHandler 方法添加前缀匹配路径,addResourceLocations 添加本地映射路径。配置之后就保存了一份列表,当获取Mapping时,返回 SimpleUrlHandlerMapping

配置跨域

CorsRegistry 跨域支持配置

访问静态资源过程

获取handler

DispatcherServlet#doDispatch
DispatcherServlet#getHandler
获取handler
AbstractHandlerMapping#getHandler
AbstractUrlHandlerMapping#getHandlerInternal
AbstractUrlHandlerMapping#lookupHandler(java.lang.String, javax.servlet.http.HttpServletRequest)
获取匹配的前缀路径

→获取匹配的前缀路径↑

获取合适的handler

→获取目标handler↑

添加跨域配置

→目标handler添加跨域配置↑

准备执行handler

→准备执行handler↑

通过handler解析路径

DispatcherServlet#doDispatch
HttpRequestHandlerAdapter#handle
ResourceHttpRequestHandler#handleRequest
PathResourceResolver#getResource(java.lang.String, javax.servlet.http.HttpServletRequest, java.util.List<? extends org.springframework.core.io.Resource>)
解析文件资源
FileUrlResource#createRelative
UrlResource#createRelativeURL
new java.net.URL#URL(java.net.URL, java.lang.String)
StreamHandler#parseURL
处理资源

org.springframework.http.converter.AbstractHttpMessageConverter#write
响应内容

备注:
java.net.URLStreamHandler#parseURL解析url时,file协议的路径,会截取开头到最后一个“/”位置
file路径截取


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

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

相关文章

Android设计模式--适配器模式

至诚之道&#xff0c;可以前知 一&#xff0c;定义 适配器模式把一个类的接口变换成客户端所期待的另一种接口&#xff0c;从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 适配器模式在我们的开发中使用率极高&#xff0c;ListView&#xff0c;GridView&am…

redis运维(十八)pipeline

一 pipeline 流水线 说明&#xff1a; 这里讲解的不是jenkins的pipeline流水线这里pipeline: 管道 redis为什么要提供pipeline功能 事务和pipeline ① pipeline的理念 强调&#xff1a;单纯的pipeline跟事务没有关系redis-cli --pipe --> 使用了pipeline机制说明&a…

PPP/INS紧组合算法

前言&#xff1a;在学习紧组合之前学会GNSS/INS松组合是很有必要的&#xff0c;i2NAV团队开源的KF_GINS项目可以作为GNSS/INS松组合学习模板&#xff0c;本文章主要对武汉大学i2NAV发布的PPP/INS紧组合学习资源进行算法层面的总结&#xff0c;链接&#xff1a; 武汉大学多源智…

鸿蒙(HarmonyOS)应用开发——ArkTs学习准备

介绍 前面我们已经介绍了&#xff0c;如何安装HarmonyOS的IDE ,那么现在我们来介绍一下。HarmonyOS 开发的语言——ArkTs. ArkTS 是HarmonyOS的开发语言&#xff0c;他是typescript 的扩展&#xff0c;而typesrcipt是javascript的超集&#xff0c;如果你不太熟悉typescript语法…

Switch的使用及其注意事项

注意第五点要看清&#xff0c;case执行完后匹配没有成功&#xff0c;如过有Default&#xff0c;将会执行Default&#xff0c;如果有case在Default之后&#xff0c;而且Default没有break语句&#xff0c;那么将会继续执行case的语句&#xff0c;此时case中的常量表达式只起语句标…

Design Guidelines for 100 Gbps

文章目录 Stratix V GT Transceiver ChannelsCFP2 Host Connector Assembly and PinoutStratix V GT to CFP2 Interface Layout DesignBoard Stack Up DimensionsExample Design Channel PerformanceSimulation Results for Stratix V GT to CFP2 Connector Layout Design Desi…

面试cast:reinterpret_cast/const_cast/static_cast/dynamic_cast

目录 1. cast 2. reinterpret_cast 3. const_cast 3.1 加上const的情况 3.2 去掉const的情况 4. static_cast 4.1 基本类型之间的转换 4.2 void指针转换为任意基本类型的指针 4.3 子类和父类之间的转换 5. dynamic_cast 5.1 RTTI(Run-time Type Identification) 1.…

【AIGC重塑教育】AI大爆发的时代,未来的年轻人怎样获得机会和竞争力?

目录 AI浪潮来袭 AI与教育 AI的优势 延伸阅读 推荐语 ​作者&#xff1a;刘文勇 来源&#xff1a;IT阅读排行榜 本文摘编自《AIGC重塑教育&#xff1a;AI大模型驱动的教育变革与实践》&#xff0c;机械工业出版社出版 AI浪潮来袭 这次&#xff0c;狼真的来了。 AI正迅猛地…

NVM管理node版本

使用nvm管理node版本&#xff08;详细教程和报错解决方案&#xff09; 一、下载NVM二、选择NVM安装路径三、然后是选择node的安装位置四、查询版本号五、配置下载镜像六、使用NVM七、报错解决 nvm是一个node版本管理工具&#xff0c;通过它可以安装多种node版本并且可以快速、简…

烫伤事件屡有发生,觅光推脱责任,称是用户操作失误

提及“双十一”“直播间”等关键词&#xff0c;人们常常将其与“低价”“薅羊毛”等字眼挂钩。而在近日&#xff0c;科技美容品牌AMIRO觅光&#xff08;下称“觅光”&#xff09;却上演了一出“反向薅羊毛”的戏码&#xff0c;因线上线下渠道相差超千元的价格差饱受争议。 自横…

ubuntu22.04系统下载程序和依赖,并拷贝到指定路径下

脚本1 apt install aptitude apt-get -d install xxx #xxx是待下载的安装包 mv /var/cache/apt/archives/* /home/tuners/1apt install aptitude apt-get -d install xxx mv /var/cache/apt/archives/*.deb /home/tuners/1 xxx 为程序包名称 /home/tuners/1为保存程序包的…