Spring MVC视图解析器

简介: Spring MVC视图解析器

在配置<mvc:annotation-driven…/>元素之后,它会为Spring MVC配置HandlerMapping、HandlerAdapter、HandlerExceptionResolver这三个特殊的Bean,它们解决了“请求URL→Controller的处理方法”的映射。

当Controller的处理方法处理完成后,该处理方法可返回String(逻辑视图名)、View(视图对象)、ModelAndView(同时包括Model与逻辑视图或View),而View对象才代表具体的视图,因此,Spring MVC必须使用ViewResolver将逻辑视图名(String)解析成实际视图(View对象)。


提示:

早期Spring MVC控制器的处理方法要求返回ModelAndView对象,这种方式显得有点过时;现在Spring MVC控制器的处理方法只要返回String(逻辑视图名),而Model只需被定义成处理方法形参即可。

ViewResolver的作用示意图如图

ViewResolver本身是一个接口,它提供了如下常用实现类。

➢ AbstractCachingViewResolver:

抽象视图解析器,负责缓存视图。很多视图都需要在使用前做好准备,它的子类视图解析器可以缓存视图。

➢ XmlViewResolver:

能接收XML配置文件的视图解析器,该XML配置文件的DTD与Spring的配置文件的dtd相同。默认的配置文件是/WEB-INF/views.xml。

➢ BeanNameViewResolver:它会直接从已有的容器中获取id为viewName的Bean作为View。

➢ ResourceBundleViewResolver

:使用ResourceBundle中的Bean定义实现ViewResolver,这个ResourceBundle由bundle的basename指定。这个bundle通常被定义在一个位于CLASSPATH中的属性文件中。

➢ UrlBasedViewResolver:

该视图解析器允许将视图名解析成URL,它不需要显式配置,只要视图名。


➢ InternalResourceViewResolver:

UrlBasedViewResolver的子类,能方便地支持Servlet和JSP视图以及JstlView和TilesView等子类,它是在实际开发中常用的视图解析器,也是Spring MVC默认的

➢ FreeMarkerViewResolver

:UrlBasedViewResolver的子类,能方便地支持FreeMarker视图。与之类似的还有

➢ ContentNegotiatingViewResolver

:它不是一个具体的视图解析器,它会根据请求的MIME类型来“动态”选择适合的视图解析器,然后将视图解析工作委托给所选择的

视图解析器负责。

ViewResolver接口及其实现类的继承关系如图所示。

下面对这些视图解析器中的代表实现类进行介绍。

UrlBasedViewResolver的功能与用法

UrlBasedViewResolver继承了AbstractCachingViewResolver基类,是ViewResolver接口的一个简单实现类。UrlBasedViewResolver使用一种拼接URL的方式来解析视图,它可通过prefix属性指定一个前缀,也可通过suffix属性指定一个后缀,然后将逻辑视图名加上指定的前缀和后缀,这样就得到了实际视图的URL。


例如,指定prefix=“/WEB-INF/content/”,suffix=“.jsp”,当控制器的处理方法返回的视图名为“error”时,UrlBasedViewResolver解析得到的视图URL为/WEB-INF/content/error.jsp。默认的prefix和suffix属性值都是空字符串。


在使用URLBasedViewResolver作为视图解析器时,它支持在逻辑视图名中使用forword:前缀或redirect:前缀,其中forword:前缀代表转发到指定的视图资源,redirect:前缀代表重定向到指定的视图资源。


在使用UrlBasedViewResolver时必须指定viewClass属性,表示解析成哪种视图,一般使用较多的是InternalResourceView,用于呈现普通的JSP视图;如果希望使用JSTL,则应该将该属性值指定为JstlView。


目录
相关文章
|
1天前
|
canal 缓存 关系型数据库
Spring Boot整合canal实现数据一致性解决方案解析-部署+实战
Spring Boot整合canal实现数据一致性解决方案解析-部署+实战
|
1天前
|
XML 人工智能 Java
Spring Bean名称生成规则(含源码解析、自定义Spring Bean名称方式)
Spring Bean名称生成规则(含源码解析、自定义Spring Bean名称方式)
|
14天前
|
XML Java 数据格式
Bean工厂探秘:解析Spring底层工厂体系BeanFactory的神奇之道
Bean工厂探秘:解析Spring底层工厂体系BeanFactory的神奇之道
20 0
Bean工厂探秘:解析Spring底层工厂体系BeanFactory的神奇之道
|
14天前
|
数据采集 前端开发 Java
数据塑造:Spring MVC中@ModelAttribute的高级数据预处理技巧
数据塑造:Spring MVC中@ModelAttribute的高级数据预处理技巧
23 3
|
14天前
|
存储 前端开发 Java
会话锦囊:揭示Spring MVC如何巧妙使用@SessionAttributes
会话锦囊:揭示Spring MVC如何巧妙使用@SessionAttributes
14 1
|
14天前
|
前端开发 Java Spring
数据之桥:深入Spring MVC中传递数据给视图的实用指南
数据之桥:深入Spring MVC中传递数据给视图的实用指南
30 3
|
14天前
|
XML Java 数据格式
从入门到精通:Spring基础注解的全面解析
从入门到精通:Spring基础注解的全面解析
31 2
从入门到精通:Spring基础注解的全面解析
|
14天前
|
Java 数据库 Spring
切面编程的艺术:Spring动态代理解析与实战
切面编程的艺术:Spring动态代理解析与实战
26 0
切面编程的艺术:Spring动态代理解析与实战
|
3月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
42 0
|
8月前
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
117 0

推荐镜像

更多