Spring MVC 多视图解析器

本文详细介绍了如何在SpringMVC框架中整合Freemarker模板引擎,包括必要的jar包导入、配置文件设置及视图解析器的配置。同时,文章还探讨了不同类型的视图解析器在项目中的应用,以及如何通过order属性优先级来控制视图的解析流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一步:FreeMarkerViewResolver视图解析器需要 导入jar
freemarker-2.3.28.jar
spring-context-support-4.0.4.RELEASE.jar

<dependency>
      <groupId>org.freemarker</groupId>
      <artifactId>freemarker</artifactId>
      <version>2.3.28</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
    <version>4.0.4.RELEASE</version>
  </dependency>

第二步:配置文件配置

<!-- html视图解析器 必须先配置freemarkerConfig,注意html是没有prefix前缀属性的-->
    <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <!--模板路径,相当于前缀-->
        <property name="templateLoaderPath">
            <value>/WEB-INF/htmls/</value>
        </property>
    </bean>
    <bean id="htmlviewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        <property name="contentType" value="text/html;charset=UTF-8"></property>
        <property name="cache" value="true"/>
        <!--后缀,没有前缀属性-->
        <property name="suffix" value=".html" />
        <!--优先级别,越小级别越高-->
        <property name="order" value="0"/>
    </bean>


    <!--配置视图解析器,不同包可以建多个解析器,用viewNames属性区分:匹配视图名以jpg开头的。-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="contentType" value="application/xml"/>
        <property name="viewNames" value="htmls*"/>
        <!--前缀-->
        <property name="prefix" value="/WEB-INF/"/>
        <!--后缀-->
        <property name="suffix" value=".jsp"/>
        <property name="order" value="1"/>
    </bean>
    
	<!--静态资源默认用servlet配置,如果用FreeMarkerViewResolver解析器可以不用这句-->
    <mvc:default-servlet-handler/>
    
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="contentType" value="text/html;charset=UTF-8"/>
        <property name="viewNames" value="jsp*"/>
        <!--前缀-->
        <property name="prefix" value="/WEB-INF/"/>
        <!--后缀-->
        <property name="suffix" value=".jsp"/>
        <property name="order" value="2"/>
    </bean>

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

我这有两个JSP文件:因为不同包,所以就多配一个InternalResourceViewResolver解析器

1 WEB-INF/htmls/a.jsp  

2 WEB-INF/jsp/b.jsp

**注意:**要添加viewNames属性,以分别匹配不同的包。因为InternalResourceViewResolver其有一个buildView方法,该方法一定会创建一个View;所以呢View永远不为null(即使该jsp不存在);

<property name="viewNames" value="htmls*"/>

<property name="viewNames" value="jsp*"/>

如上两个的意思是对htmls或jsp开头的视图名进行处理,比如返回的视图名为htmls/a 那么会交给viewNames为htmls*的那个解析器处理;

XmlViewResolver视图解析器:
1,新建一个xml,并配置如下

view.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/mvc
           http://www.springframework.org/schema/mvc/spring-mvc.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 定义一个外部资源视图 -->
    <bean id="taobao" class="org.springframework.web.servlet.view.RedirectView">
        <property name="url" value="http://www.taobao.com"/>
    </bean>

    <!-- 定义一个内部资源视图 -->
    <bean class="org.springframework.web.servlet.view.JstlView" id="ccc.html">
        <property name="url" value="/statics/htmls/ccc.html"/>
    </bean>
    <!-- 定义一个内部资源视图 -->
    <bean class="org.springframework.web.servlet.view.JstlView" id="ccc.jpg">
        <property name="url" value="/statics/images/ccc.jpg"/>
    </bean>
</beans>

2,spring mvc配置文件配置

<!--XmlViewResolver视图解析器-->
    <bean class="org.springframework.web.servlet.view.XmlViewResolver">
        <property name="location" value="classpath:view.xml"/>
        <property name="order" value="0"/>
</bean>

3,controller层代码

@RequestMapping("/useradd2")
    public String userAdd1(){
    return "ccc.html";
}

@RequestMapping("/useradd3")
    public String userAdd2(){
    return "ccc.jpg";
}

注意:html;jpg文件需要放在静态资源文件夹下,不然会被拦截,报404错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值