• Spring MVC视图解析器



    在配置元素之后,它会为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。

  • 相关阅读:
    Nginx环境搭建及前端部署教程(Windows版)
    基于NoCode构建简历编辑器
    实现多彩线条摆出心形
    微服务自动化【Docker-Compose】
    springcloudalibaba架构(2):Sentinel服务容错与使用入门
    线性表重点操作代码集锦
    HW-初始准备
    Mosquitto 安装指南
    阿里云研发工程师刘睿:阿里云消息生态及最佳实践
    Word Game
  • 原文地址:https://blog.csdn.net/leva345/article/details/132251057