SpringMVC视图解析器(ViewResolver)
视图解析器(ViewResolver)是 Spring MVC 的重要组成部分,负责将逻辑视图名解析为具体的视图对象。
Spring MVC 提供了很多视图解析类,其中每一项都对应 Java Web 应用中特定的某些视图技术。下面介绍一些常用的视图解析类。 URLBasedViewResolver
UrlBasedViewResolver 是对 ViewResolver 的一种简单实现,主要提供了一种拼接 URL 的方式来解析视图。
UrlBasedViewResolver 通过 prefix 属性指定前缀,suffix 属性指定后缀。当 ModelAndView 对象返回具体的 View 名称时,它会将前缀 prefix 和后缀 suffix 与具体的视图名称拼接,得到一个视图资源文件的具体加载路径,从而加载真正的视图文件并反馈给用户。
使用 UrlBasedViewResolver 除了要配置前缀和后缀属性之外,还需要配置"viewClass",表示解析成哪种视图。示例代码如下。 1234567复制代码类型:[java]
上述视图解析器配置了前缀和后缀两个属性,这样缩短了 view 路径。因此《第一个Spring MVC应用》一节中的 RegisterController 和 LoginController 控制器类的视图路径仅需提供 register 和 login,视图解析器将会自动添加前缀和后缀,此处解析为 /WEB-INF/jsp/register.jsp 和 /WEB-INF/jsp/login.jsp。
上述 viewClass 值为 InternalResourceViewResolver,它用来展示 JSP 页面。如果需要使用 jstl 标签展示数据,将 viewClass 属性值指定为 JstlView 即可。
另外,存放在 /WEB-INF/ 目录下的内容不能直接通过 request 请求得到,所以为了安全性考虑,通常把 jsp 文件放在 WEB-INF 目录下。 InternalResourceViewResolver
InternalResourceViewResolver 为"内部资源视图解析器",是日常开发中最常用的视图解析器类型。它是 URLBasedViewResolver 的子类,拥有 URLBasedViewResolver 的一切特性。
InternalResourceViewResolver 能自动将返回的视图名称解析为 InternalResourceView 类型的对象。InternalResourceView 会把 Controller 处理器方法返回的模型属性都存放到对应的 request 属性中,然后通过 RequestDispatcher 在服务器端把请求 forword 重定向到目标 URL。也就是说,使用 InternalResourceViewResolver 视图解析时,无需再单独指定 viewClass 属性。示例代码如下。 1234567复制代码类型:[java] FreeMarkerViewResolver
FreeMarkerViewResolver 是 UrlBasedViewResolver 的子类,可以通过 prefix 属性指定前缀,通过 suffix 属性指定后缀。
FreeMarkerViewResolver 最终会解析逻辑视图配置,返回 freemarker 模板。不需要指定 viewClass 属性。
FreeMarkerViewResolver 配置如下。 1234复制代码类型:[java]
下面指定 FreeMarkerView 类型最终生成的实体视图(模板文件)的路径以及其他配置。需要给 FreeMarkerViewResolver 设置一个 FreeMarkerConfig 的 bean 对象来定义 FreeMarker 的配置信息,代码如下。 123复制代码类型:[java]
定义了 templateLoaderPath 属性后,Spring 可以通过该属性找到 FreeMarker 模板文件的具体位置。当有模板位于不同的路径时,可以配置 templateLoaderPath 属性,来指定多个资源路径。
然后定义一个 Controller,让其返回 ModelAndView,同时定义一些返回参数和视图信息。@Controller @RequestMapping("viewtest") public class ViewController { @RequestMapping("freemarker") public ModelAndView freemarker() { ModelAndView mv = new ModelAndView(); mv.addObject("username", "kaikeba"); mv.setViewName("freemarker"); return mv; } }1234567891011复制代码类型:[java]
当 FreeMarkerViewResolver 解析逻辑视图信息时,会生成一个 URL 为"前缀+视图名+后缀"(这里即"fm_freemarker.ftl")的 FreeMarkerView 对象,然后通过 FreeMarkerConfigurer 的配置找到 templateLoaderPath 对应文本文件的路径,在该路径下找到该文本文件,从而 FreeMarkerView 就可以利用该模板文件进行视图的渲染,并将 model 数据封装到即将要显示的页面上,最终展示给用户。
开课吧广场-人才学习交流平台
我们应该支持雷军敢演讲,现在的企业家都不发言了以前有很多企业家网红发言现在越来越没什么知名企业家公开发言了。比如之前经常发言的王兴马云刘强东等等等。应该是和现在的舆论有关系吧,就是你说得对,他们也能把你编成说的是不对的。拼多多
OPPOFindX3准备用个几年最终还是买到了喜欢的手机,以后它就是我的主力机啦旗舰的质感就是很神奇,明明接近200g的重量,拿起来手感还挺好明明刷网图的时候觉得摄像头凸的真奇怪,现在看着还挺耐看捂脸OPPOFi
华为颗粒无收!高通成5G订单最大赢家,移动此举意义何在?对于任何一家企业来讲,拥有他人无法替代的领域优势,才能够拥有最大的市场份额,并且立于不败之地就比如移动支付的支付宝,凭借商家与顾客的便捷交易,迅速就积累了以亿为单位的用户,还有游戏
外媒曝光iPhone13售价,性能提升明显,新的销冠来了大家好,我是三月。前两天小米MIX4终于和大家见面了,这款期待已久的新机果然是不同凡响,虽然官方说这款手机并不是最完美的,但在我看来小米MIX4已经是最接近完美的手机了,完美的屏幕
递归和反递归复合函数也可能会栈溢出。将基于栈的函数转换为基于堆的函数。理解反递归和递归反递归从第一步开始,使用每一步的输出作为下一步的输入,以复合计算步骤。递归的操作相同,但它是从最后一步开始
小米新平板便宜得让人想起特斯拉周末的美好生活从做沙发土豆开始喝着胶囊咖啡,捧着至今依然还是最新一代的iPadmini5,津津有味地看着电影,即便开多了APP时已有了些许卡顿,航母边框的造型也已经审美疲劳,但它是
特斯拉ModelY比亚迪唐EV和极狐阿尔法T纯电长续航SUV谁更强?纵观近几年成立的新能源车企不难看出,几乎每家车企都极其重视SUV车型,理想汽车甚至在成立多年以来只做一款SUV车型,这其中原因除了车企创始人自己的喜好,新能源SUV车型销量的屡创新
锐龙R55600G核显电脑配置推荐,不用独显也能畅玩游戏前几天AMD正式发布了两款锐龙5000系列的APU产品,分别是锐龙R55600G和锐龙R75700G,我们在AMD锐龙5600G性能评测5600G核显相当于什么显卡?这篇文章中,对
中国移动怎么了?为什么选择美国高通,却让华为落榜华为5G从发布至今已时隔两年,5G专利更是位居全球第一,高达3000多项。掌握5G就掌握了基本网络霸权,5G技术也代表了人类科技的进步,但素有世界第一之称的美国却出于嫉妒,不断对华
五大升级亮点!iPhone13确实比iPhone12香太多眼看着iPhone13就要发布了,有关它的消息也被爆了个底朝天。从这些消息不难看出,iPhone13相比iPhone12会香很多,届时少不了有大批用户入手iPhone13。如无意外
试用小度智能屏6用了一段时间x6,感觉良好。首先,语音识别响应速度快,比手机的语音控制要好,还能识别语调情绪,是我没有想到的。第二个是家庭相册可以轮播或作为屏保应用,效果很好。我们现在手机里保存有