• u  概述
  • u  常见视图解析器
  • u  UrlBasedViewResolver
  • u  InternalResourceViewResolver
  • u  视图解析器链
  • u  说明
  • 1      概述

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

视图View:是用于处理视图,然后返回给客户端

Spring 默认提供了多种视图解析器,比如,我们可以使用最常用解析器InternalResourceViewResolver 来查找JSP 视图(与之相对应的视图类为InternalResourceView)。通常,一个视图解析器只能查找一个或多个特定类型的视图,在遇到Spring 不支持的视图或者我们要自定义视图查找规则的情况下,我们就可以通过扩展Spring 来自定义自己所需的视图解析器。

2      常见视图解析器

1:XmlViewResolver:接口ViewResolver的实现,从XML配置文件中查找视图实现(默认XML 配置文件为/WEB-INF/views.xml)

2:ResourceBundleViewResolver:接口ViewResolver的实现,用于从properties 文件中查找视图

3:接口ViewResolver的实现,用于根据请求的URL路径返回相应的视图,该视图需UrlBasedViewResolver为抽象类AbstractUrlBasedView的实现,它还有些子类,如InternalResourceView和JstlView 等

4:InternalResourceViewResolver:UrlBasedViewResolver的子类,通常用于查找JSP和JSTL等视图

5:VelocityViewResolver /FreeMarkerViewResolver:UrlBasedViewResolver的子类分别用于支持Velocity(类VelocityView)和FreeMark视图(类FreeMarkerView)

6:ContentNegotiatingViewResolver:接口ViewResolver的实现,用于根据请求文件的后缀名或请求的header中的accept字段查找视图

7:BeanNameViewResolver:在spring容器内查找实现了View接口的Bean,设置Bean的名称为逻辑视图名称

 InternalResourceViewResolver是实际开发中最常用的。

但在使用它的时候,通常要把它配置到最后一个,因为该视图解析器即使没有找到正确的文件,也会返回一个视图,而不是返回null,这样优先级比该视图解析器低的解析器,将不会被执行。

3      UrlBasedViewResolver

基本功能

UrlBasedViewResolver是对ViewResolver的一种简单实现,而且继承了AbstractCachingViewResolver,主要提供一种拼接URL的方式来解析视图,它可以通过prefix属性指定一个前缀,通过suffix属性指定一个后缀,然后把返回的逻辑视图名称加上指定的前缀和后缀就是视图的URL了。

AbstractCachingViewResolver介绍:

这是一个抽象类,它会对它解析过的视图实现缓存的功能,这样可以把解析视图的性能问题降到最低。

URL在客户端跳转的配置,也就是redirect

可以在返回的视图名称中使用redirect:前缀,这样就可以支持在客户端的跳转,如当返回的视图名称是”redirect:login”的时候,URLBasedViewResolver发现返回的视图名称包含”redirect:”前缀,于是把返回的视图名称前缀”redirect:”去掉,后面的按照上面讲的方式来进行处理

同理可以使用forward:前缀来指定是forward跳转

使用UrlBasedViewResolver的时候必须指定属性viewClass,表示解析成哪种视图,一般使用较多的就是InternalResourceView,利用它来展现jsp,但是当我们使用JSTL的时候我们必须使用JstlView。

4      InternalResourceViewResolver

这个是最常用的,基本功能是:

它是URLBasedViewResolver的子类,所以URLBasedViewResolver支持的特性它都支持。它会把返回的视图名称都解析为InternalResourceView对象,InternalResourceView会把Controller处理器方法返回的模型属性都存放到对应的request属性中,然后通过RequestDispatcher在服务器端把请求forword重定向到目标URL。

示例:

<bean id="defaultViewResolver"

class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>

<property name="contentType" value="text/html"/>

<property name="prefix" value="/WEB-INF/jsp/"/>

<property name="suffix" value=".jsp"/>

</bean>

5      视图解析器链

概述

在Spring Web MVC中可以同时定义多个视图解析器,它们会组成一个视图解析器链。当Controller处理器方法返回一个逻辑视图名称后,视图解析器链将根据其中ViewResolver的优先级来进行处理。

通过order属性来指定顺序

由于所有的ViewResolver都实现了Ordered接口,因此可以通过order属性来指定顺序的,默认都是最大值。order属性是Integer类型,order越小,优先级越高。

视图解析器链的执行

第一个进行解析的将是ViewResolver链中order值最小的那个,如果一个视图解析器在进行视图解析后返回的View对象是null的话就表示该视图解析器不能解析该视图,继续向下;如果返回不会null,就结束;当定义的所有视图解析器都不能解析该视图的时候,就会抛出一个异常。

6      说明

  • 这里只是讲述了实际开发中最常用的知识
  • 对于每种视图解析器的使用和配置,这里不再详解了,用到了再查吧
  • 对于自定义视图解析器,实际使用也不多,这里也不讲了
  • 对于多个视图解析器如何匹配指定,也就是视图的内容协商部分,将会在后面讲Ajax支持的时候再讲,这里就不啰嗦了。

07springMVC视图解析器的更多相关文章

  1. SpringMVC视图解析器

    SpringMVC视图解析器 前言 在前一篇博客中讲了SpringMVC的Controller控制器,在这篇博客中将接着介绍一下SpringMVC视 图解析器.当我们对SpringMVC控制的资源发起 ...

  2. 学习SpringMVC——说说视图解析器

    各位前排的,后排的,都不要走,咱趁热打铁,就这一股劲我们今天来说说spring mvc的视图解析器(不要抢,都有位子~~~) 相信大家在昨天那篇如何获取请求参数篇中都已经领略到了spring mvc注 ...

  3. SpringMVC入门案例及请求流程图(关于处理器或视图解析器或处理器映射器等的初步配置)

    SpringMVC简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 Spring结构图 Spr ...

  4. Spring Web MVC 多viewResolver视图解析器解决方案

    viewResolver的定义如下: public interface ViewResolver { View resolveViewName(String viewName, Locale loca ...

  5. Spring MVC视图解析器

    Spring MVC提供的视图解析器使用ViewResolver进行视图解析,实现浏览器中渲染模型.ViewResolver能够解析JSP.Velocity模板.FreeMarker模板和XSLT等多 ...

  6. SpringMVC 视图和视图解析器&表单标签

    视图和视图解析器 请求处理方法执行完成后,最终返回一个 ModelAndView 对象.对于那些返回 String,View 或 ModeMap 等类型的处理方法,Spring MVC 也会在内部将它 ...

  7. Spring MVC之视图解析器和URL-Pattern的配置方案

    上期讲解了第一入门案例之后接下来了解一下视图解析器与URL-Pattern的配置方案 先来说视图解析器,在上次博客文章中我们完成了入门案例,接下来我们就在上一个例子中完善一下体出视图解析器 <? ...

  8. SpringMVC视图解析器(转)

    前言 在前一篇博客中讲了SpringMVC的Controller控制器,在这篇博客中将接着介绍一下SpringMVC视图解析器.当我们对SpringMVC控制的资源发起请求时,这些请求都会被Sprin ...

  9. 【SpringMVC】SpringMVC系列10之视图与视图解析器

    10.视图与视图解析器 10.1.概述     请求处理方法执行完成后,最终返回一个 ModelAndView处理方法,Spring MVC 也会在内部将它们装配成一个ModelAndView 对象, ...

随机推荐

  1. spring拦截器和注解处理日志操作

    整体思想:通过拦截器拦截所有的请求,处理含有自定义注解的方法,通过request得到需要的参数. 拦截器代码: package com.zktx.platform.log2; import java. ...

  2. 洛谷 P3128 [ USACO15DEC ] 最大流Max Flow —— 树上差分

    题目:https://www.luogu.org/problemnew/show/P3128 倍增求 lca 也写错了活该第一次惨WA. 代码如下: #include<iostream> ...

  3. Unity中内嵌网页插件UniWebView

    一.常见Unity中内嵌网页实现方式: 1.UnityWebCore只支持windows 2.Unity-Webview支持Android,IOS 3.UniWebView支持mac os,Andro ...

  4. Asp.net MVC4 Step by Step (3)-数据验证

    ASP.NET MVC把数据验证集成到了请求处理过程中,控制器操作可以通过查询ModelState 来检查请求是否有效, 下面判断了ModelState的有效性后进行“保存或返回”操作.   [Htt ...

  5. CSS的常用属性(二)

    盒子模型之边框 border-(top/bottom/left/right)-style: solid 边框的风格 如(solid 实线,dotted 点线,dashed 虚线) border-top ...

  6. Django学习案例一(blog):五. 开发主页(博客列表展示)

    主页是一个“博客列表”页.博客要按发布时间的倒序来排列,每个博客都要包含标题.作者.分类.发布时间的显示(年-月-日 时:分)及节选的正文内容(前 100 个字).点击单独的博客可以进入其详情页. 1 ...

  7. Emmet(Zen Coding)语法规则简介

    ———Emmet(Zen Coding)语法规则简介——— [Zen Coding可谓快速开发HTML和CSS的利器,主要采用仿css类选择器方式编写代码,以下是该利器的基本语法规则和代码示例] 基础 ...

  8. win2008系统日志不断出现【审核失败】

    win2008系统日志不断出现[审核失败] [现象] 今天查看windows日志,在  -安全-  发现不断有消息刷出,显示  -审核失败-  事件ID为4624 的记录  每分钟大概刷新8条消息(如 ...

  9. dubbo之直连提供者

    在开发及测试环境下,经常需要绕过注册中心,只测试指定服务提供者,这时候可能需要点对点直连,点对点直联方式,将以服务接口为单位,忽略注册中心的提供者列表,A 接口配置点对点,不影响 B 接口从注册中心获 ...

  10. Python+selenium第一个自动化脚本

    第一个自动化脚本(用Python写的) from selenium import webdriver  #从selenium导入webdriber driver=webdriber.Firefox() ...