资讯专栏INFORMATION COLUMN

6.1、解析视图

Eastboat / 1536人阅读

摘要:接口提供在视图名和实际视图之间的映射。的一个方便的子类,支持事实上是和和它的子类,如,。你可以通过使用为所有由这个解析生成的视图指定视图类。接口的实现,解析一个基于请求文件名或者头的视图。的子类可以缓存它们解析的视图实例。

  所有的 Web 应用的 MVC 框架都提供了一种处理视图的方式。Spring 提供的视图解析器,允许你在浏览器中呈现模型的同时,不依赖任何一种特殊的视图技术。比如现成的,Spring 允许你使用 JSP、FreeMarker 模板和 XSLT 视图。关于如何集成并使用几种不同的视图,见视图技术。

  这里有两个对于 Spring 处理视图的方式很重要的接口—— ViewResolver 和 View 。接口 ViewResolver 提供在视图名和实际视图之间的映射。接口 View 对请求进行预处理(addresses the preparation of the request),并把请求递给其中一种视图技术。

使用接口 ViewResolver 解析视图

  就像“实现控制器”一节中讨论的那样,Spring Web MVC 控制器中的所有处理方法必须解析为一个逻辑视图名,显式地(比如返回一个字符串或者 View)或者隐式地(比如基于约定)。Spring 中的视图通过一个逻辑视图名来定位,被一个视图解析器解析。Spring中配置可以有好几个视图。下表列出了它们中的大部分,紧接着还有几个例子:

表 1、视图解析器
视图解析器 描述
AbstractCachingViewResolver 缓存视图的抽象视图解析器。通常,视图在使用前需要先准备好;扩展这个视图解析器要提供缓存。
XmlViewResolver ViewResolver 的实现,接受一个用 XML 写成的配置文件,使用的 DTD 和 Spring 的 XML Bean 工厂一致。缺省配置文件是/WEB-INF/views.xml
ResourceBundleViewResolver ViewResolver 的实现,使用 ResourceBundle 中的 Bean 定义,由包(bundle)基础名称指定。典型地,你在一个属性文件中定义包,放在类路径中。缺省文件名是views.properties
UrlBasedViewResolver 接口 ViewResolver 的简单实现,它直接影响逻辑视图名称到 URL 的转换,不使用显式地映射定义。This is appropriate if your logical names match the names of your view resources in a straightforward manner, without the need for arbitrary mappings.
InternalResourceViewResolver UrlBasedViewResolver 的一个方便的子类,支持 InternalResourceView(事实上是 Servlet 和 JSP)和它的子类,如 JstlView,TilesView。你可以通过使用setViewClass(..)为所有由这个解析生成的视图指定视图类。详情见 UrlBasedViewResolver 的 JavaDoc。
FreeMarkerViewResolver UrlBasedViewResolver 的一个方便的子类,支持 FreeMarkerView 和它们的自定义子类。
ContentNegotiatingViewResolver 接口 ViewResolver 的实现,解析一个基于请求文件名或者 Accept 头的视图。见“ContentNegotiatingViewResolver”.

  作为一个使用 JSP 作为视图技术的例子,你可以使用 UrlBasedViewResolver。这个视图解析器把视图名翻译为一个 URL,并把请求移交给 RequestDispatcher 用于渲染视图:


    
    
    

  当返回逻辑视图名 test 时,视图解析器把请求转发到 RequestDispatcher,然后 RequestDispatcher 发送请求到/WEB-INF/jsp/test.jsp

  当你需要在一个 Web 应用程序中合并不同的视图技术时,你可以使用 ResourceBundleViewResolver:


    
    

  ResourceBundleViewResolver 检查按基本面区分的 ResourceBundle,对每一个它要解析的视图,它都是用属性 [viewname].(class) 的值作为视图类,使用属性 [viewname].url 的值作为视图。这个例子可以在视图技术一章中找到,视图技术一章会详细描述视图技术。就像你能看到的那样,你可以指定一个父视图,所有属性文件中的视图都要从它“拓展”。用这种方法你可以指定一个缺省的视图类。

  AbstractCachingViewResolver 的子类可以缓存它们解析的视图实例。缓存为特定的视图技术提高性能。也可以通过设置 cache 属性为 false 来关闭缓存。还有,如果你必须在运行时刷新一个特定的视图(比如一个 FreeMarker 模板被改变了),你可以使用removeFromCache(String viewName, Locale loc)方法。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/66077.html

相关文章

  • Learn Spring - Spring MVC

    摘要:例如,将请求信息中的字符串格式参数转换为对应方法中的类类型入参可通过的属性注册自定义转换器。 1. 处理流程 请求提交给DispatchServlet 查找HandlerMapping 调用由HandlerAdapter封装后的Handler 返回ModelAndView到DispatcherServlet 借由ViewResolver完成逻辑视图到真实视图的转换 返回响应 2. ...

    DesGemini 评论0 收藏0
  • vue的数据驱动原理及简单实现

    摘要:监听器构造函数被监听数据属性遍历监听函数属性被监听了,现在值为监听器被监听对象构造函数所有入参监听数据更新视图实现在流程介绍中,我们需要创建一个可以订阅者的订阅器,主要负责手机订阅者,属性变化的时候执行相应的订阅者,更新函数。 1、目标实现 理解双向数据绑定原理; 实现{{}}、v-model和基本事件指令v-bind(:)、v-on(@); 新增属性的双向绑定处理; PS:实例源...

    caoym 评论0 收藏0
  • 这一次,我连 web.xml 都不要了,纯 Java 搭建 SSM 环境!

    摘要:环境要求使用纯来搭建环境,要求的版本必须在以上。即视图解析器解析文件上传等等,如果都不需要配置的话,这样就可以了。可以将一个字符串转为对象,也可以将一个对象转为字符串,实际上它的底层还是依赖于具体的库。中,默认提供了和的,分别是和。 在 Spring Boot 项目中,正常来说是不存在 XML 配置,这是因为 Spring Boot 不推荐使用 XML ,注意,并非不支持,Spring...

    liaorio 评论0 收藏0
  • SpringMVC学习笔记

    摘要:是目前最流行的一种互联网软件架构。协议,是一个无状态协议,即所有的状态都保存在服务器端。而这种转化是建立在表现层之上的,所以就是表现层状态转化。具体说,就是协议里面,四个表示操作方式的动词。 一、SpringMVC概述 Spring为展现层提供的基于MVC设计理念的优秀的Web框架,是目前最主流的MVC框架之一 Spring3.0之后全面超越Struts2,成为最优秀的MVC框架 S...

    roundstones 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<