文档章节

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

轨迹_
 轨迹_
发布于 06/23 14:45
字数 496
阅读 33
收藏 5

概要

我们在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 方法进行响应结果。

© 著作权归作者所有

共有 人打赏支持
轨迹_
粉丝 43
博文 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
第二章 Spring MVC入门

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

亮liang
2015/03/20
0
0
Spring 3.x Web MVC

本文demo下载地址:http://www.wisdomdd.cn/Wisdom/resource/articleDetail.htm?resourceId=1142 Spring 3.x Web MVC Spring mvc 特点 @ 功能组件划分细致 @ 灵活、强大 @ 设计思想优秀 MVC框......

智慧点点
08/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql load data 批量导入使用

最近在研究使用mycat,其中有使用批量数据导入,简单记录一下使用方式。 查看系统属性 mysql>show variables like '%secure%'+--------------------------+-----------------------+| Vari...

FansinZhao
14分钟前
0
0
浅谈React的最大亮点——虚拟DOM

在Web开发中,需要将数据的变化实时反映到UI上,这时就需要对DOM进行操作,但是复杂或频繁的DOM操作通常是性能瓶颈产生的原因,为此,React引入了虚拟DOM(Virtual DOM)的机制。 一、什么是...

peakedness丶
17分钟前
0
0
下一代大数据处理引擎,阿里云实时计算独享模式重磅发布

摘要: 11月14日,阿里云重磅发布了实时计算独享模式,即用户独享一部分物理资源,这部分资源在网络/磁盘/CPU/内存等资源上跟其他用户完全独立,是实时计算在原有共享模式基础上的重大升级。...

阿里云官方博客
22分钟前
0
0
Spring MVC 测试样例

1、需要javax.servlet-api V3.0以上支持 <!--3.0以上版本--> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-......

jcc_codingBoy
24分钟前
2
0
kettle增量同步oracle数据到mysql

kettle增量同步oracle数据到mysql 适合表中有更新时间的字段 kettle安装 绿色,下载后解压即可(略), -> Download 连接数据库 需要导入jdbc相关驱动jar包到lib目录(oracle、mysql对应jar...

o00o
28分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部