SpringMVC:多视图解析器配置以及问题

2021-01-02 13:29

阅读:773

标签:自己   code   www   目录   eem   Fix   prope   text   RKE   

参考文章:https://www.cnblogs.com/daxin/p/3551537.html

多个视图解析器的配置

在SpringMVC模式当中可以通过如下配置来支持多视图解析

    
    bean id="JSPViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        property name="viewNames" value="*jsp" />
        property name="contentType" value="text/html; charset=utf-8"/>  
        property name="prefix" value="/" />
        property name="suffix" value="" />
        property name="order" value="1">property>
    bean>
bean id="FMViewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/>
        property name="viewNames" value="*html" />
        property name="contentType" value="text/html; charset=utf-8"/>
        property name="cache" value="true" />
        property name="prefix" value="/" />
        property name="suffix" value="" />
        property name="order" value="0">property>
bean>

首先可以使用order属性进行设置 系统首先按解析器的order值进行查找 首先使用FreeMarkerViewResolver解析器调用canHandle方法,判断当前解析器对视图是否能够解析。如不能解析在依次调用。

具体使用

单个视图解析器:

1、springmvc配置文件

     
    bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
        property name="prefix" value="/WEB-INF/jsp/" />
        property name="suffix" value=".jsp" />
    bean>

2、静态页面

技术图片

 3、Controller接口

技术图片

 可以成功跳转!

问题,如果jsp页面不在jsp目录下,怎么跳转?

关于springmvc多视图解析器解析的问题:

假设我现在有两个jsp页面,分别在其它的目录下怎么办:

1、WEB-INF/A/a.jsp  

2、WEB-INF/B/b.jsp  

技术图片

controller接口

技术图片

但是报404,因为jsp目录下没有a.jsp这个页面,显然返回的视图名有一开始定义的视图解析器处理了。

技术图片

那要如何按照自己的设想进行跳转呢? 

 

解决方案

最简单的办法是使用其viewNames属性,来指定一个是否可以处理的规则

"viewNames" value="A*"/>

"viewNames" value="B*"/>

如上两个的意思是对A或B开头的视图名进行处理,比如返回的视图名为A/a(或者A_a) 那么会交给viewNames为A*的那个解析器处理;支持的规则可以查看javadoc。

 

多视图解析器配置

controller层

技术图片

SpringMVC配置

    bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
        
        property name="viewNames" value="A*"/>
        
        property name="prefix" value="/WEB-INF/"/>
        property name="suffix" value=".jsp"/>
    bean>
    bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
        property name="viewNames" value="B*"/>
        property name="prefix" value="/WEB-INF/"/>
        property name="suffix" value=".jsp"/>
    bean>

    bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
        property name="prefix" value="/WEB-INF/jsp/" />
        property name="suffix" value=".jsp" />
    bean>

 

注意点

新增两个视图解析器,注意默认的视图解析器(就是没有设置viewNames属性的),必须放在新增的视图解析器的后面。

否则返回的页面还是由默认的视图解析器解析的,就会导致404。

技术图片

如果就想要默认的视图解析器写在最上面该怎么办,我们可以通过设置视图解析器的顺序。

    bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        
        property name="order" value="2"/>
        property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
        property name="prefix" value="/WEB-INF/jsp/" />
        property name="suffix" value=".jsp" />
    bean>

    bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        
        property name="order" value="1"/>
        property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
        
        property name="viewNames" value="A*"/>
        
        property name="prefix" value="/WEB-INF/"/>
        property name="suffix" value=".jsp"/>
    bean>
    bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        property name="order" value="1"/>
        property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
        property name="viewNames" value="B*"/>
        property name="prefix" value="/WEB-INF/"/>
        property name="suffix" value=".jsp"/>
    bean>

技术图片

 成功!

 

SpringMVC:多视图解析器配置以及问题

标签:自己   code   www   目录   eem   Fix   prope   text   RKE   

原文地址:https://www.cnblogs.com/zxhbk/p/12994433.html


评论


亲,登录后才可以留言!