我无法让Spring-boot项目提供静态内容。
我已经放在一个命名的文件夹static下src/main/resources。在其中,我有一个名为的文件夹images。当我打包应用程序并运行它时,它找不到我放在该文件夹中的图像。
static
src/main/resources
images
我试图把静态文件中public,resources并META-INF/resources但没有任何工程。
public
resources
META-INF/resources
如果我jar -tvf app.jar我可以看到文件在正确文件夹的jar中:/static/images/head.png例如,但是调用:http://localhost:8080/images/head.png,我得到的只是一个404
jar -tvf app.jar
/static/images/head.png
有什么想法为什么spring-boot没有找到这个?(我正在使用1.1.4 BTW)
超过一年后不复活,但先前的所有答案都遗漏了一些关键点:
@EnableWebMvc
org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration
org.springframework.boot.autoconfigure.web.ResourceProperties
v1.3.0.RELEASE
staticLocations
application.properties
/** * Locations of static resources. Defaults to classpath:[/META-INF/resources/, * /resources/, /static/, /public/] plus context:/ (the root of the servlet context). */ private String[] staticLocations = RESOURCE_LOCATIONS;
如前所述,请求URL将相对于这些位置进行解析。因此,src/main/resources/static/index.html当请求网址为时将投放/index.html。从Spring 4.1开始,负责解析路径的类是org.springframework.web.servlet.resource.PathResourceResolver。
src/main/resources/static/index.html
/index.html
org.springframework.web.servlet.resource.PathResourceResolver
后缀模式匹配默认是启用的,这意味着对于请求URL /index.html,Spring将寻找与对应的处理程序/index.html。如果目的是提供静态内容,则这是一个问题。要禁用该功能,请扩展WebMvcConfigurerAdapter(但不要使用@EnableWebMvc)并覆盖configurePathMatch如下所示:
URL /index.html,Spring
WebMvcConfigurerAdapter
configurePathMatch
@Override public void configurePathMatch(PathMatchConfigurer configurer) { super.configurePathMatch(configurer); configurer.setUseSuffixPatternMatch(false); }
恕我直言,在你的代码中减少错误的唯一方法是不尽可能编写代码。使用已经提供的内容,即使需要进行一些研究,回报也是值得的。