springMVC整合freemarker的使用


freemarker对比jsp的最大优点就是静态页面生成,个人觉得freemarker的语法也非常好理解并使用,与java代码逻辑很相似。对于类似的页面模板还有thymeleaf、velocity等也是不错的。使用起来很方便,那么在另外的博客中也略有说明关于thymeleaf的一点使用。这里就springmvc 与 freemarker整合使用做一个demo说明。


springMVC的配置

配置springMVC的相关方式就不说了,注意核心控制器的配置拦截的url至少要包含*.htm、*.html等文件

个人的web.xml的springMVC的配置如下:

  <!--springMVC核心控制器-->
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

引入freemarker包



使用的是maven进行依赖引入:

    <!-- https://mvnrepository.com/artifact/org.freemarker/freemarker -->
    <dependency>
      <groupId>org.freemarker</groupId>
      <artifactId>freemarker</artifactId>
      <version>2.3.23</version>
    </dependency>

配置freemarker的视图解析器

    <!-- 设置freeMarker的配置文件路径 -->
    <bean id="freemarkerConfiguration" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
        <property name="location" value="classpath:conf/freemarker.properties"/>
    </bean>

    <!-- 配置freeMarker的模板路径 -->
    <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <property name="freemarkerSettings" ref="freemarkerConfiguration"/>
        <property name="templateLoaderPath">
            <value>/WEB-INF/ftl/</value>
        </property>
    </bean>

    <!-- 配置freeMarker视图解析器 -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/>
        <property name="contentType" value="text/html; charset=utf-8"/>
        <property name="cache" value="true"/>
    </bean>

小说明:

第一个bean:是freemarker的相关配置bean,这里使用properties配置文件的方式配置,也可以使用xml方式。也指定了配置文件在classpath下的conf文件夹中的freemarker.properties文件


第二个bean:配置freemarker的模板路径,也就是ftl文件位置


第三个bean:配置freemarker的视图解析器,指定好渲染类、解析类型和缓存的使用


freemarker.properties的配置

注意位置要与第一个bean配置位置一致,否则找不到,配置方式如下:

#设置标签类型:square_bracket:[]     auto_detect:[]<>
tag_syntax=auto_detect
#模版缓存时间,单位:秒
template_update_delay=0
default_encoding=UTF-8
output_encoding=UTF-8
locale=zh_CN
#设置数字格式 ,防止出现 000.00
number_format=\#
#变量为空时,不会报错
classic_compatible=true
#这个表示每个freemarker的视图页面都会自动引入这个ftl文件。里面定议的就是一些宏,如text文本框,各种form元素
#auto_import="/WEB-INF/templates/index.ftl" as do

这里附上前辈的说明:

这个模版属性是比较基本的定义,其中比较重要的是最后一条:auto_import="/WEB-INF/templates/index.ftl" as do,这个表示每个freemarker的视图页面都会自动引入这个ftl文件。里面定议的就是一些宏,如text文本框,各种form元素(本文没作深入研究。)

关于freemarker的配置文件详解参考:http://blog.csdn.net/maoyuanming0806/article/details/77885985


controller编写

package cn.mym.crud.controller;

/**
 * Created by mym on 2017/9/7.
 */
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class FreemarkerController {

    @RequestMapping("/hello")
    public String sayHello(ModelMap map){
        System.out.println("say hello ……");

        map.put("name", "mym");

        return "/hello.ftl";
    }

}

freemarker模板文件编写

注意:模板文件位置要与在springmvc配置文件中一致,否则找不到,根据配置放在:/WEB-INF/ftl/

<pre class="java" name="code">
<html>
<body>
    <h1>this is a freemarker demo! ${name}</h1><br/>
    1 + 1 = 3? ${(1 != 1)?string("yes", "no")}
</body>
</html>
</pre>
<br>

然后启动服务器:

测试


访问:

三种方式都可以: 
由于我用的是intellij idea,修改了项目的根访问目录为/,所以访问连接才是如下的,重点关注访问hello的后缀

http://localhost:8080/hello

http://localhost:8080/hello.htm

http://localhost:8080/hello.html

如:

第一

第二:



第三:


若报错:Caused by: java.lang.NoClassDefFoundError: org/springframework/ui/freemarker/FreeMarkerConfigurationFactory

则说明少了jar包,spring-context-support


加入:

    <!--这个一定要有、不用报错-->
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>4.3.7.RELEASE</version>
    </dependency>

再次启动就应该没问题了


这是一个最简单的demo,相关的freemarker语法关注其它文章

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值