springboot项目无法访问静态资源的问题解决

项目开发中需要做下载功能,但是后台静态资源访问不到。搞了一天才解决的。记录下来,希望大家不要入坑。

项目环境:idea + jdk11 + gradle

按照约定大于配置的原则,springboot resource文件下的静态资源,在不需任何配置的情况下都可以访问到的。 测试发现报404.觉着可能是环境差异。遂配置spring.mvc.static-path-pattern 属性,配置后进行测试,还是报404. 改成用java Bean的方式配置,还是404.

彻底蒙圈。因为是第一次使用gradle管理依赖,觉着是gradle配置的问题导致的。就创建了一个maven项目进行测试。发现静态资源可以访问,更加确定是gradle配置的问题。就在这搞了一天,毫无进展😂。 放弃、睡觉。

第二天在看项目代码。 突然发现 项目中已经实现了WebMvcConfigurationSupport接口但是没有重写addResourceHandlers方法。

突然想起了起了看过的一篇文章 WebMvcAutoConfiguration 这个注解中有一个特殊的条件。当 WebMvcConfigurationSupport 没有加载时才生效。按照上图的配置肯定就访问不到了。

遂重写 addResourceHandlers 方法 

 测试  访问成功。

折腾了一天写点总结: 当定位问题的方向出错,折腾再长的时间也是白搭。 对springboot的自动配置了解不够,定位靠猜。正确的方法应该是从源码入手。 后面复盘一下这个问题尝试从源码入手定位解决。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
SpringBoot是一款快速开发框架,它集成了Spring框架、Spring MVC、Spring Data、Spring Security等模块,极大地简化了Java Web应用的开发和部署。然而,当我们将SpringBoot项目打成jar包后,可能会遇到无法获取/static下的静态资源文件的问题。 出现这种问题的原因是jar包的文件不能像war包一样直接被Tomcat等Web容器所加载。SpringBoot应用作为jar包启动时,没有了Tomcat等容器,因此就无法访问静态资源文件了。 解决这种问题的方法有两种。 第一种方法是通过代码的方式让SpringBoot应用识别到static目录下的静态资源文件。我们可以在配置文件(application.properties or application.yml)中加入以下配置: spring.web.resources.static-locations=classpath:/static/ 这样就可以让SpringBoot应用在启动时扫描class path下的/static目录,使其中的静态资源文件得到识别和加载。 第二种方法是使用SpringBoot的嵌入式Web容器。SpringBoot内置了Tomcat、Jetty等Web容器,这些容器会在SpringBoot应用启动时自动启动,并且自动加载静态资源文件。我们只需要在代码中使用如下注解: @EnableWebMvc @Configuration public class MvcConfig extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/"); } } 上述代码片段中的@EnableWebMvc注解表示开启WebMvc配置,@Configuration表示该类是Spring的一个配置类,MvcConfig类继承自WebMvcConfigurerAdapter并重写了addResourceHandlers方法,这个方法将“/static/**”的请求映射到classpath:/static/目录下。这样,在嵌入式Web容器中启动SpringBoot应用时,静态资源文件就能被正确加载了。 总之,无法获取SpringBoot项目静态资源文件的问题,主要是由于jar包没有被Web容器所直接加载所致。采用上述两种方法,均可解决这种问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值