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等,这样就能更灵活的将同一份数据用不同的方式展现出来。

 

 

 

 

 

 

 

 

 

 

 

 

Spring MVC 视图解析器(ViewResolver )

我们在controller里面经常这样return一个ModelAndView: return new ModelAndView('user', 'model', model); Dispatche...
  • superdog007
  • superdog007
  • 2014年06月06日 09:57
  • 40901

SpringMVC介绍之视图解析器ViewResolver

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

ViewResolver

当我们对SpringMVC控制的资源发起请求时,这些请求都会被SpringMVC的DispatcherServlet处理,接着Spring会分析看哪一个HandlerMapping定义的所有请求映射中...
  • qq_15150353
  • qq_15150353
  • 2016年10月02日 15:16
  • 155

第五章 SpringMVC之ViewResolver和View解析

配置文件springController.xml中和ViewResolve有关的部分           [html] view plain copy     bean...
  • jishuizhipan
  • jishuizhipan
  • 2017年11月18日 22:25
  • 25

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

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

第五章 SpringMVC之ViewResolver和View解析

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

springmvc与apache tiles整合demo

  • 2017年11月30日 13:45
  • 32KB
  • 下载

SpringMVC源码 View,ViewResolver

一、概念理解     View ---View接口表示一个响应给用户的视图,例如jsp文件,pdf文件,html文件等,它的定义如下 public interface View...
  • bobo_93
  • bobo_93
  • 2016年06月15日 15:54
  • 356

spring学习笔记:配置视图解析器ViewResolver

我们在controller里面经常这样return一个ModelAndView: return new ModelAndView('user', 'model', model); Dispatc...
  • cq1982
  • cq1982
  • 2015年03月06日 16:51
  • 766

Spring MVC 4之ViewResolver视图解析器

所有的We MVC框架都有一套它自己的解析视图的机制,Spring MVC也不例外,它使用ViewResolver进行视图解析,让用户在浏览器中渲染模型。ViewResolver是一种开箱即用的技术,...
  • shehun1
  • shehun1
  • 2015年02月28日 13:53
  • 18054
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spring MVC中的视图解析ViewResolver
举报原因:
原因补充:

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