Freemarker

Freemarker是一种模板技术
模板 + 数据 = 结果

在D盘下创建一个ftl文件夹,创建一个文本文档,命名为introduce.ftl
添加内容:

${name}:纵行山河万里,肆意九州五岳!
${skil}:龙战于野!

<#list 1..3 as t>
这是第${t}次循环哦!

创建一个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());
	}

}

运行结果:
Freemarker_第1张图片
实际上,分为四步:
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);
	
	}
}

运行结果:
Freemarker_第2张图片

你可能感兴趣的:(Web,Java)