Freemarker是一种模板技术
模板 + 数据 = 结果
在D盘下创建一个ftl文件夹,创建一个文本文档,命名为introduce.ftl
添加内容:
${name}:纵行山河万里,肆意九州五岳!
${skil}:龙战于野!
<#list 1..3 as t>
这是第${t}次循环哦!
#list>
创建一个FreemarkerDemo Maven项目。
在pom.xml配置文件中引入依赖,添加代码:
org.freemarker
freemarker
2.3.23
创建一个util包,创建一个HelloFreemarker类,添加代码:
package util;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
public class HelloFreemarker {
public static void main(String[] args) throws IOException, TemplateException {
//基础配置
Configuration cfg = new Configuration();
cfg.setDefaultEncoding("UTF-8");
cfg.setDirectoryForTemplateLoading(new File("D:/ftl"));
//读取模板文件
Template tmp = cfg.getTemplate("introduce.ftl");
//准备数据
Map data = new HashMap<>();
data.put("name","韩信");
data.put("skil","技能");
//加工合成
StringWriter sw = new StringWriter();
tmp.process(data,sw);
System.out.println(sw.toString());
}
}
运行结果:
实际上,分为四步:
1. 加载基础配置,说明一下用什么字符集,从哪里读取。
2. 加载配置文件(读取模板文件)
3. 准备数据
4. 加工合成
---------------------------------------------------------------------------------------------------------------------------------------
编写FreemarkerHelper工具类
创建一个FreemarkerHelper类,添加代码:
package util;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.StringWriter;
import java.io.Writer;
import java.net.URL;
import java.net.URLDecoder;
import java.util.Map;
import freemarker.template.Configuration;
import freemarker.template.Template;
/**
* Freemarker工具类
*/
public class FreemarkerHelper {
private static final String CHARSET = "UTF-8";
private static Configuration cfg = null;
static{
cfg = new Configuration();
cfg.setDefaultEncoding(CHARSET);
try {
URL url = FreemarkerHelper.class.getClassLoader().getResource("");
String classpath = URLDecoder.decode(url.toString(),CHARSET).substring(6);
cfg.setDirectoryForTemplateLoading(new File(classpath, "ftl"));
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 加工模板,输出到控制台(测试用)
*/
public static void processToConsole(String ftlName,Map data) throws Exception{
OutputStreamWriter osw = new OutputStreamWriter(System.out);
Template tmp = getTemplate(ftlName);
tmp.process(data, osw);
}
/**
* 加工模板,输出到文件
*/
public static void processToFile(String ftlName,Map data,String fileAbsPath) throws Exception{
File file = new File(fileAbsPath);
if(!file.getParentFile().exists()){
file.getParentFile().mkdirs();
}
FileOutputStream fos = new FileOutputStream(file);
process(ftlName, data, fos);
}
/**
* 加工模板,输出到文件
*/
public static void processToFile(String ftlName,Map data,File outFile) throws Exception{
FileOutputStream fos = new FileOutputStream(outFile);
process(ftlName, data, fos);
}
/**
* 加工模板,输出到OutputStream
*/
public static void process(String ftlName,Map data,OutputStream out) throws Exception{
OutputStreamWriter osw = new OutputStreamWriter(out,CHARSET);
Template tmp = getTemplate(ftlName);
tmp.process(data, osw);
osw.close();
}
/**
* 加工模板,输出到OutputStreamWriter
*/
public static void process(String ftlName,Map data,Writer writer) throws Exception{
Template tmp = getTemplate(ftlName);
tmp.process(data, writer);
writer.close();
}
/**
* 加工模板,返回字符串
* @param ftlName
* @param data
* @return
*/
public static String processToString(String ftlName,Map data) throws Exception{
StringWriter sw = new StringWriter();
Template tmp = getTemplate(ftlName);
tmp.process(data, sw);
return sw.toString();
}
public static Template getTemplate(String ftlName) throws Exception{
return cfg.getTemplate(ftlName);
}
}
---------------------------------------------------------------------------------------------------------------------------------------
Freemarker常用语法
Freemarker的基本语法及入门
---------------------------------------------------------------------------------------------------------------------------------------
激活用户的Freemarker邮件模板
在resources目录下创建一个ftl文件夹。
创建一个mail文件夹。
创建一个active_user.ftl文件。
添加代码:
尊敬的${username!},您好
我们已经相识一个月了,感谢您这一个月对我们的支持和包容,这一个月相信我们对您还是有所帮助的,我们希望与您一同成长,为自己的明天加油。
在这一个月中,已有9999经理人在xx网找到了心仪工作,马上投递,迈出在xx网的第一步!
点击一下链接,会有额外惊喜哦!
${url}
创建一个Test类,添加代码:
package util;
import java.util.HashMap;
import java.util.Map;
public class Test {
public static void main(String[] args) throws Exception {
Map data = new HashMap();
data.put("username","赵云");
data.put("url","https://www.baidu.com");
FreemarkerHelper.processToConsole("mail/active_user.ftl",data);
}
}