解读静态资源访问static-locations和static-path-pattern

2025-02-01 04:50

本文主要是介绍解读静态资源访问static-locations和static-path-pattern,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《解读静态资源访问static-locations和static-path-pattern》本文主要介绍了SpringBoot中静态资源的配置和访问方式,包括静态资源的默认前缀、默认地址、目录结构、访...

静态资源访问static-locations和static-path-pattern

静态资源配置底层源码

	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		if (!this.resourceProperties.isAddMappings()) {
			logger.debug("Default resource handling disabled");
				return;
		}
  android      //配置访问地址为/webjars/**时,去/META-INF/resources/webjars文件夹下寻找资源
		addResourceHandler(registry, "/webjars/**", "classpath:/META-INF/resources/webjars/");
		addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(), (registration) -> {
				            
        registration.addResourceLocations(this.resourceProperties.getStaticLocations());
		if (this.servletContext != null) {
				ServletContextResource resource = new ServletContextResource(this.servletContext, SERVLET_LOCATION);
				regChina编程istration.addResourceLocations(resource);
		}
			});
		}

解读静态资源访问static-locations和static-path-pattern

静态资源默认前缀:

private String staticPathPattern = "/**";

静态资源默认地址:

prjsivate static final String[] CLASSPATH_RESOURCE_LOCATIONS = { "classpath:/META-INF/resources/",
				"classpath:/resources/", "clajssspath:/static/", "classpath:/public/" };

		/**
		 * Locations of static resources. Defaults to classpath:[/META-INF/resources/,
		 * /resources/, /static/, /public/].
		 */
private String[] staticLocations = CLASSPATH_RESOURCE_LOCATIONS;

静态资源目录

解读静态资源访问static-locations和static-path-pattern

如果每个目录下面都有相同的文件,那么访问的优先级为 META-INF>resources>static>public

静态资源访问前缀(默认无前缀)可以使用下面的yaml内容来设置

spring:
  mvc:
    static-path-pattern: /liang/**  //会导致欢迎页和favicon.ico失效

静态资源存放地址(静态文件只能存放在文件夹yuan里面)

spring:
  web:
    resources:
      static-locations: classpath:/yuan/

当配置文件如下

spring
  web:
    resources:
      static-locations: classpath:/yuan/
  mvc:
    static-path-pattern: /liang/**

解读静态资源访问static-locations和static-path-pattern

可以直接通过地址 http://localhost:8080/liang/a.png 直接进行访问,查看到想要结果

当静态访问前缀为/**时,静态资源目录下有一个a.png,controller控制层的@RequestMapping("/a.png")。

解读静态资源访问static-locations和static-path-pattern

得到结果

解读静态资源访问static-locations和static-path-pattern

结论:请求进来,先去controller看能不能处理,不能处理的所有请求又都交给静态资源处理器。静态资源找不到就报404

为什么欢迎页(index.html)有静态资源访问前缀就不能访问了

解读静态资源访问static-locations和static-path-pattern

通过 http://localhost:8080/liChina编程ang/index.html可以直接访问到界面,但是通过 http://localhost:8080/liang 或者 http://localhost:8080/ 都不能直接访问到index。

但是如果把静态资源访问前缀去除,就可以通过 http://localhost:8080/ 访问到index.html了.

这是因为底层做了处理

解读静态资源访问static-locations和static-path-pattern

实现WebMvcConfigurer接口

会把自定义配置加载到默认的配置中

@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //registry.addResourceHandler("访问的路径").addResourceLocations("资源的路径");
        registry.addResourceHandler("swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");
    }

配置文件中静态资源目录为

解读静态资源访问static-locations和static-path-pattern

解读静态资源访问static-locations和static-path-pattern

可以简单理解为:实现WebMvcConfigurer接口,可以把自己自定义的一些配置加载到系统的默认配置中

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程China编程(www.chinasem.cn)。

这篇关于解读静态资源访问static-locations和static-path-pattern的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1153285

相关文章

Java设计模式---迭代器模式(Iterator)解读

《Java设计模式---迭代器模式(Iterator)解读》:本文主要介绍Java设计模式---迭代器模式(Iterator),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录1、迭代器(Iterator)1.1、结构1.2、常用方法1.3、本质1、解耦集合与遍历逻辑2、统一

MySQL中的InnoDB单表访问过程

《MySQL中的InnoDB单表访问过程》:本文主要介绍MySQL中的InnoDB单表访问过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、访问类型【1】const【2】ref【3】ref_or_null【4】range【5】index【6】

MySQL之InnoDB存储页的独立表空间解读

《MySQL之InnoDB存储页的独立表空间解读》:本文主要介绍MySQL之InnoDB存储页的独立表空间,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、独立表空间【1】表空间大小【2】区【3】组【4】段【5】区的类型【6】XDES Entry区结构【

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决

前端如何通过nginx访问本地端口

《前端如何通过nginx访问本地端口》:本文主要介绍前端如何通过nginx访问本地端口的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、nginx安装1、下载(1)下载地址(2)系统选择(3)版本选择2、安装部署(1)解压(2)配置文件修改(3)启动(4)

MySQL主从复制与读写分离的用法解读

《MySQL主从复制与读写分离的用法解读》:本文主要介绍MySQL主从复制与读写分离的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、主从复制mysql主从复制原理实验案例二、读写分离实验案例安装并配置mycat 软件设置mycat读写分离验证mycat读

Python的端到端测试框架SeleniumBase使用解读

《Python的端到端测试框架SeleniumBase使用解读》:本文主要介绍Python的端到端测试框架SeleniumBase使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录SeleniumBase详细介绍及用法指南什么是 SeleniumBase?SeleniumBase

CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比

《CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比》CSS中的position属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布... css 中的 position 属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布局和层叠关

C++中RAII资源获取即初始化

《C++中RAII资源获取即初始化》RAII通过构造/析构自动管理资源生命周期,确保安全释放,本文就来介绍一下C++中的RAII技术及其应用,具有一定的参考价值,感兴趣的可以了解一下... 目录一、核心原理与机制二、标准库中的RAII实现三、自定义RAII类设计原则四、常见应用场景1. 内存管理2. 文件操

Nacos注册中心和配置中心的底层原理全面解读

《Nacos注册中心和配置中心的底层原理全面解读》:本文主要介绍Nacos注册中心和配置中心的底层原理的全面解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录临时实例和永久实例为什么 Nacos 要将服务实例分为临时实例和永久实例?1.x 版本和2.x版本的区别