SpringMVC的视图和视图解析器
创始人
2024-05-28 19:25:21
0

Java知识点总结:想看的可以从这里进入

目录

      • 2.4、视图、视图解析器
        • 2.4.1、视图
        • 2.4.2、视图解析器

2.4、视图、视图解析器

视图是渲染数据模型并将内容展示给用户,而视图解析器是将逻辑视图解析成真正的视图。

Spring MVC 支持 ModelAndView、Model、Map、View、String 多种类型的返回值,但无论控制器方法的返回值是哪种类型,Spring MVC 内部最终都会将它们封装成一个 ModelAndView 对象,它由 model(模型数据)和 view(逻辑视图名)两部分组成,所以 Spring MVC 需要借助 ViewResolver(视图解析器)将 逻辑视图名解析为真正的 View 视图对象,然后才能响应给客户端展示。

Spring MVC 的核心理念是将 视图与 数据模型进行解耦,视图技术随场景选择:Thymeleaf、JSP、FreeMarker、Velocity、Excel 等等。其中spring6已经取消了对JSP、FreeMarker的支持。

2.4.1、视图

视图是用来展示数据模型的。SpringMVC中定义了多种视图,但是它们都需要满足一个视图接口:View:

public interface View {/*** 包含响应状态代码的HttpServletRequest属性的名称*/String RESPONSE_STATUS_ATTRIBUTE = View.class.getName() + ".responseStatus";/*** 包含带有路径变量的 Map 的HttpServletRequest属性的名称*/String PATH_VARIABLES = View.class.getName() + ".pathVariables";/***选择响应内容类型*/String SELECTED_CONTENT_TYPE = View.class.getName() + ".selectedContentType";/*** 响应客户端的类型,可以使HTML、JSON、PDF等等*/@Nullabledefault String getContentType() {return null;}/***渲染的方法, model数据模型*/void render(@Nullable Map model, HttpServletRequest request, HttpServletResponse response)throws Exception;}

当控制器返回ModelAndView时,解析器进行解析,将数据模型传给 render 方法,进行视图渲染。SpringMVC中的视图很多,但常用的视图的实现类有:

实现类说明
ThymeleafViewThymeleaf 视图。使用 Thymeleaf 时,需要使用该视图类。
InternalResourceView转发视图,通过它可以实现请求的转发跳转。它也是 JSP 视图。
RedirectView重定向视图,通过它可以实现请求的重定向跳转。
FreeMarkerViewFreeMarker 视图.
MappingJackson2JsonViewJSON 视图。
AbstractPdfViewPDF 视图 。

视图一般分为两类:

  • 逻辑视图:view 是一个字符串的逻辑视图名,需要解析。

    比如说ThymeleafView,它需要视图解析器根据配置去寻找我们完成的实际页面进行渲染

    //这两种方式返回的都是逻辑视图
    @RequestMapping("/test")
    public String test1(Model model) {return "success";
    }
    @RequestMapping("/test")
    public ModelAndView test1() {ModelAndView modelAndView = new ModelAndView();modelAndView.setViewName("success");return modelAndView;
    }
    
  • 非逻辑视图:返回的是一个真正的视图对象,不需要解析

    如 MappingJackson2JsonView ,它返回的是JSON数据,不需要解析就可以将JSON视图直接展示给用户

    @RequestMapping("/test")
    @ResponseBody
    public ModelAndView test(d) {return "返回字符串";
    }
    

2.4.2、视图解析器

视图解析器用来解析逻辑视图,将其解析成真正的视图。

SpringMVC 提供了一个视图解析器的接口 ViewResolver,所有具体的视图解析器必须实现该接口。

public interface ViewResolver {/*** 按名称解析给定的视图。,locale配置国际化,viewName就是传递的逻辑视图名字*/@NullableView resolveViewName(String viewName, Locale locale) throws Exception;}

SpringMVC中也有很多不同的视图解析器,

视图解析器说明
BeanNameViewResolver将视图解析后,映射成一个 Bean,视图的名称就是 Bean 的 id。
InternalResourceViewResolverJSP的视图解析器,映射一个 JSP 文件。
FreeMarkerViewResolverFreeMarker 视图解析器,映射成一个 FreeMarker 模板文件。
ThymeleafViewResolverThymeleaf视图解析器,映射成一个 Thymeleaf 模板文件。

使用它们需要在XML中进行配置,配置前缀和后缀后,就可以在Controller中使用了,它解析的路径是:前缀+方法中返回的路径+后缀,就能解析到一个真正的视图。

视图解析器也可以同时配置多个,其中可以使用 order 指定它们之间的解析优先级顺序,Spring MVC 会遍历所有视图解析器,并按照其优先级依次对逻辑视图名进行解析,直到解析成功并返回视图对象为止。






上一篇:3 mmmmm

下一篇:2D图像处理:相机标定

相关内容

热门资讯

抓周仪式主持词 抓周仪式主持词范文  主持词是主持人在台上表演的灵魂之所在。在如今这个中国,主持词是活动、集会等的必...
年终总结大会主持词结束语 年终总结大会主持词结束语  主持词是各种演出活动和集会中主持人串联节目的串联词。时代不断在进步,主持...
纯中式婚礼主持词(2) 让我们共同举起手中的酒杯,共同祝福我们这一对知心爱人,祝福他们在爱的旅途上风雨相承,相濡以沫,真爱一...
幼儿园园庆主持词 幼儿园园庆主持词  利用在中国拥有几千年文化的诗词能够有效提高主持词的感染力。在人们积极参与各种活动...
篮球比赛开幕式主持词 篮球比赛开幕式主持词(通用5篇)  主持词可以采用和历史文化有关的表述方法去写作以提升活动的文化内涵...
六一儿童节活动节目的主持词 六一儿童节活动节目的主持词(精选7篇)  主持词是各种演出活动和集会中主持人串联节目的串联词。在当今...
公司员工的感谢词 公司员工的感谢词3篇  我们虽然是公司的一名员工,其实也是公司的主人,需要有将公司当成家的态度,态度...
毕业晚会的主持稿 毕业晚会的主持稿(精选11篇)  在现在社会,我们很多时候都不得不用到主持稿,主持稿是主持人为节目进...
《加油金三顺》经典台词 《加油金三顺》经典台词  1、回忆是没有任何力量的。(三顺)  2、人都知道会死,但不还是活着吗?(...
升学酒会主持词 升学酒会主持词  借鉴诗词和散文诗是主持词的一种写作手法。在如今这个时代,司仪等是很多场合都需要的角...
秋季开学典礼颁奖主持词 秋季开学典礼颁奖主持词  活动对象的不同,主持词的写作风格也会大不一样。在人们积极参与各种活动的今天...
老人寿宴致辞 老人寿宴致辞(精选7篇)  在我们平凡的日常里,许多人都写过致辞吧,致辞具有“礼仪性”或“仪式化”的...
经典高考升学宴主持词   尊敬的各位领导、各位嘉宾、各位亲朋好友:  大家好!8月,理想赤诚、热爱挚烈,8月,阳光灿烂、收...
中秋晚会主持稿 中秋晚会主持稿(精选5篇)  又到了一个激动人心的好日子!中秋合家团圆,是中华民族的传统习俗。下面是...
男孩满月酒主持词 男孩满月酒主持词  主持词要注意活动对象,针对活动对象写相应的主持词。在各种集会、活动不断增多的社会...
婚礼司仪主持词简短版 婚礼司仪主持词简短版  借鉴诗词和散文诗是主持词的一种写作手法。在人们积极参与各种活动的今天,各种集...
培训主持词 【精华】培训主持词八篇  借鉴诗词和散文诗是主持词的一种写作手法。在当今不断发展的世界,很多晚会、集...
婚礼主持词完整版 2017婚礼主持词(完整版)  无论新人举行什么样形式的婚礼,婚礼主持人是必不能少的。那么婚礼司仪全...
《哈利波特》的经典语录台词 《哈利波特》的经典语录台词  “就看你的了,哈利,要使他们看到,作为一名找球手,单靠一个有钱的爸爸是...
前任2备胎反击战经典台词 前任2备胎反击战经典台词  1、一见钟情太肤浅,日久生情才是真。  2、再深的感情也敌不过缘分的交错...