全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-18 8 分钟 ✍️ juanwangdev

Spring MVC ViewResolver视图解析器

ViewResolver 将控制器返回的逻辑视图名解析为具体的 View 对象,完成最终的页面渲染。

接口定义

Java
public interface ViewResolver {
    View resolveViewName(String viewName, Locale locale) throws Exception;
}

内置视图解析器

解析器功能
InternalResourceViewResolverJSP 视图解析
FreeMarkerViewResolverFreeMarker 模板
ThymeleafViewResolverThymeleaf 模板
ContentNegotiatingViewResolver根据内容类型选择
BeanNameViewResolver根据 Bean 名称解析

配置 JSP 视图解析器

Java
@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Bean
    public InternalResourceViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        resolver.setViewClass(InternalResourceView.class);
        return resolver;
    }
}

控制器使用

Java
@Controller
public class UserController {

    @GetMapping("/users")
    public String list(Model model) {
        model.addAttribute("users", userService.findAll());
        return "user/list"; // 解析为 /WEB-INF/views/user/list.jsp
    }
}

多视图解析器配置

Java
@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Bean
    public ViewResolver contentNegotiatingViewResolver() {
        ContentNegotiatingViewResolver resolver = new ContentNegotiatingViewResolver();
        resolver.setViewResolvers(Arrays.asList(
            jsonViewResolver(),
            jspViewResolver()
        ));
        return resolver;
    }

    @Bean
    public ViewResolver jspViewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        resolver.setOrder(2);
        return resolver;
    }
}

自定义视图解析器

Java
public class PdfViewResolver implements ViewResolver {

    @Override
    public View resolveViewName(String viewName, Locale locale) {
        if (viewName.startsWith("pdf:")) {
            return new PdfView(viewName.substring(4));
        }
        return null;
    }
}

视图解析器可通过 Order 接口设置优先级,数值越小优先级越高。

要点总结

  • ViewResolver 解析逻辑视图名为 View 对象
  • prefix 和 suffix 自动拼接完整路径
  • 支持配置多个解析器按优先级顺序解析
  • ContentNegotiatingViewResolver 支持响应多种内容格式

📝 发现内容有误?点击此处直接编辑

← 上一篇 Spring MVC MVC核心思想
下一篇 → Spring MVC 执行流程
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库