• ViewResolver视图解析器简单介绍


     

    导言:同学们有没有想过这样一个问题,就是客户端每次请求之后,Spring MVC是怎么把请求响应成一个视图的?相信很多同学清楚如何使用,却不清楚Spring MVC里面是如何返回视图,那么,今天我们就来探讨一下,Spring MVC 是如何解析客户端请求响应成视图的。

     

    1、什么是Spring MVC?MVC分别代表什么,作用是?

    Spring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架。

    M:model 模型,业务流程,业务逻辑。
    V:视图,渲染数据。
    C:控制:接收客户端请求,分配任务。

    作用:轻量 高效 独立开发,可扩展 可维护 可复用 可测试 -->实现了业务逻辑与数据展示分离,各模块最大限度解耦,独立开发。

    2、在解析过程中有一个很重要的角色——视图解析器。视图解析器(ViewResolver)是什么?

    在Spring MVC控制器中,所有的客户端请求处理方法(Action)必须解析出一个逻辑视图名称,无论是显式的(返回String,View或ModelAndView)还是隐式的(基于约定的,如视图名就是方法名)。视图解析器的作用是将逻辑视图转为物理视图,所有的视图解析器都必须实现ViewResolver接口。

    Spring处理视图最重要的两个接口是ViewResolver和View。ViewResolver接口在视图名称和真正的视图之间提供映射关系; 而View接口则处理请求将真正的视图呈现给用户。

    3、SpringMVC的视图解析流程。

    1、调用目标方法,SpringMVC将目标方法返回的String、View、ModelMap或是ModelAndView都转换为一个ModelAndView对象;

    2、然后通过视图解析器(ViewResolver)对ModelAndView对象中的View对象进行解析,将该逻辑视图View对象解析为一个物理视图View对象;

    3、最后调用物理视图View对象的render()方法进行视图渲染,得到响应结果。

    4、对于控制器的目标方法,无论其返回值是String、View、ModelMap或是ModelAndView,SpringMVC都会在内部将它们封装为一个ModelAndView对象进行返回。
    Spring MVC 借助视图解析器(ViewResolver)得到最终的视图对象(View),最终的视图可以是JSP,HTML也可是Excell、 JFreeChart等各种表现形式的视图。

    SpringMVC为逻辑视图名的解析提供了不同的策略,可以在Spring WEB上下文中配置一种或多种解析策略,并指定他们之间的先后顺序。每一种映射策略对应一个具体的视图解析器实现类。程序员可以选择一种视图解析器或混用多种视图解析器。可以通过order属性指定解析器的优先顺序,order越小优先级越高,SpringMVC会按视图解析器顺序的优先顺序对逻辑视图名进行解析,直到解析成功并返回视图对象,否则抛出ServletException异常。

    为了实现视图模型和具体实现技术的解耦,Spring在org.springframwork.web.servlet包中定义了一个高度抽象的View接口。

     各个视图解析器之间的关系:

    4、理解什么是“基于URL” 的视图解析器(重点)。

    比如我们的 Controller 中最后的返回的处理代码为: return "index"; 那么“基于URL” 的视图解析器就会将返回值 “index” 作为最后视图的URL的一部分,然后结合上面的配置和,最后得到最终的URL:
    "/WEB-INF/jsp/" + "index" + ".jsp" == "/WEB-INF/jsp/index.jsp"

  • 相关阅读:
    php composer 相关及版本约束等小技巧
    Jquery 获取表单值如input,select等方法
    Apache benchmark 压力测试工具
    Linux中的随机数文件 /dev/random /dev/urandom
    redis持久化
    Python---装饰器
    高仿拉手网底部菜单实现FragmentActivity+Fragment+RadioGroup
    python实现二叉树和它的七种遍历
    Spring AOP应用实例demo
    二维数组的列排序
  • 原文地址:https://www.cnblogs.com/EdinburghOne/p/9873647.html
Copyright © 2020-2023  润新知