Freemarker是曾经很流行的一个模板库,它是一种通用的模板库,不仅仅可以用来渲染html。
模板可以分为两类:

  • 只能生成特殊类型文件的模板,如jinja、django、Thymeleaf、jade等模板只能生成HTML
  • 通用型模板,如mustache、Freemarker

本文展示Freemarker的基本用法,实现一个render(context,templatePath)函数来根据context渲染templatePath路径下的Freemarker模板。

maven依赖

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

Freemarker.java

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.Version;import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.Map;public class Freemarker {
Configuration conf;public Freemarker(Path templatePath) {conf = new Configuration(new Version(2, 3, 23));conf.setDefaultEncoding("utf8");try {conf.setDirectoryForTemplateLoading(templatePath.toFile());} catch (IOException e) {e.printStackTrace();}
}public void render(Object obj, String templatePath, PrintWriter out) {try {Template template = conf.getTemplate(templatePath);template.process(obj, out);out.flush();} catch (IOException | TemplateException e) {e.printStackTrace();}
}public String render(Object obj, String templatePath) {StringWriter cout = new StringWriter();PrintWriter writer = new PrintWriter(cout);render(obj, templatePath, writer);writer.close();return cout.toString();
}public static void main(String[] args) throws IOException, TemplateException {Map<String, Integer> ma = new HashMap<>();ma.put("one", 1);ma.put("two", 2);ma.put("three", 3);String ans = new Freemarker(Paths.get(".")).render(ma, "haha.ftl");System.out.println(ans);
}
}

转载于:https://www.cnblogs.com/weiyinfu/p/11102141.html

Freemarker简单封装相关推荐

  1. Android APP更新下载工具类——简单封装DownloadManager

    几乎所有APP都包含了检查更新功能,更新下载功能的实现方式常用的有两种:1.使用App网络框架的文件下载请求:2.使用自带的DownloadManager类:本文介绍第二种,简单封装一下Downloa ...

  2. 简单封装浏览器 cookie 工具类

    版权声明:本文首发 http://asing1elife.com ,转载请注明出处. https://blog.csdn.net/asing1elife/article/details/8265571 ...

  3. 小程序简单封装 request 请求

    我在这里做了详细的介绍 : 小程序简单封装 request 请求 转载于:https://www.cnblogs.com/biangz/p/9984340.html

  4. 简单封装 HTTP 请求

    2017-2-19 更新到第二版: 源码地址:http://git.oschina.net/sp42/ajaxjs/tree/master/ajaxjs-base/src/com/ajaxjs/net ...

  5. 【JDBC】实现对JDBC 连接的简单封装

    package util;import java.sql.Connection; import java.sql.DriverManager;/**** 实现对JDBC 的封装* @author mq ...

  6. Android AsyncTask 深度理解、简单封装、任务队列分析、自定义线程池

    前言:由于最近在做SDK的功能,需要设计线程池.看了很多资料不知道从何开始着手,突然发现了AsyncTask有对线程池的封装,so,就拿它开刀,本文将从AsyncTask的基本用法,到简单的封装,再到 ...

  7. ios开发之使用多文件上传的简单封装最原始的

    ios开发之使用多文件上传的简单封装最原始的 // // ViewController.m // 18-上传多个文件 // // Created by 鲁军 on 2021/2/13. //#impo ...

  8. Spring jdbc 对象Mapper的简单封装

    一般查询实体的时候,都需要这么使用/**      * 根据id查询      *       * @return      */     public Emp queryEmpById(Intege ...

  9. Google图片加载库Glide的简单封装GlideUtils

    Google图片加载库Glide的简单封装GlideUtils  

最新文章

  1. iOS支付宝(Alipay)接入详细流程,比微信支付更简单,项目实战中的问题分析
  2. matlab 判断文件有多少行,在Matlab中有没有办法确定文件中的行数,而不是循环遍历每一行?...
  3. java调用第三方的webservice应用实例
  4. 子程序调用编程序例子_汇编程序设计:LCD1602静态显示
  5. 好文!2020届最新互联网校招薪资大全!
  6. bzoj 3625(CF 438E)The Child and Binary Tree——多项式开方
  7. Atitit 项目管理 提升开发效率的项目流程方法模型 哑铃型  橄榄型 直板型
  8. java 新建项目_java怎么新建项目?java新建项目实操案例
  9. Linux 拷贝文件
  10. iOS 开发常见崩溃分析
  11. Python 破解 MD5 暗号
  12. 【线代】线性方程组求解概念:齐次/非齐次方程的解?非零解、无穷多解、求解、求通解、方程有解时求全部解,是什么意思?
  13. 好评不断的文化纪录片《中国》,背后的“剪刀手”竟是它?
  14. linux给文件夹腹权限,文件的权限_腹有诗书气自华的技术博客_51CTO博客
  15. 房屋安全鉴定现场检测主要检测哪些内容
  16. ubuntu18.04系统中 matlab2019 和 sougou拼音冲突
  17. java语言【#106. 求绝对值】(已通过)
  18. Linux Device tree(二) - DT分析
  19. 美国NIST公布首批后量子密码标准算法
  20. php下载文件并重命名,通过php下载文件并重命名

热门文章

  1. sql server 中DateName()函数及DatePart()函数
  2. 20165115 2017-2018-2 《Java程序设计》第六周学习总结
  3. PyQt4 的事件与信号 -- 发射信号
  4. 仿百度地图全景小球旋转
  5. JS框架设计读书笔记之-函数
  6. asp.net中使用excel类导出Excel文件,并导出到web客户端中遇到的问题
  7. pku 3683 Priest John's Busiest Day 2-sat判断有误解+输出可行解
  8. 【恋上数据结构】计数排序
  9. 读书_w3c架构师01通用设计与方法论
  10. nvm、npm、nodejs的关系