什么是 FreeMarker

  FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。

  模板编写为FreeMarker Template Language (FTL)。它是简单的,专用的语言, 不是 像PHP那样成熟的编程语言。 那就意味着要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,你可以专注于如何展现数据, 而在模板之外可以专注于要展示什么数据。

   

FreeMarker使用

  1、新建一个Maven工程,引入依赖

 <!-- freemarker -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.28</version>
</dependency>

  2、在src/main/resources/templates目录下新建模板-test.ftl

<html>
<head>
<title>Welcome!</title>
</head>
<body>
<h1>Welcome ${user}!</h1>
<p>Our latest product:
<a href="${latestProduct.url}">${latestProduct.name}</a>!
</body>
</html>

  3、编辑测试类

 package com.test.freemarker;

 import java.io.File;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map; import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateExceptionHandler; public class Test { private static final String TEMPLATE_PATH = "src/main/resources/templates"; public static void main(String[] args) throws IOException {
// step1 创建freeMarker配置实例
// 创建freeMarker配置实例
Configuration cfg = new Configuration(Configuration.VERSION_2_3_28);
// 获取模版路径
cfg.setDirectoryForTemplateLoading(new File(TEMPLATE_PATH));
// 设置默认编码格式
cfg.setDefaultEncoding("UTF-8");
// 设置异常处理器
cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); Writer out = null;
try {
// step2 创建数据模型
Map root = new HashMap();
root.put("user", "Big Joe");
Map latest = new HashMap();
root.put("latestProduct", latest);
latest.put("url", "products/greenmouse.html");
latest.put("name", "green mouse"); // step3 加载模版文件
Template temp = cfg.getTemplate("test.ftl"); // step4 生成数据
out = new OutputStreamWriter(System.out);
temp.process(root, out); } catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != out) {
out.flush();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}

  4、运行,结果如下:

    

最新文章

  1. *使用while循环遍历数组创建索引和自增索引值
  2. Android 网络状态检测
  3. 放下恩怨,曝小米中兴投关键性一票让华为顺利取得5G短码控制权
  4. 手机升级到iOS10,用Xcode7.3进行真机调试方法
  5. Linux网络编程-readn函数、writen函数、readline函数实现
  6. CvMat 矩阵的使用方法和简单程序
  7. UITextView打开文字中的URL
  8. [Hibernate] - Study 1
  9. gulp自己主动化任务脚本在HybridApp开发中的使用
  10. Android模拟器报&quot;Failed To Allocate memory 8&quot;错误的解决办法
  11. 【BZOJ2741】【块状链表+可持久化trie】FOTILE模拟赛L
  12. Python学习笔记整理(十)Python的if测试
  13. 【转】C++成员函数的存储方式
  14. Android开发实现透明通知栏
  15. import android.provider.Telephony cannot be resolved
  16. 导航栏项目滑过时子菜单显示/隐藏jquery代码
  17. iOS视频编辑SDK
  18. Erlang Rebar 使用指南之四:依赖管理
  19. SpringBoot使用Mybatis注解开发教程-分页-动态sql
  20. Android Studio自定义组合控件

热门文章

  1. 《少年先疯队》第九次团队作业:Beta冲刺第二天
  2. 运行Vue项目,没办法自动打开浏览器,提示“Unable to open browser. If you are running in a headless environment, please do not use the open flag.”
  3. HDU2870 Largest Submatrix
  4. epoll版http服务器
  5. Hibernate框架的查询方式
  6. 动手动脑-------找出指定文件夹下所有扩展名为.txt和.java的文件
  7. BZOJ 4332: JSOI2012 分零食 FFT+分治
  8. 史上最全java pdf精品书籍整理
  9. ubuntu之路——day8.2 深度学习优化算法之指数加权平均与偏差修正,以及基于指数加权移动平均法的动量梯度下降法
  10. cmd命令net和sc