You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot+Thymeleaf同模板不同路由JS执行异常问题求助

问题原因及解决方案

核心原因

最大概率是HTML页面中JS脚本的引入路径使用了相对路径,而非Thymeleaf推荐的上下文绝对路径,导致不同路由下浏览器解析的JS资源路径错误,无法加载脚本。

举个例子:如果你的HTML里写的是

<script src="js/script.js"></script>

当访问/detalhes/sefaz时,浏览器会将JS路径解析为/detalhes/js/script.js;访问/detalhes/cndt时同样解析为/detalhes/js/script.js——但你的静态JS文件实际存放在src/main/resources/static/js/下,正确的访问路径应该是/js/script.js。之所以/detalhes/sefaz能正常运行,大概率是缓存或之前的测试残留导致的偶然现象,本质上路径是错误的。

解决方案

1. 修改HTML中的JS引入路径

使用Thymeleaf的@{}表达式生成基于应用上下文的绝对路径,确保无论当前路由是什么,都能正确定位到静态资源:
将原相对路径写法:

<script src="js/script.js"></script>

替换为:

<script th:src="@{/js/script.js}"></script>

@{/js/script.js}会自动根据应用上下文路径生成正确的绝对URL,比如应用上下文为根路径时生成/js/script.js,带上下文前缀时生成/[上下文前缀]/js/script.js,保证浏览器能正确请求到静态资源。

2. 验证静态资源配置(可选)

确认Spring Boot静态资源映射正常,默认情况下Spring Boot会自动映射src/main/resources/static/、src/main/resources/public/等目录下的静态资源。如果自定义了静态资源路径,需确保配置类的addResourceHandlers设置正确:

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/js/**")
                .addResourceLocations("classpath:/static/js/");
    }
}

3. 清除浏览器缓存

修改路径后,使用Ctrl+Shift+R强制刷新页面,清除之前缓存的资源,确保加载最新的页面代码。


内容的提问来源于stack exchange,提问作者Mateus de Assis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 02:57:03