Spring Boot中静态资源等应该放在啥位置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot中静态资源等应该放在啥位置相关的知识,希望对你有一定的参考价值。

参考技术A 在application.properties配置文件中加入: web.upload-path=D:/temp/study13/ spring.mvc.static-path-pattern=/** spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,\ classpath:/static/,classpath:

更改 Spring-boot 静态 Web 资源位置?

【中文标题】更改 Spring-boot 静态 Web 资源位置?【英文标题】:Change Spring-boot static web resources location? 【发布时间】:2014-04-20 16:34:31 【问题描述】:

基于本教程:

http://spring.io/guides/gs/serving-web-content/

我可以使用 thymeleaf 来提供该位置的视图

/src/main/resources/templates/

但是,我必须将静态网页内容(css、js)放在另一个位置:

/src/main/webapp/resources

并像这样链接 hello.html 中的资源:

<link href="resources/hello.css" />
<script src="resources/hello.js"></script>

目录结构为:

└── src
    └── main
        └── java
            └── hello.java
        └──resources
            └──templates
               └──hello.html
        └──webapp
            └──resources
               └──hello.js
               └──hello.css

问题是当我运行网络服务器时,静态文件的链接是有效的。但是如果我在离线模式下打开 html 文件,链接就会断开。

我可以将静态资源从

/src/main/webapp/resources

到:

/src/main/resources/templates/resources

新的目录结构如下:

└── src
    └── main
        └── java
            └── hello.java
        └──resources
            └──templates
               └──hello.html
               └──resources
                  └──hello.js
                  └──hello.css

我试过了,还是不行。

【问题讨论】:

【参考方案1】:

试试src/main/resources/static(或src/main/resources/publicsrc/main/resources/resources)。所有这些都是由 Spring Boot 自动配置注册的。

【讨论】:

非常感谢 :) 尝试将 js 和 cs 放入 src/main/resources/resources 时,链接将是 http://localhost:8080/js html 文件位于src/main/resources/templates,但静态内容位于src/main/resources/resources/js,运行Web 服务器时静态文件的链接为http://localhost:8080/js/。如果 html 链接到 js/myfile.js ,则在 web 服务器运行时有效。但它在离线模式下坏了。如何使链接在两种模式下都有效? 也许使用th:href="@/js/foo.js"href="../resources/js/foo.js"? Thymeleaf 用户必须一直这样做,所以我确定它在文档中。 Fly 911 先生,您能否发布一下您使用什么 th:href 和 href 来解决此问题? @Tito 【参考方案2】:

在您的上下文中定义映射,如下所示 -

<mvc:resources mapping="/templates/**"
     location="classpath:/templates/" />

这将路由所有访问 /template/ url 的内容以搜索 src/main/resources/templates/ 文件夹下的内容。

如果您需要调整 url/前缀 - 相应地调整映射。

【讨论】:

我不认为 OP 正在寻找 Xml 解决方案,而且无论如何这都无法解决,顺便说一句,因为它是一个静态资源位置,问题是关于 Thymeleaf 模板。 我收回了(这与百里香无关)。 @Avnish 谢谢。但我使用的是 gradle,而不是 maven。

以上是关于Spring Boot中静态资源等应该放在啥位置的主要内容,如果未能解决你的问题,请参考以下文章

我应该将我的 XML bean 放在 Spring Boot 应用程序中的啥位置?

Spring Boot 的静态资源处理

更改 Spring-boot 静态 Web 资源位置?

基于sprig boot构建web前端页面采用啥技术实现

在 spring-boot 项目中将 CSS 等静态文件放在哪里?

我应该将jsp文件放在spring-boot项目中的位置