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

本文将通过一个示例来介绍如何开发 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-11-03 12:14:26

如何开发Spring自定义视图和视图解析器的相关文章

jvm开发笔记1—class文件解析器

作者:王智通   笔者最近对java虚拟机产生了浓厚的兴趣, 想了解下最简单的jvm是如何写出来的,于是看起了<java虚拟机规范>,这个规范如同intel开发手册一样,是每个jvm开发人员必须掌握的. 要想翻译执行java byte code, 首先得从java class文件中把Code属性解析出来才行. 在笔者看来, java的class文件结构着实比elf文件结构复杂很多,不过在复杂的结构, 只要耐心对照着手册中的结构一一解析即可, 经过几天的努力, 用c实现了一个class文件解析器

微信公众平台开发之自定义菜单.Net代码解析_实用技巧

用户自定义菜单制作时,需要用到access_token,我们直接使用前面讲解的IsExistAccess_Token()函数.我理解的微信公共平台里面菜单分为button和sub_button,即菜单和子菜单,这些菜单都有一个name的属性,类别分为click和view,click类有key属性:而view类有url属性,含有子菜单的菜单没有key属性也没有url属性.这些情况可以从下面的例子看出来. public void MyMenu() { string weixin1 = ""

Spring 视图和视图解析器简介

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

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

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

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

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

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

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

Spring MVC 中自定义视图 @Component 及 配置 多个视图解析器 Excel视图

首先我们建立一个自己的View实现View接口.要注意在类上面加上@Component的注解,因为看BeanNameViewResolver的源码知道,是直接从ioc容器里面拿的根据名字拿的视图,所以我们得把我们自己写的视图放到容器里面. HelloView.java package com.hust.springmvc.views; import java.util.Date; import java.util.Map; import javax.servlet.http.HttpServle

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集成velocity视图解析器问题

问题描述 Spring MVC集成velocity视图解析器问题 小弟最近学习搭建Spring MVC框架的web应用,工具是Myeclipse10,在配置velocity的视图解析器时遇见1奇怪问题,烦请高手解答.问题简述:项目搭建完毕启动访问url后,最初是报 找不到layout.vm这个文件而出错,在项目里面新建该文件后,后台无报错了,但是无论Action返回视图a或b,最终都会显示layout里面的内容,从而达不到页面跳转的目的.下面附上几张项目配置的图片供参考.项目文件结构:web.x