【Spring Boot】无法访问css,js等静态资源的问题

项目背景

系统环境:

  1. springboot
  2. Idea
  3. 使用springboot内嵌的服务器tomcat

问题描述

改进项目的新需求:根据业务需求,要求前端发送请求到后台,后台将服务器指定目录的资源(图片文件)压缩成zip格式的压缩包,并将该压缩包放置于项目的资源目录下,并将该文件名返回给前端。前端再直接访问springboot项目的静态资源文件,如:http://localhost:8080/static/1577876919457.zip
问题:无法访问springboot项目的静态资源
在这里插入图片描述

原理

spring boot框架里面包括了很多spring框架大家族的默认配置文件,其中的springmvc配置文件中有对静态资源的限制和拦截。如果静态文件没有放在框架默认的或者自己之后手动添加的扫描路径下,那么框架是会对这些静态资源进行拦截从而导致页面找不到相关的资源。

解决方法:配置静态资源的访问路径

规范项目结构

使用官方默认的扫描路径。毕竟框架的好处:严格按照要求搭好之后几乎所有的操作都会变得简单,不容易出错。

spring boot对静态资源的默认扫描路径是:

classpath:/static
classpath:/public
classpath:/resources
classpath:/META-INF/resources

那么我们直接将静态资源放入下列路径即可(以static为例):

  1. 写一个配置类,继承WebMvcConfigurationSupport,然后重写addResourceHandlers方法:
@Configuration
public class MyWebMvcConfigurerAdapter extends WebMvcConfigurationSupport {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry){
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
        super.addResourceHandlers(registry);
    }
}
  1. 配置方式,在application.yml文件中添加:
  #方法二:通过配置方式,实现springboot静态资源的访问
  #静态资源访问路径:用于告诉Spring Boot应该在何处查找静态资源文件,查找文件时会依赖于配置的先后顺序依次进行
  spring:
  	mvc:
    	static-path-pattern: /static/**
    #静态资源映射路径:应该以什么样的路径来访问静态资源,这表示只有静态资源的访问路径为/static/ 时才会处理(如http://localhost:8080/static/css/base.css)
    #注:如果设置为/**,那么表示任何访问都会经过静态资源路径
 	 resources:
    	static-locations: classpath:/static/

或者

#静态资源访问路径
spring.mvc.static-path-pattern=/static/**
#静态资源映射路径
spring.resources.static-locations=classpath:/static/

结果

访问:http://localhost:8080/static/资源名
本地运行项目,实现下载静态资源。

发布了115 篇原创文章 · 获赞 22 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_42956047/article/details/103795355