我正在运行一个本地Spring Boot应用程序,该应用程序将构建为.jar文件并部署到AWS。我无法让该应用程序解析对嵌入式静态文件的引用。我了解到Spring Boot默认使用以下资源目录:
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
"classpath:/META-INF/resources/", "classpath:/resources/",
"classpath:/static/", "classpath:/public/" }
我已经相应地构建了css目录结构:
/src/main/resources/static/css/styles.css
在我的Thymeleaf模板中,我尝试按以下方式引用该文件(尝试使用斜杠和不使用斜杠):
<link th:href="@{/css/styles.css}" rel="stylesheet" />
当我在WebMvcAutoConfiguration.getResourceLocations()
中设置断点并启动应用程序时,我可以看到静态资源位置确实是Spring提供的默认值。
当我尝试直接在“ http://localhost:8080/css/styles.css”处命中文件时,该请求将通过具有根映射@GetMapping()
的默认控制器进行路由,并加载网站主页。作为测试,我暂时将映射更改为“ / home”,并且能够直接打css文件,但是在浏览器中查看页面时,样式仍然没有应用。 / p>
我尝试了许多在SO和其他地方(包括https://spring.io/blog/2013/12/19/serving-static-web-content-with-spring-boot和https://www.baeldung.com/spring-mvc-static-resources)找到的解决方案。我尝试实现自己的@Configuration
/ @EnableWebMvc
类,该类实现了WebMvcConfigurer
并覆盖了addResourceHandlers()
方法。我也尝试覆盖application-local.yml
的资源路径。我尝试了每种可能的路径组合,相对于根,相对于页面,等等,带有和不带有“ webjars”,但对我来说没有任何用处。希望在正确的方向上轻柔地轻推或猛烈踢腿。
[EDIT]我还尝试通过PathResourceResolver
进行调试,但是它唯一认可的唯一资源请求是favicon.ico。对我的CSS文件的请求从未进入PathResourceResolver
。在默认资源路径之一下请求任何资源都不应通过这里吗?