Spring MVC整合FreeMarker模板引擎总结

本文介绍了在Spring MVC项目中集成Freemarker时遇到的问题及解决方案。配置视图解析器时,错误地在`template-loader-path`中使用了`classpath*:`导致视图无法解析。正确做法应去除通配符,改为`classpath:/template/`。另外,配置`mvc:view-resolvers`时,不应添加`prefix`属性,否则也会引发视图解析错误。

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

Spring版本声明:

  • Spring 5.2.5.RELEASE
  • Spring mvc 5.2.5.RELEASE

项目基于Maven

导入依赖Freemarker依赖

在pom文件中导入下面的依赖:

<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>
    <!-- 这个依赖是必须的 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.freemarker</groupId>
      <artifactId>freemarker</artifactId>
      <version>2.3.29</version>
 </dependency>

配置Spring MVC视图解析器

在spring-web.xml中配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<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/context
                      http://www.springframework.org/schema/context/spring-context.xsd
                      http://www.springframework.org/schema/mvc
                      http://www.springframework.org/schema/mvc/spring-mvc.xsd">
  <context:component-scan base-package="org.gyb.dubbo.controller"/>
  <mvc:annotation-driven/>
  <mvc:freemarker-configurer>
    <mvc:template-loader-path location="classpath*:/template/"/>
  </mvc:freemarker-configurer>
  <mvc:view-resolvers>
    <mvc:freemarker suffix=".ftl"/>
  </mvc:view-resolvers>
</beans>

Spring MVC提供了非常好用的mvc:*</mvc:*>标签,这些标签在提供了便利的同时也埋下了很多陷阱。例如上边配置中关于freemarker的配置:

<mvc:freemarker-configurer>
    <mvc:template-loader-path location="classpath*:/template/"/>
</mvc:freemarker-configurer>

第一次使用这个标签,心里刚刚还在感叹Spring MVC的强大,随后就想骂一句mmp,这样配置启动项目之后报了一下错误:
异常信息
不能解析视图名称,各种试验之后发现问题出在 <mvc:template-loader-path location=“classpath*:/template/”/>这里,查看官方文档可知,location支持Spring resource表示的资源路径,也支持从项目根路径开始表示的字符串路径,即可以写成classpath:/开头的,也可以是/WEB-INF/…这样的路径,但是我偏偏加了一个*,经过测试去掉 * 之后就可以了。正确的配置如下

<mvc:freemarker-configurer>
    <mvc:template-loader-path location="classpath:/template/"/>
    <!-- 或者写成下面的,注意这样写IDEA会提示找不到路径而标红,但是不影响运行 -->
    <!--<mvc:template-loader-path location="/WEB-INF/classes/template/"/>-->
  </mvc:freemarker-configurer>
 <mvc:view-resolvers>
    <mvc:freemarker suffix=".ftl"/>
</mvc:view-resolvers>

另一个坑

在上面的配置中有如下配置,这个配置没任何问题:

  <mvc:view-resolvers>
    <mvc:freemarker suffix=".ftl"/>
  </mvc:view-resolvers>

千万不要写成如下:

  <mvc:view-resolvers>
    <mvc:freemarker prefix="/WEB-INF/classes/template/" suffix=".ftl"/>
  </mvc:view-resolvers>

不要加prefix属性,这样的话仍然会出现“无法解析视图的错误”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cloud-Future

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值