首页 > 其他分享 >SpringMVC静态资源处理

SpringMVC静态资源处理

时间:2024-10-11 21:01:47浏览次数:7  
标签:index 处理 SpringMVC js 静态 html static asset 资源

基本使用

@Component
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/asset/**")
            .addResourceLocations("classpath:/asset/");
    }
}

只需要实现WebMvcConfigurer接口,重写其中的addResourceHandlers方法即可。

其中路径遵循Ant Match语法规则,资源位置(resourceLocations)遵循Spring Resource路径语法,内部会将字符串转成Resource实例。

简要介绍Ant Match语法

  • ?:匹配单个字符

  • *:匹配零个或者多个字符

  • ******:匹配零个或者多个目录(包括子目录)

定位静态资源逻辑

光看样例其实对于资源的定位逻辑其实很迷惑,就和nginx的反向代理一样。

定位资源取决于两个要素,一个是从请求路径获取资源的相对路径部分,另外就是配置的资源所在的目录。

获取资源相对路径规则

  • 如果没有通配符,就是请求路径,比如映射配置为/asset/doc.html,那么就是/asset/doc.html。

  • 如果存在通配符,那么就是取通配符匹配的那部分。

    举例如下

    映射配置为/asset/**,请求路径为/asset/doc.html,那么取得的值为doc.html

    映射配置为/asset/**,请求路径为/asset/js/main.js,那么取得的值为js/main.js

    映射配置为/asset/*.html,请求路径为/asset/index.html,那么取得值index.html

通配符取相对路径值可参考AntPathMatcher.extractPathWithinPattern方法

获取资源最终路径

将获取到的相对资源路径和配置的资源所在的目录结合就是最终资源位置。

使用Resource.createRelative方法获取,对于ClassPathResource来说,如果当前资源路径存在/,则拼接,如果不存在,则只使用参数部分。

Resource resource = new ClassPathResource("asset/");
// 表示类路径下的asset/doc.html
Resource relative = resource.createRelative("doc.html");

Resource resource = new ClassPathResource("asset");
// 表示类路径下的doc.html,丢弃了asset,因为后面没有/
Resource relative = resource.createRelative("doc.html");

因此对于上面示例,若请求路径为/asset/js/index.js,则定位的资源即类路径下的/asset/js/index.js

常用例子

/**
 * /asset/js/index.js
 * 最终资源: js/index.js + /static/ = /static/js/index.js
 */
registry.addResourceHandler("/asset/**").addResourceLocations("classpath:/static/");

/**
 * /asset/view/index.html
 * 最终资源: view/index.html + /static/ = /static/view/index.html
 *
 * /asset/index.html
 * 最终资源: index.html + /static/ = /static/index.html
 */
registry.addResourceHandler("/asset/**/*.html").addResourceLocations("classpath:/static/");

/**
 * 无通配符
 * 请求路径: /asset/index.html
 * 最终资源: /asset/index.html + /static/ = /static/asset/index.html
 * 多余的前导斜杠会自动去掉
 */
registry.addResourceHandler("/asset/index.html").addResourceLocations("classpath:/static/");

/**
 * 资源目录后面少写斜杠,资源目录丢弃
 * /asset/js/index.js
 * 最终资源: js/index.js = js/index.js
 * 
 * 注: 这样子即便找到了该资源,springmvc会做一个检查,检查这个资源是否在允许的目录下,这个允许的
 * 目录默认就是配的资源路径目录即/static,因此仍然会报404,资源不存在的。
 * 因此资源目录务必末尾添加斜杠
 */
registry.addResourceHandler("/asset/**").addResourceLocations("classpath:/static");

注:资源目录路径末尾务必要增加斜杠,用于暗示是目录,否则会丢掉这个目录,导致出现资源找不到现象。

Spring Boot默认配置的资源映射

在Spring Boot中,默认为配置请求路径为/**,即拦截所有路径,资源目录位置为以下几个

  • classpath:/META-INF/resources/
  • classpath:/resources/
  • classpath:/static/
  • classpath:/public/

寻找的优先级从上到下,即classpath:/META-INF/resources/优先级最高

自动配置类为WebMvcAutoConfiguration,找到addResourceHandlers方法即可。

关闭默认的资源映射配置

spring:
  web:
    resources:
      # 不要添加默认的ResourceHandler(/**等)
      add-mappings: false

底层依赖类

方便读取源码

  • HandleMapping为SimpleUrlHandlerMapping。
  • Handler为ResourceHttpRequestHandler。
  • HandlerAdapter为HttpRequestHandlerAdapter。
  • 自动配置为WebMvcConfigurationSupport类的resourceHandlerMapping方法,注册了一个SimpleUrlHandlerMapping。

标签:index,处理,SpringMVC,js,静态,html,static,asset,资源
From: https://www.cnblogs.com/wt20/p/18459314

相关文章

  • 数据预处理
    数据清理缺失值处理常见方法分为三类:数据删除,数据插补,不处理数据插补:最为常见的是数据插补。插补方法取均值/中位数/众数插补使用固定值(政府等发布的可信数值)最近邻插补(根据相近数值取平均或者时间序列预测缺失数据)回归分析(工作量大)插值法(高端,可以使用)......
  • 静态库封装之ComStr类
    ComStr.h#pragmaonce#include<string>#include<vector>usingnamespacestd;classComStr{public: //CString //============================================================================================================= /* func:CS......
  • 【开题报告】基于django+vue交通事故处理系统(论文+源码)计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着城市化进程的加速和交通工具的普及,交通事故的发生率逐年攀升,给人们的生命财产安全带来了严重威胁。传统的交通事故处理方式往往存在流......
  • 安卓APK资源混淆加密重签名工具1.8.1更新 - 新增资源防解压功能, 优化大文件处理
    安卓APK资源混淆加密重签名工具,可以加固APK文件,对APK资源文件进行加密混淆处理,主要包含DEX代码混淆加密,字符串加密,Assets文件加密,防止反编译等功能,可以有效保护APK的内部代码和资源,防止APK被解包,逆向分析等.主要特性和功能点 1.支持修改APP基本信息,包括APP......
  • 模板和静态文件
    模板和静态文件1、templates模板2、静态文件2.1、static目录2.2、引用静态文件1、templates模板"templates"目录用于存放模板文件,通常是用于动态生成页面的文件。在app01目录下创建templates文件夹,html文件均保存在templates中在urls.py中添加路径后,在views.py......
  • 免费好用的瓦片地图工具:从数据处理到三维可视化的全能解决方案
    瓦片地图技术作为地理信息系统(GIS)和三维可视化领域的一项重要技术,通过将大地图切割成若干小的瓦片,实现了高效的数据加载和流畅的交互体验。本文将深入探讨瓦片地图的原理、应用以及一款出色的瓦片地图工具——GISBox。一、瓦片地图的原理与应用瓦片地图技术通过将整个地图区......
  • openlayers处理大量Overlay渲染问题
    问题背景研发需求是提供离线地图,加载本地文件作为地图底图。后端提供了.shp、.dbf和.prj文件。由于Openlayers无法直接渲染shp数据,需要将shp数据格式转化为geojson格式,这可以在在线网站https://mapshaper.org/上实现,而.shp文件中提供了经纬和某些文字,文字注解在.dbf文件......
  • ARM Cortex-M3/M4内核架构:中断处理过程
    目录一、概述1.保存现场?什么是现场?现场包括什么?2.怎么处理异常?我们先来简单介绍下。3.又怎么恢复现场?4.异常进入流程(核心流程)二、保存现场三、恢复现场1、EXC_RETURN2、恢复现场四、异常处理优化1、末尾连锁2、延时到达3、出栈抢占五、总结一、概述中断......
  • 基于R语言机器学习遥感数据处理与模型空间预测
    随机森林作为一种集成学习方法,在处理复杂数据分析任务中特别是遥感数据分析中表现出色。通过构建大量的决策树并引入随机性,随机森林在降低模型方差和过拟合风险方面具有显著优势。在训练过程中,使用Bootstrap抽样生成不同的训练集,并在节点分裂时随机选择特征子集,这使得模型具备......
  • 【时间序列分析】时间序列的预处理——平稳性检验和纯随机性检验
    目录(一)平稳性检验平稳性的时序图检验平稳性的自相关图检验(二)纯随机性检验纯随机序列的定义白噪声序列的性质 纯随机性检验 原理:Barlett定理检验统计量(一)平稳性检验 平稳性检验是时间序列分析中的一个重要步骤,主要用于判断时间序列数据的统计特性(如均值和方差)是......