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<String, ?> model, HttpServletRequest request, HttpServletResponse response)throws Exception;}

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

实现类 说明
ThymeleafView Thymeleaf 视图。使用 Thymeleaf 时,需要使用该视图类。
InternalResourceView 转发视图,通过它可以实现请求的转发跳转。它也是 JSP 视图。
RedirectView 重定向视图,通过它可以实现请求的重定向跳转。
FreeMarkerView FreeMarker 视图.
MappingJackson2JsonView JSON 视图。
AbstractPdfView PDF 视图 。

视图一般分为两类:

  • 逻辑视图: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。
InternalResourceViewResolver JSP的视图解析器,映射一个 JSP 文件。
FreeMarkerViewResolver FreeMarker 视图解析器,映射成一个 FreeMarker 模板文件。
ThymeleafViewResolver Thymeleaf视图解析器,映射成一个 Thymeleaf 模板文件。

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

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

<!--视图解析器 解析jsp文件,假如视图名为hello,则页面为/WEB-INF/hello.jsp-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!--逻辑视图名的规则,当控制器方法返回的逻辑视图名是以jsppage/开头时,它所对应的视图解析器才对视图进行解析。--><property name="viewNames" value="jsppage/*"/><property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/><!--视图解析器的优先级,值越小,优先级越高--><property name="order" value="2"/><property name="prefix" value="/WEB-INF/"/><property name="suffix" value=".jsp"/>
</bean><!--视图解析器 解析thymeleaf -->
<bean class="org.thymeleaf.spring5.view.ThymeleafViewResolver"><!--视图解析器的优先级,值越小,优先级越高--><property name="order" value="1"/><!--定义视图文件的字符集--><property name="characterEncoding" value="UTF-8"/><!--配置前后缀--><property name="templateEngine"><bean class="org.thymeleaf.spring5.SpringTemplateEngine"><property name="templateResolver"><bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver"><!-- 视图前缀 --><property name="prefix" value="/WEB-INF/templates/"/><!-- 视图后缀 --><property name="suffix" value=".html"/><property name="templateMode" value="HTML5"/><property name="characterEncoding" value="UTF-8"/></bean></property></bean></property>
</bean>

SpringMVC的视图和视图解析器相关推荐

  1. 使用springMVC提供的CommonsMultipartResolver文件解析器,实现文件轻松上传

    springMVC提供的前端控制器,可以拦截所有请求,指挥调度所有后台逻辑资源. 使用传统方式进行文件上传,需要我们手动解析request对象,获取文件上传项,再进行文件的上传. springMVC框 ...

  2. springmvc视图解析器_SpringMVC视图及REST风格

    什么是视图解析器? springMVC用于处理视图最重要的两个接口是ViewResolver和View. ViewResolver的主要作用是把一个逻辑上的视图名称解析成一个真的的视图,而Spring ...

  3. SpringMvc及三大组件(适配器、映射器、视图解析器)

    文章目录 1 SpringMvc三大组件 适配器 映射器 视图解析器 1 @RequestMapping和@Controller **1. 什么是mvc** 2. SpringMvc三大组件及其作用 ...

  4. SpringMVC源码之参数解析绑定原理

    摘要 本文从源码层面简单讲解SpringMVC的参数绑定原理 SpringMVC参数绑定相关组件的初始化过程 在理解初始化之前,先来认识一个接口 HandlerMethodArgumentResolv ...

  5. 学习SpringMVC——说说视图解析器

    各位前排的,后排的,都不要走,咱趁热打铁,就这一股劲我们今天来说说spring mvc的视图解析器(不要抢,都有位子~~~) 相信大家在昨天那篇如何获取请求参数篇中都已经领略到了spring mvc注 ...

  6. 管理springmvc组件——前端控制器、控制器映射器和适配器、视图解析器、文件上传的、拦截器||消息转化

    管理springmvc组件 概述 在使用springmvc时要配置哪些东西 前端控制器 控制器映射器和适配器 映射器  Map<Set<String>,Object> Set& ...

  7. jsp springmvc 视图解析器_Springmvc中多视图解析器解析问题

    最近被问到过几次关于springmvc多视图解析器解析的问题:总结一下. 1.问题: 假设我有两个jsp: WEB-INF/html/a.jsp WEB-INF/report/b.jsp 且我配置了视 ...

  8. springmvc如何使用视图解析器_SpringMVC的工作原理

    SpringMVC的工作原理图: SpringMVC流程 1. 用户发送请求至前端控制器DispatcherServlet. 2. DispatcherServlet收到请求调用HandlerMapp ...

  9. 7.SpringMVC 配置式开发-ModelAndView和视图解析器

    ModelAndView 1.Model(模型) 1.model的本质就是HashMap,向模型中添加数据,就是往HashMap中去添加数据 2.HashMap 是一个单向查找数组,单向链表数组 3. ...

  10. --------------springMVC的开篇,以及底层执行流程,配置视图解析器,静态资源的访问,流程图,工作原理...

    springMVC: 一:创建第一个项目 01.引入需要的jar包 web webmvc context context-support 02.在web.xml文件中 配置我们需要的核心控制器 Dis ...

最新文章

  1. 真正的人工智能至少还要几百年才能实现,你信吗?
  2. DGA短域名(360样本) mark下 下次分析可以参考
  3. Node简单服务器开发
  4. 被未知进程占用端口的解决办法
  5. 使用performance monitor 查看 每一个cpu core的cpu time
  6. 求大数的阶乘方法(数组)
  7. Java同步组件之Condition,FutureTask
  8. Java实现动态sin和cos函数图像
  9. 淘宝直通车怎样设置定向推广出价问题总结
  10. linux drop cache权限不够,Linux drop_caches
  11. 蝴蝶f8手机是鸿蒙系统,中华酷联御三家回归,从电信定制机到高端,你期待鸿蒙系统吗?...
  12. JMeter工具:场景设计,场景设置,场景运行,性能参数配置,测试监控
  13. Accton Technology and Wedge Networks Partnership Launches Orchestrated Secure SD-WAN
  14. 微信小程序开屏动画组件封装以及使用示例
  15. 第二篇第十一章灭火救援设施
  16. 嘘!捡漏啦!1919元=高性能电脑,满额+500京东卡...
  17. 用HTML开发Windows桌面应用程序
  18. 让一切都过去吧,高手挑战2过关方法
  19. 黑客与画家:Milvus x Cleveland Museum of Art
  20. 可以说是校招面试难度天花板了吧~

热门文章

  1. 详解用Java实现爬虫:HttpClient和Jsoup的介绍及使用(请求方式、请求参数、连接池、解析获取元素)
  2. 【表单】表单数据的提交和处理
  3. 【项目管理冲刺-必会概念】
  4. bcb 操作 Excel
  5. php xmp,xmp可以一直开着吗
  6. JS中的call与call.call
  7. c ajax 500,Ajax和jQuery中的C:\ fakepath \ *。*
  8. 高频交易配对交易学习——Copulas函数理解
  9. Android装置的开发挑战:软硬件如何巧妙整合
  10. 基因注释-InterProScan