记录一次解决Springboot拦截静态资源的问题
Springboot版本:1.5.9
问题背景
在一次项目中发现,js,css等静态资源被拦截了,html可以正常访问。看下目录结构:
其中 templates存放html文件,static存放js,css文件,js和css文件被SpringMVC拦截了(404)!
解决方法
1
首先由于我们的静态资源是放在static目录下,而springboot默认会将 /** 的文件去
/static
/public
/resources
/META_INF/resources
这四个目录下寻找,这四个目录指的是 resources/static , resources/public ,resources/resources
也就是说我们的资源访问路径不能是/static/xx.js 而是直接/xx.js !
如果我们需要自定义静态资源目录的话
@Configuration
public class ImageMvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/image/**")
.addResourceLocations("classpath:/images/");
}
}
意思就是把我们的/image/** 文件 去 resources/images/ 下寻找!
或者通过配置文件:
spring.resources.static-locations=classpath:/images/ // 静态资源位置为 classpath:/images/
spring.mvc.static-path-pattern=/images/** // 路径规则为/images/**
2
添加上述配置后,发现还是不能访问静态资源,但是注意到有个
server:
context-path: /deleiver/
(2.0之后为server.servlet.context-path)
表明配置了上下文,即你所有的访问路径都会默认加上根路径
/deleiver/hello
但是加上这个配置之后,我们访问静态资源也必须要加上根路径!
因此,我之前采用的绝对路径的写法加载静态 资源是不对的。
我们可以使用thymeleaf的语法
<script th:src="@{/echarts.min.js}"></script>
现在可以正常访问了!
我有一壶酒
足以慰风尘
尽倾江海里
赠饮天下人