更改 Spring-boot 静态 Web 资源位置?
Posted
技术标签:
【中文标题】更改 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/public
或src/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 静态 Web 资源位置?的主要内容,如果未能解决你的问题,请参考以下文章
Spring-Boot ResourceLocations 在资源/静态/css 中找不到 css 文件