SpringBoot静态资源的访问

SpringBoot静态资源

默认情况下,也就是application.properties配置文件没有做任何配置,我们只需要将静态资源放在以下几个目录中,就可以直接通过url在浏览器中访问。

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

注:请求地址中并不需要目录前缀,如果加上了反而多此一举会报 404 错误。

因为在spring.resources.static-locations配置中已经自动对其做了路径映射

  

如果这四个目录中存在相同名称的静态资源文件,那么优先访问哪个目录下面的资源啊?
静态资源的默认访问优先级:/META-INF/resources/>/resources/>/static/>/public/

注:只能按优先级访问,无法指定访问某个目录下的重名文件。(在实际开发中,一般只会创建一个目录);文件名没有冲突的话,就会去挨个扫描目录去查找要访问的静态资源文件。

 

SpringBoot关于静态资源的访问涉及到了application.properties中的两个属性

查看源码可知:

# 默认值为 /**,表示匹配所有url-pattern
# 该配置是设置静态资源匹配的url-pattern
spring.mvc.static-path-pattern=/**
# 默认值为 classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/
# 该配置是设置要指向的路径,多个使用英文逗号隔开,在前面的优先级高
spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/
此时,我们知道默认情况下静态资源为什么放在/META-INF/resources//resources//static//public/这四个目录了,还有这四个目录访问的优先级是怎么来的了。
 
 

修改静态资源映射的方法

方式一 、修改这两个属性来改变静态资源的映射,比如我们的所有静态资源都在mystatic目录中,并且我们希望访问静态资源的的url都带有/mystatic/这个目录前缀:

# 如设置为 /mystatic/* 的话只能匹配到第一层路径,是无法访问/mystatic/pages/目录下的资源;
# 应改为 /mystatic/** 表示可以匹配任意层级的路径
spring.mvc.static-path-pattern=/mystatic/**
spring.resources.static-locations=classpath:mystatic/

  配置了指定的资源目录后,默认的资源目录下的文件则无法访问了

方式二、实现WebMvcConfigurer接口,并且重写addResourceHandlers方法就行,该操作与上面的方法得到的效果是一样的

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("classpath:/aaa/");
}
}

注:上述两种方法同时配置的话,配置类会覆盖配置文件的配置。


SpringBoot访问templates目录下的html静态页面

  实际开发中,html页面不建议放在static目录下,而是放在templates目录中。 一般使用spring boot默认为我们创建的static目录来放置css、图片、js等静态资源即可。但templates目录的资源默认是受保护的,没有开放访问权限。这是因为templates文件夹,是放置模板文件的,因此需要视图解析器来解析它。所以必须通过服务器内部进行访问,也就是要走控制器 → 服务 → 视图解析器这个流程才行。

   要访问templates目录下的html页面,还需要引入下面这个模板引擎,然后才能通过Controller来进行访问。

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

注:在使用模板引擎的时候,控制器不要用@RestController,因为它返回的是json数据格式,而我们要的是html页面。

thymeleaf 模板配置:

spring:
#thymeleaf模板配置
thymeleaf:
cache: false # 这个开发配置为false,避免改了模板还要重启服务器
prefix: classpath:/templates/ #模板文件视图前缀,默认是classpath:/templates/,可不用配置
suffix: .html #模板文件视图后缀,默认是.html,可不用配置
check-template-location: true #检查模板位置,可不用配置
encoding: utf-8 #编码字符集,默认为utf-8,可不用配置
mode: HTML #模板的模式,默认为HTML,可不用配置
servlet:
content-type: text/html #模板的内容类型,默认为text/html,可不用配置

  

posted @   danielzzz  阅读(1268)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示