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
相关产品推荐
相关产品推荐

