Freemarker简单封装
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简单封装相关推荐
- Android APP更新下载工具类——简单封装DownloadManager
几乎所有APP都包含了检查更新功能,更新下载功能的实现方式常用的有两种:1.使用App网络框架的文件下载请求:2.使用自带的DownloadManager类:本文介绍第二种,简单封装一下Downloa ...
- 简单封装浏览器 cookie 工具类
版权声明:本文首发 http://asing1elife.com ,转载请注明出处. https://blog.csdn.net/asing1elife/article/details/8265571 ...
- 小程序简单封装 request 请求
我在这里做了详细的介绍 : 小程序简单封装 request 请求 转载于:https://www.cnblogs.com/biangz/p/9984340.html
- 简单封装 HTTP 请求
2017-2-19 更新到第二版: 源码地址:http://git.oschina.net/sp42/ajaxjs/tree/master/ajaxjs-base/src/com/ajaxjs/net ...
- 【JDBC】实现对JDBC 连接的简单封装
package util;import java.sql.Connection; import java.sql.DriverManager;/**** 实现对JDBC 的封装* @author mq ...
- Android AsyncTask 深度理解、简单封装、任务队列分析、自定义线程池
前言:由于最近在做SDK的功能,需要设计线程池.看了很多资料不知道从何开始着手,突然发现了AsyncTask有对线程池的封装,so,就拿它开刀,本文将从AsyncTask的基本用法,到简单的封装,再到 ...
- ios开发之使用多文件上传的简单封装最原始的
ios开发之使用多文件上传的简单封装最原始的 // // ViewController.m // 18-上传多个文件 // // Created by 鲁军 on 2021/2/13. //#impo ...
- Spring jdbc 对象Mapper的简单封装
一般查询实体的时候,都需要这么使用/** * 根据id查询 * * @return */ public Emp queryEmpById(Intege ...
- Google图片加载库Glide的简单封装GlideUtils
Google图片加载库Glide的简单封装GlideUtils
最新文章
- iOS支付宝(Alipay)接入详细流程,比微信支付更简单,项目实战中的问题分析
- matlab 判断文件有多少行,在Matlab中有没有办法确定文件中的行数,而不是循环遍历每一行?...
- java调用第三方的webservice应用实例
- 子程序调用编程序例子_汇编程序设计:LCD1602静态显示
- 好文!2020届最新互联网校招薪资大全!
- bzoj 3625(CF 438E)The Child and Binary Tree——多项式开方
- Atitit 项目管理 提升开发效率的项目流程方法模型 哑铃型 橄榄型 直板型
- java 新建项目_java怎么新建项目?java新建项目实操案例
- Linux 拷贝文件
- iOS 开发常见崩溃分析
- Python 破解 MD5 暗号
- 【线代】线性方程组求解概念:齐次/非齐次方程的解?非零解、无穷多解、求解、求通解、方程有解时求全部解,是什么意思?
- 好评不断的文化纪录片《中国》,背后的“剪刀手”竟是它?
- linux给文件夹腹权限,文件的权限_腹有诗书气自华的技术博客_51CTO博客
- 房屋安全鉴定现场检测主要检测哪些内容
- ubuntu18.04系统中 matlab2019 和 sougou拼音冲突
- java语言【#106. 求绝对值】(已通过)
- Linux Device tree(二) - DT分析
- 美国NIST公布首批后量子密码标准算法
- php下载文件并重命名,通过php下载文件并重命名
热门文章
- sql server 中DateName()函数及DatePart()函数
- 20165115 2017-2018-2 《Java程序设计》第六周学习总结
- PyQt4 的事件与信号 -- 发射信号
- 仿百度地图全景小球旋转
- JS框架设计读书笔记之-函数
- asp.net中使用excel类导出Excel文件,并导出到web客户端中遇到的问题
- pku 3683 Priest John's Busiest Day 2-sat判断有误解+输出可行解
- 【恋上数据结构】计数排序
- 读书_w3c架构师01通用设计与方法论
- nvm、npm、nodejs的关系