700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 静态资源访问static-locations和static-path-pattern

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

时间:2020-02-02 14:17:29

相关推荐

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

静态资源配置底层源码:

@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {if (!this.resourceProperties.isAddMappings()) {logger.debug("Default resource handling disabled");return;}//配置访问地址为/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);registration.addResourceLocations(resource);}});}

静态资源默认前缀:

private String staticPathPattern = "/**";

静态资源默认地址:

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

静态资源目录

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

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

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

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

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

当配置文件如下

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

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

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

得到结果

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

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

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

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

这是因为底层做了处理

实现WebMvcConfigurer接口,会把自定义配置加载到默认的配置中

@Configurationpublic class WebMvcConfiguration implements WebMvcConfigurer {@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {//registry.addResourceHandler("访问的路径").addResourceLocations("资源的路径");registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");}

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。