如何在Spring 4中同时配置.html与.jsp类型的ViewResolver?
当然可以同时支持.jsp和.html作为视图!
完全没问题,你只需要在配置中添加另一个视图解析器实例,专门处理.html后缀的视图即可。Spring MVC会按照视图解析器的order优先级依次尝试解析视图名,下面是具体实现方案:
修改WebConfig配置类
在原有的JSP视图解析器基础上,新增一个处理HTML视图的解析器,并设置不同的优先级(order值越小,优先级越高):
@EnableWebMvc @ComponentScan("com.test") public class WebConfig extends WebMvcConfigurerAdapter { // 处理JSP视图的解析器,优先级更高 @Bean public ViewResolver jspViewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/pages/"); resolver.setSuffix(".jsp"); resolver.setOrder(1); // 数字越小,越先被Spring调用 return resolver; } // 处理HTML视图的解析器 @Bean public ViewResolver htmlViewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/pages/"); // 你可以根据实际HTML文件位置调整前缀 resolver.setSuffix(".html"); resolver.setOrder(2); return resolver; } }
控制器代码无需修改
你原来的控制器代码完全可以保留:
@Controller public class HelloController { @RequestMapping(value = "/hello", method = RequestMethod.GET) public String printHello(ModelMap model) { model.addAttribute("message", "Hello Spring MVC Framework!"); return "hello"; // 会匹配 /WEB-INF/pages/hello.jsp } } @Controller public class HomeController { @RequestMapping(value = "/home", method = RequestMethod.GET) public String home() { return "home"; // 会匹配 /WEB-INF/pages/home.html } }
关键注意事项
- 确保视图文件存在:要保证
/WEB-INF/pages/目录下同时存在hello.jsp和home.html文件; - 调整HTML文件位置:如果你的HTML文件是静态资源(不需要Spring渲染动态数据),可以把它们放在
src/main/resources/static目录下,此时需要修改HTML视图解析器的prefix为"/",同时确保Spring MVC的静态资源映射配置正常(Spring Boot默认已经配置好,传统Spring MVC需要在配置中添加对应的Java配置); - 优先级逻辑:Spring会先使用
order=1的JSP解析器尝试查找视图,找不到时才会调用order=2的HTML解析器,这样就实现了两种视图后缀的共存。
内容的提问来源于stack exchange,提问作者Maxim Blumental
相关产品推荐
相关产品推荐

