简介
很久之前用IDEA写springboot的时候,就发现了这个恶心的操作。今天想来解决一下。
上图这样写就可以在IDEA中弹出提示信息,并且
ctrl+左键
就可以跳到相对位置
ctrl+shift+鼠标可以查看图片内容
但是运行起来就访问不了,显示找不到该资源,原因也差不多知道
原因
在springboot的官方文档中对于默认静态的文件的存放位置有明确的说明。如下:
By default Spring Boot will serve static content from a directory called /static (or /public or /resources or /META-INF/resources) in the classpath or from the root of the ServletContext
翻译后的意思就是说默认情况下,Spring Boot将在类路径中或从ServletContext的根目录中提供名为/ static(或/ public或/ resources或/ META-INF / resources)
的目录中的静态内容。也就是说默认情况下,可以将静态文件放到static,public,resources,/ META-INF / resources
四个目录下。
那么上面的路劲在springboot看来就是/static/static/img/time.jpg
或/public/static/img/time.jpg
或...也就是前面多加了一个文件夹的名字,我们去掉/static
就可以正常访问了
但是去掉的话,我在IDEA中访问就很恶心了,没有提示,且不能跳转
解决方案
spring.resources.static-locations=classpath:/
重新修改springboot提供的默认资源存放路径。
这里设计俩个资源路径问题
spring.mvc.static-path-pattern
和spring.resources.static-locations
-
spring.mvc.static-path-pattern
代表的含义是我们应该以什么样的路径来访问静态资源,换句话说,只有静态资源满足什么样的匹配条件,Spring Boot才会处理静态资源请求,以官方配置为例:
# 这表示只有静态资源的访问路径为/resources/**时,才会处理请求
spring.mvc.static-path-pattern=/resources/**,
假定采用默认的配置端口,那么只有请求地址类似于http://localhost:8080/resources/jquery.js
时,Spring Boot才会处理此请求,处理方式是将根据模式匹配后的文件名查找本地文件,那么应该在什么地方查找本地文件呢?这就是spring.resources.static-locations
的作用了。
-
spring.resources.static-locations
用于告诉Spring Boot应该在何处查找静态资源文件,这是一个列表性的配置,查找文件时会依赖于配置的先后顺序依次进行,默认的官方配置如下:
spring.resources.static-locations=(为了好看才分行的)
classpath:/static,classpath:/public,classpath:/resources,classpath:/META-INF/resources
http://localhost:8080/resources/jquery.js
就会在上述的四个路径中依次查找是否存在“jquery.js”文件,如果找到了,则返回此文件,否则返回404错误。
总结
spring.mvc.static-path-pattern
用于阐述HTTP请求地址,而spring.resources.static-locations
则用于描述静态资源的存放位置