记录一次解决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>

现在可以正常访问了!

posted @ 2021-09-26 23:40  刚刚好。  阅读(1342)  评论(0编辑  收藏  举报