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

Jetty与Spring MVC集成:如何从WAR文件中正确提供HTML文件?

问题解决方法

你的问题出在:Spring MVC的DispatcherServlet把控制器返回的/html/htmlHello.html当成了视图名去解析,但没有对应的视图处理器能处理这个路径;同时如果DispatcherServlet拦截了所有请求(比如映射配置为/*),静态HTML文件就没法被Jetty直接读取。

给你几个简单的解决办法:

方法一:配置Spring MVC静态资源映射

在你的Spring MVC注解配置类里,实现WebMvcConfigurer接口,重写静态资源映射方法,让DispatcherServlet知道哪些路径是静态资源,交给Jetty处理:

@Configuration
@EnableWebMvc
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/html/**")
                .addResourceLocations("/html/");
    }
}

配置后,所有匹配/html/**的请求都会被映射到webapp/html目录下的静态文件,控制器返回的路径就能正确找到对应的HTML。

方法二:修改控制器返回转发路径

直接在控制器方法里返回转发指令,跳过视图解析,直接请求静态资源:

@Controller
@RequestMapping("/html")
public class HtmlHelloController {
    @RequestMapping("/hello")
    public String getHtmlHello() {
        return "forward:/html/htmlHello.html";
    }
}

这种方式不用改配置,适合快速验证,但如果有大量静态资源需要处理,还是方法一更合适。

方法三:调整DispatcherServlet映射(谨慎使用)

如果你的web.xml里DispatcherServlet的映射是/*,可以改成/。这样Jetty会直接处理静态资源请求,只把动态路由请求交给Spring MVC。但这种调整可能影响现有路由逻辑,需要测试验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 00:07:32