Spring MVC中的视图解析ViewResolver

原创 2010年09月17日 15:41:00

        在Spring MVC中,当Controller将请求处理结果放入到ModelAndView中以后,DispatcherServlet会根据ModelAndView选择合适的视图进行渲染。那么在Spring MVC中是如何选择合适的View呢?View对象是是如何创建的呢?答案就在ViewResolver中,ViewResolver接口定义了resolverViewName方法,根据viewName创建合适类型的View实现。

        那么,如何配置ViewResolver呢?在Spring中,ViewResolver作为Spring Bean存在,可以在Spring配置文件中进行配置,例如下面的代码,配置了jsp相关的viewResolver。

       在Spring MVC中,因为ViewResolver是使用bean来配置的,所以扩展起来非常的容易,可以根据自己的需要定制ViewResolver,然后在配置文件中进行相关的配置即可。

       ViewResolver接口声明了resolverViewName方法,这个方法的主要功能是根据ModelAndView中给定的viewName信息,再结合相关的配置,创建出合适类型的View对象。

       ViewResolver接口是在DispatcherServlet中进行调用的,当DispatcherServlet调用完Controller后,会得到一个ModelAndView对象,然后DispatcherServlet会调用render方法进行视图渲染。

        在DispatcherServlet类中,init方法中已经进行了相关的初始化,配置的ViewResolver信息都存放在viewResolvers中。在render方法中调用resolverViewName方法,在这个方法中逐一调用ViewResolver去取得View对象。

        在这里需要关于ViewResolver的选择是通过循环进行的,只选择第一个符合要求的,因此在定义ViewResolver时,需要注意定义其优先级。

        下面就来着重关注一下ViewResolver的类结构。

 ViewResolver类结构图

 

       关于View对象的创建,不同的ViewResolver的解决方法是各部相同的。如BeanNameViewResolver是根据viewName选择相应名称的bean(这里需要注意bean的scope,是否需要线程安全),而UrlBasedViewResolver则是使用反射机制,根据viewClass信息创建view对象,因此这个view不受IoC容器的管理。ContentNegotiationViewResolver中可以嵌套ViewResolver,根据不同的的请求类型选择合适的ViewResolver。

       DispatcherServlet得到View对象后,即调用View的render方法,执行真正的渲染工作。

       最后,看一下View的类结构图。

 View类结构图

       有上述的View类结构图可知,Spring已经为我们提供了一系列可用的View。同时,如果当前提供的View不能满足我们的要求时,可以通过实现View接口进行扩展。如需要根据model中的数据使用JFreeChart绘图,或者将这些数据作为文件下载时,我们可以扩展出JFreeChartView和FileDownloadView等,这样就能更灵活的将同一份数据用不同的方式展现出来。

 

 

 

 

 

 

 

 

 

 

 

 

O'Reilly的历史和理念

History & Company OverviewBy Tim OReillyIn the BeginningWeve been in business since 1978, originally...
  • jiangtao
  • jiangtao
  • 2004-04-15 19:52:00
  • 3124

SpringMVC介绍之视图解析器ViewResolver

SpringMVC视图解析器 出处 http://haohaoxuexi.iteye.com/blog/1770554 前言    在前一篇博客中讲了SpringMVC的Controller控制...
  • lisaem
  • lisaem
  • 2016-07-26 09:00:43
  • 3935

SpringMVC源码总结(十二)ViewResolver介绍

首先我们先看看ModelAndView中重要的View接口。  View接口:  Java代码   String getContentType();          /...
  • z69183787
  • z69183787
  • 2016-10-14 17:32:07
  • 852

13.SpringMVC 视图解析 - ViewResolver

基本概念所有的 MVC 框架都有一套它自己的解析视图的机制,springmvc 也不例外,它使用ViewResolver 进行视图解析,让用户在浏览器中渲染模型。Springmvc 处理视图最重要的两...
  • u012420654
  • u012420654
  • 2016-08-16 21:55:55
  • 5238

Spring MVC 常用标签、注解 view、viewResolver 解析

一、AnnotationDrivenBeanDefinitionParser     通常如果我们希望通过注解的方式来进行Spring MVC开发,我们都会在***-servlet.xml中加入标签来...
  • chuck_kui
  • chuck_kui
  • 2017-02-12 08:27:01
  • 617

第五章 SpringMVC之ViewResolver和View解析

过完年了,本来是想在年前将SpringMVC系列写完的,只是在接近年末的时候没有了一种学习心态,这两天看了一下ViewResolver源码,就想尽快将这篇博客写出,也好完结SpringMVC的系列博客...
  • wangbiao007
  • wangbiao007
  • 2016-02-18 22:51:26
  • 6366

springMVC源码分析--ViewResolver视图解析器(一)

SpringMVC用于处理视图最重要的两个接口是ViewResolver和View。ViewResolver的主要作用是把一个逻辑上的视图名称解析为一个真正的视图,SpringMVC中用于把View对...
  • qq924862077
  • qq924862077
  • 2017-01-16 18:48:39
  • 1236

谈谈我对Spring IOC与DI的理解

IOC是一种叫做“控制反转”的设计思想。1、较浅的层次——从名字上解析 “控制”就是指对 对象的创建、维护、销毁等生命周期的控制,这个过程一般是由我们的程序去主动控制的,如使用new关键字去创建一个...
  • zhangliangzi
  • zhangliangzi
  • 2016-06-01 00:23:14
  • 11699

视图定位器ViewResolver

在spring MVC中,当Controller将请求处理结果放入到ModelAndView中以后,DispatcherServlet会根据ModelAndView选择合适的视图进行渲染。那么在Spr...
  • qq_15150353
  • qq_15150353
  • 2016-10-07 16:23:31
  • 113

Spring MVC 视图解析器(ViewResolver )

我们在controller里面经常这样return一个ModelAndView: return new ModelAndView('user', 'model', model); Dispatche...
  • superdog007
  • superdog007
  • 2014-06-06 09:57:51
  • 42109
收藏助手
不良信息举报
您举报文章:Spring MVC中的视图解析ViewResolver
举报原因:
原因补充:

(最多只允许输入30个字)