• Spring MVC如何设置多个ViewResolver视图解析器呢?


    转自:

    Spring MVC如何设置多个ViewResolver视图解析器呢?

    下文笔者讲述Spring MVC中设置多个ViewResolver的方法分享,如下所示:

    Spring MVC常用的ViewResolver

    InternalResourceViewResolver

    InternalResourceViewResolver会把返回的视图名称都解析为InternalResourceView对象
    InternalResourceView会把Controller处理器方法返回的模型属性都存放到对应的request属性中
    然后使用RequestDispatcher在服务器端把请求forword重定向到目标URL
    比如在InternalResourceViewResolver中定义了prefix=/WEB-INF/,suffix=.jsp
    当请求的Controller处理器方法返回的视图名称为javatest
    则此时InternalResourceViewResolver就会把javatest解析为一个InternalResourceView对象
    先把返回的模型属性都存放到对应的HttpServletRequest属性中 然后利用RequestDispatcher在服务器端把请求forword到/WEB-INF/javatest.jsp

    BeanNameViewResolver

    BeanNameViewResolver视图解析器同XmlViewResolver有点类似 也是通过把返回的逻辑视图名称去匹配定义好的视图bean对象

    两者的不同之处
       一:BeanNameViewResolver要求视图bean对象都定义在Spring的application context
       二:XmlViewResolver是在指定的配置文件中寻找视图bean对象
       三:BeanNameViewResolver不会进行视图缓存
    

    ResourceBundleViewResolver

    ResourceBundleViewResolver和XmlViewResolver一样,也是继承自AbstractCachingViewResolver,但是它缓存的不是视图
    ResourceBundleViewResolver和XmlViewResolver一样它也需要有一个配置文件来定义逻辑视图名称和真正的View对象的对应关系
    不同的是ResourceBundleViewResolver的配置文件是一个属性文件,而且必须是放在classpath路径下面的
    默认情况下这个配置文件是在classpath根目录下的views.properties文件
    当不使用默认值的话,则可以通过属性baseName或baseNames来指定
    baseName只是指定一个基名称
    Spring会在指定的classpath根目录下寻找以指定的baseName开始的属性文件进行View解析
    如指定的baseName是base 则base.properties、baseabc.properties等以base开始的属性文件都会被Spring当做ResourceBundleViewResolver解析视图的资源文件

    XmlViewResolver

    XmlViewResolver需要给定一个xml配置文件
    该文件将使用和Spring的bean工厂配置文件一样的DTD定义
    该文件就是用来定义视图的bean对象的
    该文件中定义的每一个视图的bean对象都给定一个名字
    然后XmlViewResolver将根据Controller处理器方法返回的逻辑视图名称到XmlViewResolver指定的配置文件中寻找对应名称的视图bean用于处理视图
    该配置文件默认是/WEB-INF/views.xml文件
    当不使用默认值的时候可以在XmlViewResolver的location属性中指定它的位置
    XmlViewResolver还实现了Ordered接口
    因此我们可以通过其order属性来指定在ViewResolver链中它所处的位置,order的值越小优先级越高。

    Spring MVC设置多个ViewResolver视图解析器

    当我们需要多个viewResolver的时候
    spring 框架为我们提供了很好的支持
    只需在[spring-dispatcher-name]-servlet.xml中定义多个ViewResolver即可

      
    
        
        
        
    
    
    
        
        
        
        
        
        
    
    

    1.新建一个html的解析器并继承 InternalResourceView 后重写 checkResource
    package com.java265.common.springmvc.view;  
    import java.io.File;  
    import java.util.Locale;  
      
    import org.springframework.web.servlet.view.InternalResourceView;  
    public class HtmlResourceView extends InternalResourceView {  
         @Override  
         public boolean checkResource(Locale locale) {  
          File file = new File(this.getServletContext().getRealPath("/") + getUrl());  
          return file.exists();// 判断该页面是否存在  
         }  
    } 
    2. 在xml配置文件中 指定解析器的 viewClass为该解析类
        
        
       
    
        
         
        
      
    
     
      
       
       
      
      
  • 相关阅读:
    Spring Boot的核心组件和工作原理
    微信小程序——轮播图swiper、1秒切换、自动轮播、无缝切换
    微软行星云计算——Chloris Global Biomass 2003 - 2019年全球生物质数据集
    HZNUCTF -- web
    【picgo】【typora】自己服务器搭建自定义图床
    python/C++二分查找库函数(lower_bound() 、upper_bound,bisect_left,bisect_right)
    Cesium:动态添加和移除交互事件
    LightDB中的存储过程(三)
    开发者,为什么说容器技术的成熟预示着云原生时代的到来?
    Flink学习25:窗口计算函数
  • 原文地址:https://blog.csdn.net/qq_25073223/article/details/127799530