Spring 3.0默认多种视图和视图解析器概述

本文将通过一个示例来介绍如何开发 Spring 自定义视图和视图解析器,来显示后缀名为 SWF 的视图,并提供一个简单的注册机制,为特定后缀名的视图注册相应的视图解析器。

什么是 Spring 视图和视图解析器

Spring MVC(Model View Controller)是 Spring 中一个重要的组成部分,而 Spring 视图和视图解析器则是 Spring MVC 中的组成部分。在介绍 Spring 视图和视图解析器前,我们先了解下在 Spring MVC 框架中,一个 Web 请求所需经历的六个阶段:

请求会
首先被 Spring MVC 的前端请求分发器(Dispatcher)拦截。该拦截器是一个
Servlet, 需要在 web.xml 中配置,所有符合所配置的 URL 样式的访问请求,将都会被该拦截器拦截。Spring 提供了默认的分发器 org.springframework.web.servlet.DispatcherServlet,您可以根据需要,决定是否需要定制自己的分发器。 在接收到访问请求后,分发器会根据">开发人员在 Spring 配置文件或代码中的注解(Annotation),来
查找
合适的控制器。 分发器在查找到合适的控制器后,将请求转交给该控制器处理。 通常,控制器会调用相应服务类来处理
业务逻辑,在将请求处理后,控制器需返回处理后的结果数据模型(Model)以及下一个需要显示的视图名。 在控制器处理结束并返回模型和视图名之后,Spring 会依次调用 Spring 容器中所注册的视图解析器,来查找符合条件的视图。 在获得 Spring 视图后,Spring 会根据该视图的配置信息,显示该视图。

图 1.Spring MVC 处理流程

通过以上 Spring MVC 的介绍,我们可以发现,视图和视图解析器将出现在整个请求处理流程中的最后部分。那么到底什么是视图和视图解析器?简而言之,视图是指 Spring MVC 中的 V(View),而视图解析器的功能则是依据指定的规则来查找相应的视图。

常用视图和视图解析器简介

在开发中,视图通常就是 JSP、Velocity 等。Spring 默认提供了多种视图解析器,比如,我们可以使用最常用解析器 InternalResourceViewResolver 来查找 JSP 视图(与之相对应的视图类为 InternalResourceView)。通常,一个视图解析器只能查找一个或多个特定类型的视图,在遇到 Spring 不支持的视图或者我们要自定义视图查找规则的情况下,我们就可以通过扩展 Spring 来自定义自己所需的视图解析器。目前,视图解析器都需要实现接口 org.springframework.web.servlet.ViewResolver, 它包含方法 resolveViewName,该方法会通过视图名查找并返回 Spring 视图对象。表 1 列出了常用的 Spring 视图解析器。

表 1.Spring 常用视图解析器列表

视图解析器 描述 XmlViewResolver 接口 ViewResolver 的实现,从 XML 配置文件中查找视图实现(默认 XML 配置文件为 /WEB-INF/views.xml). ResourceBundleViewResolver 接口 ViewResolver 的实现,用于从 properties 文件中查找视图。. UrlBasedViewResolver 接口 ViewResolver 的实现,用于根据请求的 URL 路径返回相应的视图,该视图需为抽象类 AbstractUrlBasedView 的实现,它还有些子类,如 InternalResourceView 和 JstlView 等 . InternalResourceViewResolver UrlBasedViewResolver 的子类,通常用于查找 JSP(类 InternalResourceView)和 JSTL(类 JstlView,InternalResourceView 的子类)等视图。 VelocityViewResolver /FreeMarkerViewResolver UrlBasedViewResolver 的子类分别用于支持 Velocity(类 VelocityView)和 FreeMark 视图(类 FreeMarkerView)。 ContentNegotiatingViewResolver 接口 ViewResolver 的实现,用于根据请求文件的后缀名或请求的 header 中的 accept 字段查找视图。

在多数项目中,InternalResourceViewResolver 是最常用的,该解析器可以返回指定目录下指定后缀的文件,它支持 JSP 及 JSTL 等视图技术,但是用该视图解析器时,需要注意设置好正确的优先级,因为该视图解析器即使没有找到正确的文件,也会返回一个视图,而不是返回 null,这样优先级比该视图解析器低的解析器,将不会被执行。

在 Web 开发中,我们的前端显示可以是 JSP、Excel、Velocity 等,在 Spring 中,不同的前端显示技术都有其对应的 Java 视图类,正如表 1 所提到的,InternalResourceView 可以代表 JSP 视图,FreeMarkerView 代表 FreeMarker 视图。目前,Spring 支持多种技术开发的视图,包括 JSP、JSTL、Excel,Velocity 等,在多数项目中,用户并不需要自定义自己的视图,在接下来的章节,我们将介绍如何定义开发视图和视图解析器。

时间: 2024-09-22 06:55:06

Spring 3.0默认多种视图和视图解析器概述的相关文章

pyPEG 2.1.0发布 Python程序的PEG解析器

pyPEG 是一个开源快速简单的Python程序的PEG解析器.其工作原理是使用Python数据结构的一个PEG语言来解析,因此它可以用于动态解析每一个上下文的免费语言.输出一个简单的Python数据结构称为pyAST,或是XML. PEG是Parsing Expression Grammar的简写,是一种解析表达式语法,类似正则表达式上下文的语言. pyPEG 2.1.0该版本改进了忽略()函数和修复了attr()函数. 软件信息:http://fdik.org/pyPEG/ 下载地址:htt

pyPEG 2.3.0发布 Python程序的PEG解析器

pyPEG 是一个开源快速简单的Python程序的PEG解析器.其工作原理是使用Python数据结构的一个PEG语言来解析,因此它可以用于动态解析每一个上下文的免费语言.输出一个简单的Python数据结构称为pyAST,或是XML. PEG 是Parsing Expression Grammar的简写,是一种解析表达式语法,类似正则表达式上下文的语言. pyPEG 2.3.0该版本添加使用元编程的新功能,以及多个错误修正. 软件信息:http://fdik.org/pyPEG/ 下载地址:htt

springMVC4(13)视图解析器分类详解

在<springMVC4(7)模型视图方法源码综合分析>一文中,我们介绍了ModelAndView的用法,它会在控制层方法调用完毕后作为返回值返回,里面封装好了我们的业务逻辑数据和视图对象或视图名 .下一步,视图对象往往会对模型进一步渲染,再由视图解析器进一步解析并向前端发出响应.在下面,我们详细介绍视图和视图解析器的各种分类. 在View接口中,定义了一个核心方法是: void render(Map<String, ?> model, HttpServletRequest req

关于 spring 视图解析器

  1.视图解析器顺序,order order 越小,优先级越高 2.多个视图解析器,会按顺序解析视图,解析不成功会交给下一个解析器,所以最好把jsp解析器放在最后 3.多个InternalResourceViewResolver 会报404错误,原因:此处我们使用了InternalResourceViewResolver,其有一个buildView方法,该方法一定会创建一个View:所以呢View永远不为null(即使该jsp不存在):问题就是出在这:因为我们使用这个的时候默认是使用servl

Spring自定义视图和视图解析器简介及开发

Spring 视图和视图解析器简介 什么是 Spring 视图和视图解析器 Spring MVC(Model View Controller)是 Spring 中一个重要的组成部分,而 Spring 视图和视图解析器则是 Spring MVC 中的组成部分.在介绍 Spring 视图和视图解析器前,我们先了解下在 Spring MVC 框架中,一个 Web 请求所需经历 的六个阶段: 请求会首先被 Spring MVC 的前端请求分发器(Dispatcher)拦截.该拦截器是一个 Servlet

Spring 视图和视图解析器简介

什么是 Spring 视图和视图解析器? Spring MVC(Model View Controller)是 Spring 中一个重要的组成部分,而 Spring 视图和视图解析器则是 Spring MVC 中的组成部分.在介绍 Spring 视图和视图解析器前,我们先了解下在 Spring MVC 框架中,一个 Web 请求所需经历的六个阶段: 请求会首先被 Spring MVC 的前端请求分发器(Dispatcher)拦截.该拦截器是一个 Servlet, 需要在 web.xml 中配置,

Spring MVC视图解析器:Spring MVC XmlViewResolver示例

在Spring MVC中,使用XmlViewResolver基于XML文件中的视图bean来解析"视图名称".默认地,XmlViewResolver将从/WEB-INF/views.xml中加载视图bean,不过,这个位置可以通过"location"属性覆盖: <beans ...> <bean class="org.springframework.web.servlet.view.XmlViewResolver"> &l

Spring MVC视图解析器:Spring MVC ResourceBundleViewResolver示例

在Spring MVC中,使用ResourceBundleViewResolver基于".properties"文件中的视图bean来解析"视图名称". 默认地,ResourceBundleViewResolver将从位于项目class路径根目录下的文件views.properties中加载视图bean,不过,这个位置可以通过"basename"属性覆盖: 1 2 3 4 5 <beans ...>          <bean

如何开发Spring自定义视图和视图解析器

本文将通过一个示例来介绍如何开发 Spring 自定义视图和视图解析器,来显示后缀名为 SWF 的视图,并提供一个简单的注册机制,为特定后缀名的视图注册相应的视图解析器. 什么是 Spring 视图和视图解析器 Spring MVC(Model View Controller)是 Spring 中一个重要的组成部分,而 Spring 视图和视图解析器则是 Spring MVC 中的组成部分.在介绍 Spring 视图和视图解析器前,我们先了解下在 Spring MVC 框架中,一个 Web 请求