文档章节

Spring mvc ViewResolver视图解析器实现机制

轨迹_
 轨迹_
发布于 06/23 14:45
字数 496
阅读 21
收藏 5
点赞 0
评论 0

概要

我们在controller里面经常这样return一个ModelAndView。

return new ModelAndView("userList", "users", userList);

DispatcherServlet 靠 ViewResolver 把 userList 解析为 /WEB-INF/jsp/userList.jsp

常用的ViewResolver:InternalResourceViewResolver

ViewResolver配置

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/jsp" />
    <property name="suffix" value=".jsp" />
</bean>

ViewResolver 初始化

继续上一篇Spring mvc DispatchServlet 实现机制 初始化DispatchServlet的时候,执行了初始化ViewResolver操作。

  1. 判断 detectAllViewResolvers 是否为true,如果为true,则加载当前系统中所有实现了ViewResolver接口的bean。
  2. 如果为false,则加载bean名称为“viewResolver”的ViewResolver实现类。
  3. 如果还没有找到ViewResolver,则加载SpvingMVC 配置文件中,默认配置的ViewResolver。

detectAllViewResolvers 设置

detectAllHandlerMappings 默认为true,如果只想加载自己指定的HandlerMapping,请使用下面的方式指定

如果这样指定,则Spring MVC 只会加载这个ViewResolver,而不会加载配置的其它的ViewResolver。

解析视图跳转页面

当处理完成Controller的逻辑后,需要给请求用户一个响应反馈,一般都是返回一个响应的一个页面。
DispatcherServlet执行完Controller的逻辑后会调用render() 方法进行处理视图的跳转工作。

resolveViewName() 方法

查找合适的ViewResolver来获取View。

然后调用AbstractCachingViewResolver.java的resolveViewName() 方法

  1. 首先判断缓存中是否存在View,如果不存在则调用 createView() 方法创建View
  2. 如果有则从缓存中获取View

createView() 方法

loadView() 方法

UrlBasedViewResolver.java

buildView() 方法

在这里我们可以看到,填充View对象中的Url属性时,自动加上配置中ViewResolver的前缀和后缀,拼装成一个完整的Url串。

renderMergedOutputModel() 处理页面跳转

  1. exposeModelAsRequestAttributes() 把ModelAndView中存放的对象,添加到request中
  2. 根据响应的资源获取Servlet中的RequestDispatcher对象
  3. 调用RequestDispatcher的 include 或forward 方法进行响应结果。

© 著作权归作者所有

共有 人打赏支持
轨迹_
粉丝 33
博文 29
码字总数 46357
作品 1
海淀
1:spring mvc 概述

什么是mvc 什么是spring mvc Spring MVC 是一种基于 Java 的实现了 Web MVC 设计模式的请求驱动类型的轻量级 Web 框架, 即使用了MVC 架构模式的思想,将 web 层进行职责解耦, 基于请求驱动...

小杰java
2017/10/18
0
0
Spring MVC学习笔记(六)

所有的MVC框架都为web应用提供定位views。Spring提供view解析器,不限定具体的view技术,将models渲染到浏览器。 有两个重要的接口ViewResolver和View。ViewResolver提供view名称与实际views...

第五郎
2014/03/26
0
0
springmvc学习笔记(1)-框架原理和入门配置

springmvc学习笔记(1)-框架原理和入门配置 标签: springmvc [TOC] 本文主要介绍springmvc的框架原理,并通过一个入门程序展示环境搭建,配置以及部署调试。 springmvc是spring框架的一个模块...

brianway
2016/03/08
271
0
SpringMVC ------自定义视图

一、视图和视图解析器 -- 请求处理方法执行完成后,最终返回一个 ModelAndView • 对象。对于那些返回 String,View 或 ModeMap 等类型的 处 理方法,Spring MVC 也会在内部将它们装配成一个...

Rickxue
2015/12/17
111
0
第二章 Spring MVC入门

2.1、Spring Web MVC是什么 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是...

亮liang
2015/03/20
0
0
【原创】遨游springmvc之原理篇

1.Springmvc是什么 spring web mvc是一种基于java实现的请求驱动(请求-响应模型)的web层轻量级框架,spring web mvc采用了MVC(模型-视图-控制器)框架设计,将web层进行职责解耦,围绕核心处理...

开源中国首席脑科主任
2016/07/23
294
0
Spring MVC原理及配置详解

【spring】Spring MVC原理及配置 1.Spring MVC概述: Spring MVC是Spring提供的一个强大而灵活的web框架。借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得控制器的开发和测试更加简...

qq58edf1d989a2d
06/26
0
0
第二章:springmvc入门

2.1、Spring Web MVC是什么 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是...

xiejunbo
2014/12/16
0
0
springmvc框架

1、springmvc简介 1.1、mvc架构 MVC 是一种著名的设计模式,特别是在 Web 应用程序领域。模式全都是关于将包含业务数据的模块与显示模块的视图解耦的。这是怎样发生的?视图(例如,JSP 页面...

赵越西
2016/12/11
37
0
二 理解DispatcherServlet

要理解DispatcherServlet,首先看一下他的作用,先摘一段开涛的原话: DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,而且负责职责的分派,而且与Spring Io...

Tunie
2014/11/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Java 之 枚举

Java 中声明的枚举类,均是 java.lang.Enum 类的子类,Enun 类中的常用方法有: name() 返回枚举对象名称 ordinal() 返回枚举对象下标 valueOf(Class enumType, String name) 转换枚举对象 ...

绝世武神
11分钟前
0
0
使用爬虫实现代理IP池之放弃篇

啥叫代理IP以及代理IP池 概念上的东西网上搜索一下就好了,这里简单科普一下(大部分会读这篇文章的人,基本是不需要我来科普的),白话说就是能联网并提供代理访问互联网的服务器,它提供的...

一别丶经年
27分钟前
0
0
rabbitmq学习记录(五)交换机Exchange-fanout

之前学习的都是一条消息发给一个消费者,下面开始记录如何把一条信息发给多个消费者 这边我们用到了交换机Exchange 交换机模式:fanout 模式特点:生产者把消息发送给Exchange之后,Exchang...

人觉非常君
49分钟前
0
0
sqoop导入数据到Base并同步hive与impala

使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟 基础环境 Sqool和Hive、HBase简介 Sqoop Hive HBase 测试Sqoop 使用Sqoop从MySQL导入数据到Hive 使用复杂SQL 调整Hive数据类型 不断更新 ...

hblt-j
54分钟前
0
0
Dart 服务端开发 文件上传

clent端使用angular组件 upload_component.html form id="myForm" method="POST" enctype="multipart/form-data"> <input type="file" name="fileData"> <!-- file field --></form>......

scooplol
54分钟前
0
0
apache和tomcat同时开启,乱码问题

tomcat和apache同时开启,会走apache的转发,执行的是AJP/1.3协议。所以在tomcat的配置文件server中, <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" useBodyEncodingForU......

Kefy
今天
0
0
使用ssh-keygen和ssh-copy-id三步实现SSH无密码登录 和ssh常用命令

ssh-keygen 产生公钥与私钥对. ssh-copy-id 将本机的公钥复制到远程机器的authorized_keys文件中,ssh-copy-id也能让你有到远程机器的home, ~./ssh , 和 ~/.ssh/authorized_keys的权利 第一步...

xtof
今天
0
0
orcale 查询表结构

SELECT t.table_name, t.colUMN_NAME, t.DATA_TYPE || '(' || t.DATA_LENGTH || ')', t1.COMMENTS FROM User_Tab_Cols t, User_Col_Comments t1WHERE t.table_name......

wertwang
今天
0
0
华为nova3超级慢动作酷玩抖音,没有办法我就是这么强大

华为nova3超级慢动作酷玩抖音,没有办法我就是这么强大!华为nova3超级慢动作酷玩抖音,没有办法我就是这么强大! 在华为最新发布的nova 3手机上,抖音通过华为himedia SDK集成了60fps、超级...

华为终端开放实验室
今天
0
0
多 SSH Key 实现同一台服务器部署多 Git 仓库

本文以以下需求为背景,介绍详细的做法: 需在同一台服务器同时部署两个不同的 Github 仓库(对 Bitbucket 等 git 服务同样适用) root 用户可在远程登录 SSH 后附上预期的 SSH Key 进行 gi...

yeahlife
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部