Freemarker 静态化页面生产方式

freemarker生产报文和静态化页面的方法,最近碰到很多数据时通过MQ报文的方式传输的。想到可以通过freemarker生产静态文件的方式来生成报文:

首先创建一个模板文件,用来生成后续的静态文件:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>  
  <head>  
  <meta http-equiv=Content-Type content="text/html; charset=utf-8">  
    <title>freemarker static page generate</title>  
  </head>  
  <body>  
    <h1>${user.userName}</h1>  
    <h2>${user.userPassword}</h2>  
  </body>  
</html>


然后创建生成静态文件的类

package cn.gov.zjport.mt.freemarker;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;

import cn.gov.zjport.mt.monitor.bean.User;
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;

/**
 * 
 * @author zjport-wll 生产html静态页面
 */
public class FreeMarkerFactory {

	private static FreeMarkerFactory instance;

	public static synchronized FreeMarkerFactory getDefaultInstance() {
		if (instance == null) {
			instance = new FreeMarkerFactory();
		}
		return instance;
	}

	/**
	 * 私有的构造方法
	 */
	private FreeMarkerFactory() {}
	/**
	 * 
	 * @param templatePath
	 *            模板文件的路径
	 * @param templateName
	 *            模板文件
	 * @param htmlPath
	 *            生产的html文件
	 * @param data
	 *            注入的数据
	 */
	public void fillDataToTemplate(String templatePath, String templateName,
			String htmlPath, Map<String, Object> data) {
		try {
			Configuration config = new Configuration();
			// 设置模板文件的路径
			config.setDirectoryForTemplateLoading(findFile(templatePath));
			// 设置包装器类型
			config.setObjectWrapper(new DefaultObjectWrapper());
			// 得到模板文件,编码和文件中的编码要一致
			Template template = config.getTemplate(templateName, "UTF-8");
			// 得到静态文件的输出流
			FileOutputStream out = new FileOutputStream(findFile(htmlPath));
			Writer writer = new OutputStreamWriter(out);
			template.process(data, writer);
			out.flush();
			out.close();
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}

	/**
	 * 得到项目的根路径
	 */
	private String getProjectRoot() {
		return System.getProperty("user.dir");
	}

	/**
	 * 得到文件的绝对路径
	 * 
	 * @param path
	 * @return
	 */
	public String getFilePath(String path) {
		return getProjectRoot() + path;
	}

	/**
	 * 
	 * @param path
	 * @return
	 * @throws Exception
	 */
	private File findFile(String path) throws Exception {
		File file = new File(getFilePath(path));
		if (!file.exists()) {
			throw new Exception("文件路径:" + path + " 不存在!");
		}
		return file;
	}
	public static void main(String[] args) {
		User u = new User() ;
		u.setUserName("test_name") ;
		u.setUserPassword("hahah") ;
		Map<String,Object> data = new HashMap<String,Object>() ;
		data.put("user", u) ;
		FreeMarkerFactory factory = FreeMarkerFactory.getDefaultInstance() ;
		factory.fillDataToTemplate("/template/", "user.ftl", "/template/user.html", data) ;
	}

}
用到的bean文件:

package cn.gov.zjport.mt.monitor.bean;

public class User {
	private String userName ;
	private String userPassword ;
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getUserPassword() {
		return userPassword;
	}
	public void setUserPassword(String userPassword) {
		this.userPassword = userPassword;
	}
	
}

执行后生成的html文件(也可以是自定义的用语消息传递的报文)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>  
  <head>  
  <meta http-equiv=Content-Type content="text/html; charset=utf-8">  
    <title>freemarker static page generate</title>  
  </head>  
  <body>  
    <h1>test_name</h1>  
    <h2>hahah</h2>  
  </body>  
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值