freemarker生成静态页面

public class TemplateManager {
 public static Logger logger = Logger.getLogger(TemplateManager.class
   .getName());

 private static TemplateManager templateManager = null;
 private Configuration cfg = null;

 public TemplateManager() {
  // 设置freemarker的参数
  cfg = new Configuration();
  // setDirectoryForTemplateLoading("/template");
  cfg.setObjectWrapper(new DefaultObjectWrapper());
  cfg.setDefaultEncoding("utf-8");
 }

 /**
  * 取得模板处理的实例
  *
  * @return templateManager 模板处理实例
  */
 public synchronized static TemplateManager getInstance() {
  if (templateManager == null) {
   templateManager = new TemplateManager();
  }
  return templateManager;
 }

 /**
  * 生成静态文件<br/>
  * [概要]<br/>
  * <p>
  * 读取模板文件生成静态文件
  * </p>
  *
  * [详细]<br/>
  * <ol>
  * <li>取得模板文件</li>
  * <li>设置生成文件路径</li>
  * <li>载入objectMap中的内容生成文件</li>
  * </ol>
  *
  * @param templateFolder
  *            模板相对于classpath的路径
  * @param templateFileName
  *            模版名称
  * @param htmlFolder
  *            要生成的静态文件的目录
  * @param htmlFileName
  *            要生成的文件名
  * @param objectMap
  *            模板中对象集合
  * @return boolean 是否生成成功
  */
 public void buildFile(String templateFolder, String templateFileName,
   String htmlFolder, String htmlFileName, Map objectMap)
   throws BuildHtmlException {
  this.buildFile(templateFolder, templateFileName,
    StringUtils.applyRelativePath(htmlFolder, htmlFileName),
    objectMap);
 }

 /**
  * 生成静态文件<br/>
  * [概要]<br/>
  * <p>
  * 读取模板文件生成静态文件
  * </p>
  *
  * [详细]<br/>
  * <ol>
  * <li>取得模板文件</li>
  * <li>设置生成文件路径</li>
  * <li>载入objectMap中的内容生成文件</li>
  * </ol>
  *
  * @param templateFolder
  *            模板相对于classpath的路径
  * @param templateFileName
  *            模版名称
  * @param htmlFilePath
  *            要生成的静态文件的路径
  * @param objectMap
  *            模板中对象集合
  * @return boolean 是否生成成功
  */
 public void buildFile(String templateFolder, String templateFileName,
   String htmlFilePath, Map objectMap) throws BuildHtmlException {
  Writer out = null;
  try {
   // configuration.setClassForTemplateLoading(this.getClass(),
   // templateFolder);
   cfg.setDirectoryForTemplateLoading(new File(templateFolder));
   Template template = cfg.getTemplate(templateFileName);
   template.setEncoding("UTF-8");
   // 创建生成文件目录
   File htmlFile = new File(htmlFilePath);
   out = new BufferedWriter(new OutputStreamWriter(
     new FileOutputStream(htmlFile), "UTF-8"));
   template.process(objectMap, out);
   out.flush();
  } catch (TemplateException ex) {
   logger.error("Build Error" + templateFileName, ex);
   throw new BuildHtmlException(ex.getMessage());
  } catch (IOException e) {
   logger.error("Build Error" + templateFileName, e);
   throw new BuildHtmlException(e.getMessage());
  } finally {
   try {
    out.close();
   } catch (IOException e) {
    logger.error(e.getMessage(), e);
   }
  }
 }

 /**
  * 生成多个文件
  *
  * @param templateFolder
  *            模板目录
  * @param templateMap
  *            模板和文件对应的映射
  * @param objectMap
  *            对象Map
  */
 public void buildFiles(String templateFolder, Map templateMap, Map objectMap) {
  Set set = templateMap.entrySet();
  Iterator iterator = set.iterator();
  Map.Entry entry = null;
  String templateFileName = null;
  String filePath = null;
  while (iterator.hasNext()) {
   entry = (Map.Entry) iterator.next();
   templateFileName = (String) entry.getKey();
   filePath = (String) entry.getValue();
   this.buildFile(templateFolder, templateFileName, filePath,
     objectMap);
  }
 }

}

控制器中使用:

//获取应用路径
  String path =  httpSession.getServletContext().getRealPath("/");

 Map<String ,Object> map = new HashMap<String ,Object>();
 map.put("topContents", topContentList);//放入一个对象

 //构造模版
  TemplateManager templateManager = new TemplateManager();

 //生成静态页面
  templateManager.buildFile(path+"WEB-INF/templates/", "index.ftl", path+"index.html", map);
  return null;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值