springboot项目打成jar包后无法获取static下的静态资源文件的问题分析
时间: 2023-05-08 19:58:56 浏览: 1065
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容器所直接加载所致。采用上述两种方法,均可解决这种问题。