一:freemarker是什么?

freemarker是一个模板引擎,基于定义的模板和数据生成对应的文本(HTML,xml,java等),是一个生成文本的工具。

二:freemarker的使用方法

(1)在工程中引入freemarker相关的依赖

<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>

(2)使用的步骤

第一步:创建一个Configuration对象,直接new一个即可,构造参数是freemarker的版本号

第二步:设置模板文件所在的路径,需要给出在磁盘上储存的全路径

第三步:设置生成的文件的编码格式,一般为utf-8格式

第四步:加载模板,创建模板对象

第五步:创建模板使用的数据集,可以使pojo也可以是map类型的

第六步:创建Write流对象,将文件文件输出,需要指定生成的文件的名称

第七步:调用模板的process方法,生成相应的文本

第八步:关闭流

@Test
public void genFile() throws Exception {
// 第一步:创建一个Configuration对象,直接new一个对象。构造方法的参数就是freemarker对于的版本号。
Configuration configuration = new Configuration(Configuration.getVersion());
// 第二步:设置模板文件所在的路径。
configuration.setDirectoryForTemplateLoading(new File("D:/workspace/item-web/src/main/webapp/WEB-INF/ftl"));
// 第三步:设置模板文件使用的字符集。一般就是utf-8.
configuration.setDefaultEncoding("utf-8");
// 第四步:加载一个模板,创建一个模板对象。
Template template = configuration.getTemplate("hello.ftl");
// 第五步:创建一个模板使用的数据集,可以是pojo也可以是map。一般是Map。
Map dataModel = new HashMap<>();
//向数据集中添加数据
dataModel.put("hello", "this is my first freemarker test.");
// 第六步:创建一个Writer对象,一般创建一FileWriter对象,指定生成的文件名。
Writer out = new FileWriter(new File("D:/temp/out/hello.html"));
// 第七步:调用模板对象的process方法输出文件。
template.process(dataModel, out);
// 第八步:关闭流。
out.close();
}

(3)模板的语法

1.访问map中的key

${key}即可获得对应的value值

2.访问pojo中的属性

以student对象为例: ${student.id}  ${student.name}即可取得student对象中的id值和name值

3.去集合中的元素

例如:遍历学生对象集合,取出每一个学生的id值和name值

<#list studentList as student>

  ${student,id} ${student.name}

<#list>

4.取集合中的下标

<#list studentList as student>

  对象+下划线+index 即可获得下标值

  ${student_index}

<#list>

5.判断

<#list sutdnetList as student>

  进行奇偶数的判断

  <#if student_index % 2 ==0>

    //偶数的处理过程

  <#else>

    //奇数的处理过程

  <#if>

<#list>

6.日期类型的格式化

${date?date}  当前日期

${date?time}  当前时间

${date?datetime} 当前日期和时间

${date?string("yyyy-MM-dd hh:mm:ss")} 设置日期格式

7.NULL的处理

!对输出的控制处理,只输出,无返回值

${name} 如果name为空就会报错

${name!}如果name为空,不会报错,没有输出

${name!"默认值'} 如果name为空,就会输出默认值

${name!666}如果name为空,会输出666

${student.name}如果student或者name为空,报错

${student.name!"默认值"}如果student为空,会报错,name为空,输出默认值

??测试是否为null,返回Boolean类型的值

product.color??将只测试color是否为null


(product.color)??将测试product和color是否存在null 


??和?的区别

??是判断对象是否为空,例如:<#if object??>object对象不为空(即object存在)</#if>

?后面要加内建函数名,例如:<#if object?exists>object对象不为空(即object存在)</#if>

<#if str??>${str?string}</#if><#--将str以字符串形式显示-->

8.include标签

<#include “模板名称“>

三:freemarker和spring的整合

(1)将Configuration对象的创建交给spring统一管理,为该对象注入两个属性,模板路径和文件的编码格式

<bean id="freemarkerConfig"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/ftl/" />
<property name="defaultEncoding" value="UTF-8" />
</bean>

(2)进行测试

@Controller
public class HtmlGenController { @Autowired
private FreeMarkerConfigurer freeMarkerConfigurer; @RequestMapping("/genhtml")
@ResponseBody
public String genHtml()throws Exception {
// 1、从spring容器中获得FreeMarkerConfigurer对象。
// 2、从FreeMarkerConfigurer对象中获得Configuration对象。
Configuration configuration = freeMarkerConfigurer.getConfiguration();
// 3、使用Configuration对象获得Template对象。
Template template = configuration.getTemplate("hello.ftl");
// 4、创建数据集
Map dataModel = new HashMap<>();
dataModel.put("hello", "1000");
// 5、创建输出文件的Writer对象。
Writer out = new FileWriter(new File("D:/temp/term197/out/spring-freemarker.html"));
// 6、调用模板对象的process方法,生成文件。
template.process(dataModel, out);
// 7、关闭流。
out.close();
return "OK";
}
}

错误的地方希望大家指正。

freemarker的使用的更多相关文章

  1. spring源码分析之freemarker整合

    FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页.电子邮件.配置文件.源代码等)的通用工具. 它不是面向最终用户的,而是一个Java类库,是一款程 ...

  2. Maven 整合FreeMarker使用

    pom.xml <!-- freemarker jar --> <dependency> <groupId>org.freemarker</groupId&g ...

  3. JAVA FreeMarker工具类

    FreeMarkerUtil.java package pers.kangxu.datautils.utils; import java.io.File; import java.io.StringW ...

  4. FreeMarker:怎么使用

    第一个FreeMarker程序 1. 建立一个普通的java项目:testFreeMarker 2. 引入freemarker.jar包 3. 在项目目录下建立模板目录:templates 4. 在t ...

  5. FreeMarker的基础语法

    FreeMarker语言 FreeMarker语言概述 FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写. FreeMarker被设计用来生成HTML Web ...

  6. freemarker页面中文乱码

    一.前言 简单的记录freemarker遇到的错误问题:ftl页面中文乱码 由于freemarker整合在ssm框架中,所以笔者直接贴配置代码 <beans xmlns="http:/ ...

  7. Spring 4 使用Freemarker模板发送邮件&添加附件

    前言 Spring对Java的邮件发送提供了很好的支持,提供了超级简单的API,大大简化了Java邮件发送功能的开发. Spring对Email的支持是基于JavaMail API开发的,所以,我们在 ...

  8. Freemarker 程序开发

    Freemarker 程序开发 现在web开发中,多使用freemarker 来描述页面.通常会使用的macro来定义各种组件,从而达到UI组件的复用.结合使用其它的指定,可快速的描述一个html页面 ...

  9. 第一个spring、springmvc、mybatis、freemarker项目小知识(一)

    1.持久层开发(Mybatis)    1.1 添加,非空字段必须给值,不是非空加判断,有值添加无值不添    1.2 删除,注意外键关系的级联删除.(事务传播行为)    1.3 更新,每个字段单独 ...

  10. myeclipse环境下开发freemarker

    最近在着手一个项目,其中就要使用到freemarker模版,当把html漂亮写完时,改写成freemarker时,问题来了.全屏都是白底黑色,没有高亮显示,没有语法提示,不能格式化.看着眼花,还容易出 ...

随机推荐

  1. 【API调用】腾讯云短信

    在之前介绍的火车票查询工具中,利用邮件和短信将查询结果推送给用户.免费短信的条数只有5条,用完之后只能单独使用邮件提醒. 最近发现腾讯云的福利,简单的介绍一下用法. 腾讯云->产品->通信 ...

  2. 列表(list)之三 -如何较为均匀的将任意字符串按指定组数分组,方差最少

    当字符串的长度不是份数的整数倍时如何均匀地分割,例如:长度为11的字符串要分割成4份,有很多种分法,比如3, 3, 3, 2(前3个字符一份,中间3个一份,再中间3个一份,最后2个一份)这种是比较均匀 ...

  3. YARN中FIFO、Capacity以及Fari调度器的详细介绍

    (1)FIFO Scheduler 将所有的Applications放到队列中,先按照作业的优先级高低.再按照到达时间的先后,为每个app分配资源.如果第一个app需要的资源被满足了,如果还剩下了资源 ...

  4. [LeetCode] Decode Ways II 解码方法之二

    A message containing letters from A-Z is being encoded to numbers using the following mapping way: ' ...

  5. 《linux 网络日志分析与流量监控》记录

    mac中有个本机连接vpn的日志,/private/var/log/ppp.log   消除日志(echo "" >/private/var/log/ppp.log ) li ...

  6. Mac 下升级 vim 并自己配置 vim 的过程

    1.升级 vim 我自己 MacBook Pro 的系统还是 10.11 ,其自带的 vim 版本为 7.3 ,我们将其升至最新版: 使用 homebrew : brew install vim -- ...

  7. [Codeforces 922E]Birds

    Description 题库链接 一条直线上有 \(n\) 棵树,每棵树上有 \(c_i\) 只鸟,在一棵树底下召唤一只鸟的魔法代价是 \(cost_i\) 每召唤一只鸟,魔法上限会增加 \(B\) ...

  8. bzoj4896 补退选

    Description X是T大的一名老师,每年他都要教授许多学生基础的C++知识.在T大,每个学生在每学期的开学前都需要选课,每 次选课一共分为三个阶段:预选,正选,补退选:其中"补退选& ...

  9. hdu 3948 后缀数组

    The Number of Palindromes Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 262144/262144 K (J ...

  10. Git常用命令及常见问题解决

    $ mkdir xxx       ----创建xxx目录 $ cd learngit     ----切到xxx目录下 $ pwd               ----查看当前文件所在目录 $ gi ...