目录

静态资源加载及顺序

静态目录中的软链接

 引用的案例


静态资源加载及顺序

默认Springboot将从如下位置按如下优先级(从高到低)加载jar包对应前端静态资源:
1.jar包同级static目录
2.jar包同级public目录
3.jar包同级resource目录
4.jar包/META-INF/resources

在调试模式下,Springboot将从class目录中按如下优先级(从高到低)加载对应前端静态资源
1.class目录下static目录
2.class目录下public目录
3.class目录下resource目录
4.class目录下/META-INF/resources

通过设置spring.resources.static-locations自定义Spring boot加载前端静态资源路径
spring.resources.static-locations: file:D:/public/
亦可以指定先后顺序:
spring.resources.static-locations=classpath:/static,classpath:/public,classpath:/resources,classpath:/META-INF/resource

如果指定了拦截器,该属性有可能失效
需要在拦截器ResourceHandlerRegistry中通过addLocations()指定对应路径。

如果指定@EnableWebMvc注解也会导致spring.resources.static-locations失效。如果使用@EnableWebMvc,会自动覆盖原有静态文件目录为src/main/webapp,如果要指定原静态文件目录,需重写addResourceHandlers方法

静态目录中的软链接

比如,在mesh项目中,因为使用了nginx来进行前端的web支持,所以如下制作软链接是可以访问的。当然在windows安装包环境里,还是在真实的目录放置了相应的地图瓦片资源。 

 但在vms中,前端是直接放在了springboot的 static目录中,如下,就不可以了;这个时候,就需要使用下面的软件链接方式 file:***的方式 

 

springboot动态获取配置参数 springboot动态请求路径_java

 因为我们想将路径保持与mesh中的效果一致。只能在/home/dualven/staticlink中建立一个topo目录,topo里再建立个软链接指向 /home/dualven/topodata  ;然后在application.xml指定file:/home/dualven/staticlink,这样,页面访问/topo/topodata的时候,就可以直接访问到/home/topodata下的目录资源了

springboot动态获取配置参数 springboot动态请求路径_springboot动态获取配置参数_02

效果 

springboot动态获取配置参数 springboot动态请求路径_tomcat_03

 

 引用的案例

遇到这样一个问题,tomcat中HTML页面访问的图片资源并不是和HTML在同一个文件夹下,html中访问图片资源通过相对路径访问(src="./file/img/index/20191225160445_min_2.jpg");想通过创建软连接的方式将图片资源引用到HTML所在文件夹,方便HTML页面进行相对路径访问.

在通过springboot 构建的项目中,结果发现如果直接在HTML文件夹下创建软连接,确认相对路径没错后发现图片资源一直访问不了.如果是真是文件夹则没有问题.看了springboot关于tomcat的配置也没有 allowLinking 这个配置.

解决办法 是修改 spring.resources.static-locations ,在默认值的基础上添加上需要配置的软连接资源(注意资源相对路径问题)

springboot 中 spring.resources.static-locations 默认值

# 默认值为
spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/
在后面添加上图片资源的路径:如

mypath1: /root/static/html/file/img/

spring:
  resources:
    static-locations: /META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:${mypath1}

让tomcat在默认路径找不到图片资源的情况下,去我们另外配置的资源路径下寻找.mypath1就是我创建的软连接.