前言
在使用Spring Boot时,将静态资源文件都放到了resources下的static下了。前端<src=“@{js/xxx/xx.js}”>这样引用。在一般情况下,写一个controller,且访问url只有一层,访问localhost:8080/xxx 时资源访问都是正常的。但是如果url有两层,或两层以上时,如:localhost:8080/xxx/xxx 时,竟然诡异的出现了静态资源404。
这让我百思不得其解。。。
随便一提
Spring Boot版本为1.5.14.RELEAS
前端使用Thymeleaf作为模版引擎。
正文
为解决以上问题。通过其不断的googel,终于找到解决方案,遂记之。。
因为使用的是spring boot默认的静态资源加载器:WebMvcAutoConfiguration
会从
/META-INF/resources/,
/resources/,
/static/,
/public/
目录映射静态资源文件。
如果Spring Boot 提供的配置不符合我们的需求时,比如我上面的情况,就可以自定义一个静态资源目录。我们需要一个WebMvcConfigurerAdapter这个类。重写该类的addResourceHandlers方法。
/**
* 配置文件类
*/
@Configuration
public class PcbWebMvcConfigurerAdapter extends WebMvcConfigurerAdapter {
/**
* 配置静态访问资源
*
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/js/**",
"/css/**",
"/img/**",
"/fonts/**")
.addResourceLocations(
"classpath:/static/js/",
"classpath:/static/css/",
"classpath:/static/img/",
"classpath:/static/fonts/");
}
}
在页面上就需要用这样方式引用静态资源
<link rel="stylesheet" th:href="@{/css/retrieve_pwd.css}">