视图和视图解析器概述

请求处理方法执行完成后,最终返回一个 ModelAndView 对象。对于那些返回 String、View 或 ModelMap 等类型的处理方法,Spring MVC 也会在内部将它们装配成一个 ModelAndView 对象,该对象包含了视图逻辑名和模型对象的信息。

Spring MVC 借助视图解析器(ViewResolver)得到最终的视图对象(View),这可能是我们常见的 JSP 视图,也可能是一个基于 FreeMarker、Velocity 模板技术的视图,还可能是 PDF、Excel、XML、JSON 等各种形式的视图。

对于最终究竟采取何种视图对象对模型数据进行渲染,处理器并不关心,处理器的工作重点聚焦在生产模型数据的工作上,从而实现 MVC 的充分解耦。

1.认识视图

视图的作用是渲染模型数据,将模型里的数据以某种形式呈现给客户。视图对象可以是常见的 JSP,还可以是 Excel 或 PDF 等形式不一的媒体形式。为了实现视图模型和具体实现技术的解耦,Spring 在 org.springframework.web.servlet 包中定义了一个高度抽象的 View 接口,该接口中定义了两个方法。

1)String getContentType():视图对应的 MIME 类型,如 text/html、Image/jpeg 等。

2)void render(Map model,HttpServletRequest request,HttpServletResponse response):将模型数据以某种 MIME 类型渲染出来。

视图对象是一个 Bean,通常情况下,视图对象由视图解析器负责实例化。由于视图 Bean 是无状态的,所以它们不会有线程安全的问题。

不同类型的视图实现技术对应不同的 View 实现类,这些视图实现类都位于 org.springframework.web.servlet.view 包中。

2.认识视图解析器

Spring MVC 为逻辑视图名的解析提供了不同的策略,可以在 Spring Web 上下文中配置一种或多种解析策略,并指定它们之间的先后顺序。每种解析策略对应一个具体的视图解析器实现类。视图解析器的工作比较单一,即将逻辑视图名解析为一个具体的视图对象。所有视图解析器都实现了 ViewResolver 接口,该接口仅有一个方法。

View resolveViewName(String viewName,Locale locale)

resolveViewName() 方法的签名清楚地向我们传达了视图解析器工作的内涵:根据逻辑视图名和本地化对象得到一个视图对象。Spring 拥有众多的视图解析器实现类,通过下图进行概括性说明。

用户可以选择一种视图解析器或混用多种视图解析器,每个视图解析器都实现了Ordered 接口并开放出一个 orderNo 属性,可以通过该属性指定解析器的优先顺序,值越小优先级越高。有些视图解析器默认为最高优先级(如 ContentNegotiatingViewResolver),而有些视图解析器默认为最低优先级(如 InternalResourceViewResoIver、XsltViewResolver 等),具体请参考 API 文档。

Spring MVC 会按照视图解析器的优先级顺序对逻辑视图名进行解析,直到解析成功并返回视图对象,否则将抛出 ServletException 异常。

原文地址:https://www.cnblogs.com/jwen1994/p/11161296.html

时间: 2024-11-05 13:42:14

视图和视图解析器概述的相关文章

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

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

Spring MVC的多视图解析器配置及与Freemarker的集成

一.从freemarker谈起 Freemarker使用模板技术进行视图的渲染.自从看了Struts标签.Freemarker.JSTL的性能对比后,我毅然决定放弃Struts标签了!效率太差…… Spring本身支持了对Freemarker的集成.只需要配置一个针对Freemarker的视图解析器即可. 二.Spring MVC视图解析器 视图解析器的工作流程大致是这样的:Controller的某个方法执行完成以后,返回一个视图(比如:listUser),视图解析器要做的工作就是找到某个对象来

DRF的解析器和渲染器

解析器 解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己想要的数据类型的过程. 本质就是对请求体中的数据进行解析. Django的解析器 我们请求进来请求体中的数据在request.body中,那也就证明,解析器会把解析好的数据放入request.body 我们在视图中可以打印request的类型,能够知道request是WSGIRequest这个类. 我们可以看下这个类的源码,我们是怎么拿到request.POST数据的 application/x-www-form-urlenc

【DRF解析器和渲染器】 &#423984;

目录 解析器 Django中的解析器 DRF中的解析器 DRF中的渲染器 原文: http://blog.gqylpy.com/gqy/294 "@ *** 解析器 解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己想要的数据类型的过程. 本质就是对请求体中的数据进行解析. Content-type:用于声明我给你传的是什么类型的数据 : application/x-ww-form-urlencoded 表单数据类型 : multipart/form-data 文件 : applic

rest framework 之解析器

一.示例 1.api/urls.py from django.urls import path, re_path from api.views import UserView, ParserView urlpatterns = [ # path('users/', UserView.as_view()), re_path('(?P<version>[v1|v2]+)/users/', UserView.as_view(), name='api_user'), path('parser/', P

lua标签解析器

lua 标签解析器 概述 一个类xml标签解析函数,将标签解析成Lua中的表结构它可以用来解析简单xml结构,可以作为RichLabel控件的字符串解析组件(其实它现在就是这么用的;-)) 原理 使用lua的模式匹配, 使用了模式串%b<>%b用来匹配对称的字符.常写为 %bxy,x和y是任意两个不同的字符. x作为匹配的开始,y作为匹配的结束.比如,%b<> 匹配以 < 开始,以 > 结束的字符串 要解析的字符串 hello world <div>hell

XML解析器

一.操作XML文档概述 1.如何操作XML文档 XML文档也是数据的一种,对数据的操作也不外乎是"增删改查".也被大家称之为"CRUD" C:Create: R:Retrieve: U:Update: D:Delete 2.XML解析技术 XML解析方式分为两种:DOM(Document Object Model)和SAX(Simple API for XML).这两种方式不是针对Java语言来解析XML的技术,而是跨语言的解析方式.例如DOM还在Javascrip

爬虫笔记(四)------关于BeautifulSoup4解析器与编码

前言:本机环境配置:ubuntu 14.10,python 2.7,BeautifulSoup4 一.解析器概述 如同前几章笔记,当我们输入: soup=BeautifulSoup(response.body) 对网页进行析取时,并未规定解析器,此时使用的是python内部默认的解析器“html.parser”. 解析器是什么呢? BeautifulSoup做的工作就是对html标签进行解释和分类,不同的解析器对相同html标签会做出不同解释. 举个官方文档上的例子: BeautifulSoup

基于BeanNameViewResolver解析器,自定义视图

概述 基于spring-mvc自定义视图,以BeanNameViewResolver作为解析器,以满足特殊需求. 本文以输出多个pdf文件的压缩文件,供前台下载的需求为例:但是不提供服务层实现. 实现 创建AbstractView的实现类 package cn.sinobest.jzpt.zfba.fzyw.xzfy.dfcl.view; import java.util.List; import java.util.Map; import javax.annotation.Resource;