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

Spring Boot中DispatcherServlet返回静态内容时转发至错误URL的问题

Spring Boot多段路径请求转发静态资源404问题解析与解决

问题原因

当Controller返回"page.html"这类相对路径的视图名时,DispatcherServlet会根据当前请求的URL层级拼接转发路径:

  • 访问/a/b时,请求路径的层级根是/a/(去掉最后一段路径后的部分),所以会把视图名拼接到该路径后,生成/a/page.html的查找路径,但你的静态资源page.html实际在根路径/page.html(对应/resources/static/目录),因此出现404。
  • 访问/a时,请求路径的层级根是/,拼接后得到/page.html,刚好匹配静态资源位置,所以能正常访问。

解决方法

方法一:返回绝对路径视图名

直接在返回的视图名前加斜杠/,强制DispatcherServlet从根路径查找静态资源,不受当前请求路径影响。修改后的代码:

@Controller
public class HomeController {
    @GetMapping("/a/b")
    public String ab(){
        System.out.println("Hello");
        return "/page.html";
    }
}

方法二:统一配置视图解析器前缀

如果有大量页面需要处理,可以通过配置视图解析器,给所有返回的视图名自动添加根路径前缀。创建Web配置类:

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        // 为视图名添加根路径前缀,后缀留空(因为我们直接返回完整的.html文件名)
        registry.jsp().prefix("/").suffix("");
    }
}

配置后,返回"page.html"就会自动解析为"/page.html",同样能正确找到静态资源。

不需要修改DispatcherServlet的核心转发逻辑,这是Spring MVC默认的视图路径解析规则,通过调整视图名格式或配置视图解析器就能轻松解决问题。

内容的提问来源于stack exchange,提问作者Kudor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 09:33:13