使用Thymeleaf在Spring Boot中加载静态资源

时间:2017-03-06 21:31:06

标签: java spring spring-boot thymeleaf

我想使用thymeleaf创建页面。但我对静态文件有一些问题。我调查过类似问题的问题(123),但这对我没有帮助。

我在应用程序中使用Spring Boot框架。 我的文件看起来像: enter image description here

的test.html

<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <script src="js/test.js" th:src="@{/test.js}"/>
</head>
<body>
<button onclick="testFunction('test value')">Button</button>
</body>
</html>

test.js

function testFunction(test) {
    console.log(test);
}

配置类

@Configuration
@EnableWebMvc
public class WebMvcConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**").addResourceLocations("classpath:/static/js/");
        super.addResourceHandlers(registry);
    }
}

问题,当我加载test.html文件时未加载javascript。

@GetMapping(value = "web/test")
public String getTestHtmlPage() {
    return "test";
}

enter image description here

/api/v1application.properties => server.servlet-path=/api/v1

中的配置

我做错了什么?你能救我吗?

全部谢谢!

1 个答案:

答案 0 :(得分:4)

为了更好地理解registry.addResourceHandler("/**").addResourceLocations("classpath:/static/js/");

我写了一篇更全面的answer here来讨论无效的资源位置映射。它没有收到任何赞成票,所以我希望它并不可怕。 : - )

简而言之,通过映射classpath:/static/js/,然后访问/js/test.js的方式,您告诉Spring查看/static/js/js/test.js

您可能想要的是classpath:/static/。在这种情况下,当您尝试访问/js/test.js时,它会在/static/js/test.js中查找该文件。

至于Thymeleaf,我从未使用它,但文档表明您应该使用th:src而不是th:href加载脚本。 th:href似乎仅适用于HTML内容。