Spring MVC视图解析器

Spring MVC视图解析器

    • ➢ AbstractCachingViewResolver:
    • ➢ XmlViewResolver:
    • ➢ ResourceBundleViewResolver
    • ➢ UrlBasedViewResolver:
    • ➢ InternalResourceViewResolver:
    • ➢ FreeMarkerViewResolver
    • ➢ ContentNegotiatingViewResolver
    • UrlBasedViewResolver的功能与用法

在配置<mvc:annotation-driven…/>元素之后,它会为Spring MVC配置HandlerMapping、HandlerAdapter、HandlerExceptionResolver这三个特殊的Bean,它们解决了“请求URL→Controller的处理方法”的映射。

当Controller的处理方法处理完成后,该处理方法可返回String(逻辑视图名)、View(视图对象)、ModelAndView(同时包括Model与逻辑视图或View),而View对象才代表具体的视图,因此,Spring MVC必须使用ViewResolver将逻辑视图名(String)解析成实际视图(View对象)。

提示:
早期Spring MVC控制器的处理方法要求返回ModelAndView对象,这种方式显得有点过时;现在Spring MVC控制器的处理方法只要返回String(逻辑视图名),而Model只需被定义成处理方法形参即可。
ViewResolver的作用示意图如图
在这里插入图片描述
ViewResolver本身是一个接口,它提供了如下常用实现类。

➢ AbstractCachingViewResolver:

抽象视图解析器,负责缓存视图。很多视图都需要在使用前做好准备,它的子类视图解析器可以缓存视图。

➢ XmlViewResolver:

能接收XML配置文件的视图解析器,该XML配置文件的DTD与Spring的配置文件的dtd相同。默认的配置文件是/WEB-INF/views.xml。
➢ BeanNameViewResolver:它会直接从已有的容器中获取id为viewName的Bean作为View。

➢ ResourceBundleViewResolver

:使用ResourceBundle中的Bean定义实现ViewResolver,这个ResourceBundle由bundle的basename指定。这个bundle通常被定义在一个位于CLASSPATH中的属性文件中。

➢ UrlBasedViewResolver:

该视图解析器允许将视图名解析成URL,它不需要显式配置,只要视图名。

➢ InternalResourceViewResolver:

UrlBasedViewResolver的子类,能方便地支持Servlet和JSP视图以及JstlView和TilesView等子类,它是在实际开发中常用的视图解析器,也是Spring MVC默认的视图解析器。

➢ FreeMarkerViewResolver

:UrlBasedViewResolver的子类,能方便地支持FreeMarker视图。与之类似的还有GroovyMarkupViewResolver、TilesViewResolver等。

➢ ContentNegotiatingViewResolver

:它不是一个具体的视图解析器,它会根据请求的MIME类型来“动态”选择适合的视图解析器,然后将视图解析工作委托给所选择的视图解析器负责。

ViewResolver接口及其实现类的继承关系如图所示。

在这里插入图片描述

下面对这些视图解析器中的代表实现类进行介绍。

UrlBasedViewResolver的功能与用法

UrlBasedViewResolver继承了AbstractCachingViewResolver基类,是ViewResolver接口的一个简单实现类。UrlBasedViewResolver使用一种拼接URL的方式来解析视图,它可通过prefix属性指定一个前缀,也可通过suffix属性指定一个后缀,然后将逻辑视图名加上指定的前缀和后缀,这样就得到了实际视图的URL。

例如,指定prefix=“/WEB-INF/content/”,suffix=“.jsp”,当控制器的处理方法返回的视图名为“error”时,UrlBasedViewResolver解析得到的视图URL为/WEB-INF/content/error.jsp。默认的prefix和suffix属性值都是空字符串。

在使用URLBasedViewResolver作为视图解析器时,它支持在逻辑视图名中使用forword:前缀或redirect:前缀,其中forword:前缀代表转发到指定的视图资源,redirect:前缀代表重定向到指定的视图资源。

在使用UrlBasedViewResolver时必须指定viewClass属性,表示解析成哪种视图,一般使用较多的是InternalResourceView,用于呈现普通的JSP视图;如果希望使用JSTL,则应该将该属性值指定为JstlView。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/63661.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023牛客暑期多校训练营8-I Make It Square

2023牛客暑期多校训练营8-I Make It Square https://ac.nowcoder.com/acm/contest/57362/I 文章目录 2023牛客暑期多校训练营8-I Make It Square题意解题思路代码实现 题意 解题思路 这里有两种情况&#xff0c;即 ∣ s ∣ > ∣ t ∣ |s|>|t| ∣s∣>∣t∣和 ∣ s ∣…

IoTDB1.X windows运行失败问题的处理

在windows运行 IoTDB1.x时 会出现如图所示的问题 为什么会出现这样的问题&#xff1f;java没有安装还是未调用成功&#xff0c;我是JAVA8~11~17各种更换都未能解决问题&#xff0c;最后对其bat文件进行查看&#xff0c;发现在conf\datanode-env.bat、conf\confignode-env.bat这…

安路FPGA的赋值报错——移位处理,加括号

authordaisy.skye的博客_CSDN博客-嵌入式,Qt,Linux领域博主 在使用移位符号用来当作除以号使用时&#xff0c;发现如下问题 其中 cnt_8K 为偶数和奇数时输出的数据不一样 reg [10:0] cnt_8K; reg [10:0] ram1_addra; always(posedge clk_16M) begin if(ram_out_flag )begin if(…

网络安全 Day27-运维安全项目-堡垒机部署

运维安全项目-堡垒机部署 1. 运维安全项目-架构概述2. 运维安全项目之堡垒机2.1 堡垒机概述2.2 堡垒机选型2.3 环境准备2.4 部署Teleport堡垒机2.4.1 下载与部署2.4.2 启动2.4.3 浏览器访问teleport2.4.4 进行配置2.4.5 安装teleport客户端 2.5 teleport连接服务器 1. 运维安全…

函数的模拟实现

题一&#xff1a; 模拟实现strncpy #include <stdio.h>void my_strncpy(char* arr2, char* arr1, size_t num){int i 0;for (i 0; i < num; i){*(arr2 i) *(arr1 i);}}int main(){char arr1[] "hello liangzai";char arr2[10] { 0 };//strncpy(ar…

TansUNet代码理解

首先通过论文中所给的图片了解网络的整体架构&#xff1a; vit_seg_modeling部分 模块引入和定义相关量&#xff1a; # codingutf-8 # __future__ 在老版本的Python代码中兼顾新特性的一种方法 from __future__ import absolute_import from __future__ import division fr…

C++ 派生类的析构函数

派生类的析构函数的功能是在该类对象消亡之前进行的一些必要的清理工作。析构函数没有类型&#xff0c;也没有参数。 在派生过程中&#xff0c;基类的析构函数也不可以继承下来&#xff0c;如果需要析构的话&#xff0c;就要在派生类中声明新的析构函数。派生类析构函数的声明…

户外组网摆脱布线困扰,工业5G网关实现无人值守、远程实时监控

在物联网通信技术发达的2023&#xff0c;网络覆盖对所及之处的全面覆盖&#xff0c;科技发展的促使下很多高危户外场景也在思考如何利用无线技术提高人员安全及现场无人化管理。 煤矿是我们国家不可缺少的重要能源&#xff0c;其开采过程的危险系数也是众所皆知的&#xff0c;…

HbuildX生成安卓签名证书

HbuildX生成安卓签名证书 安装和配置JRE环境 根据此链接安装和配置JRE环境 生成签名证书 keytool -genkey -alias testalias -keyalg RSA -keysize 2048 -validity 36500 -keystore test.keystoretestalias是证书别名&#xff0c;可修改为自己想设置的字符&#xff0c;建议…

策略模式【Strategy Pattern】

刘备要到江东娶老婆了&#xff0c;走之前诸葛亮给赵云&#xff08;伴郎&#xff09;三个锦囊妙计&#xff0c;说是按天机拆开解决棘手问题&#xff0c; 嘿&#xff0c;还别说&#xff0c;真是解决了大问题&#xff0c;搞到最后是周瑜陪了夫人又折兵呀&#xff0c;那咱们先看看…

深度学习(37)—— 图神经网络GNN(2)

深度学习&#xff08;37&#xff09;—— 图神经网络GNN&#xff08;2&#xff09; 这一期主要是一些简单示例&#xff0c;针对不同的情况&#xff0c;使用的数据都是torch_geometric的内置数据集 文章目录 深度学习&#xff08;37&#xff09;—— 图神经网络GNN&#xff08…

volte端到端问题分析(一)

1、MME专载保持功能验证 **描述&#xff1a;**当无线环境较差时&#xff0c;有可能由于“Radio_Connection_with_UE_Lost” 原因造成的VoLTE通话掉话&#xff0c;如果UE发生RRC重建成功&#xff0c;手机将不会掉话。 对MME1202进行功能验证&#xff1a;开启后&#xff0c;MME专…