其他分享
首页 > 其他分享> > SpringBoot--静态资源映射处理

SpringBoot--静态资源映射处理

作者:互联网

web开发中,静态资源的访问是必不可少的,如图片、js、css等资源的访问

SpringBoot对静态资源访问提供了很好的支持,基本使用默认配置就能满足开发需求

(嵌入式servlet容器)先决知识

  1. request.getSession().getServletContext().getRealPath("/"),这个很重要,将其称为 docBase,即 “文档基目录”
  2. 在单模块项目中,如果不存在src/main/webapp目录,则 docBase 被设置为C盘下临时的随机目录,例如 C:\Users\Administrator\AppData\Local\Temp\tomcat-docbase.2872246570823772896.8080\
  3. 在多模块项目中,要留意jvm启动路径。无论该启动路径是位于父模块的路径下还是子模块的,如果jvm启动路径下不存在 src/main/webapp 目录,则docBase被设置为C盘下临时的随机目录

综上,如果想要依照传统方式通过“文档基目录”去定位文档资源(htmlcssjs),则要确保存在 src/main/webapp 目录,即 docBase 不会被设置为随机目录;否则,建议直接设置 SpringBoot 将其定位至classpath下的资源(即src/main/resource目录下的资源):

SpringBoot项目中classpath指向:

1、用maven构建(build)项目时,默认的classpath指向target/classes/

2、用maven打包(package)项目时,默认的classpath指向war内部的WEB-INF/classes/

获取SpringBoot项目默认的classpath

String classpath = ResourceUtils.getURL("classpath:").getPath();

具体配置如下:

一、默认静态资源映射(不存在 @EnableWebMVC

SpringBoot对静态资源映射提供了默认配置

  1. SpringBoot @EnableAutoConfiguration 会启用自动配置类 WebMvcAutoConfiguration,该类配置了一些默认的静态资源映射

    • SpringBoot默认将localhost:8080/**所有访问依次映射到以下目录:

      目录 优先级
      classpath:/META-INF/resources/ 最高
      classpath:/resources/ 其次
      classpath:/static/ 第三
      classpath:/public/ 最低
    • 自动映射 localhost:8080/webjars/** 为以下路径

      • classpath:/META-INF/resources/webjars/
  2. 此时,我们不需要多做什么,只要将静态资源放入 src/main/resources 目录下的 resourcesstaticpublic 文件夹下,即可通过 url 定位相关资源,例如 localhost:8080/index.html 可定位至 src/main/resources/static/index.html

  3. 注意:如果编写了以下的自定义配置,则以上默认配置将被取消。更确切的说,一旦自定义的配置不为空,则默认配置将不被采用。

如:在resources目录下新建publicresourcesstatic三个目录,并分别放入a.jpgb.jpgc.jpg图片

浏览器分别访问:

http://localhost:8080/a.jpg
http://localhost:8080/b.jpg
http://localhost:8080/c.jpg

均能正常访问相应的图片资源。那么说明,SpringBoot默认会挨个从publicresourcesstatic里面找是否存在相应的资源,如果有则直接返回

二、自定义静态资源映射(存在 @EnableWebMVC)

在实际开发中,可能需要自定义静态资源访问路径,那么可以继承WebMvcConfigurerAdapter来实现

如果使用了 @EnableWebMvc,则自动配置类 WebMvcAutoConfiguration 会失效,因此默认映射路径 /static, /public, META-INF/resources, /resources 都将失效

重启项目,访问:http://localhost:8080/static/c.jpg 能正常访问static目录下的c.jpg图片资源

application.properties中添加配置:

spring.mvc.static-path-pattern=/static/**

重启项目,访问:http://localhost:8080/static/c.jpg同样能正常访问static目录下的c.jpg图片资源

注意:通过spring.mvc.static-path-pattern这种方式配置,会使SpringBoot的默认配置失效,也就是说,/public/resources等默认配置不能使用

配置中配置了静态模式为/static/,就只能通过/static/来访问

参考博客:https://www.cnblogs.com/magicalSam/p/7189476.html

标签:SpringBoot,映射,--,classpath,默认,public,static,目录,resources
来源: https://www.cnblogs.com/cxy-lxl/p/16609208.html