您的位置:首页 > Web前端 > HTML

freemarker生成静态html文件

2014-05-04 21:37 323 查看
原文地址:点击打开链接

以下是我在生成新闻的静态文件时用到的代码.仅供参考.请根据实际情况修改.

模板:  

  

<html>

<head>

<title>查看文章: ${newsitem.title} </title>

</head>

<body>

<table width="100%" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF">

<tr><td>

<table width="95%" border="0" align="center" cellpadding="2" cellspacing="6" >

<tr> 

        <td height="10" align="left" colspan=2 ></td>

      </tr>

      <tr>

          <td align="left" width="538" >

          <strong>${newsitem.title}</strong> ( ${newsitem.addtime} )

            </td>

            <td align="right">

     <a href="index.jsp">返回</a>

             

            </td>

      </tr>

      <tr>                      

           <td align="left" valign=top colspan=2>

           <hr align="left"    width="95%" size="1" noshade color="#cc0000" >

           </td>

      </tr>

      <tr>                      

        <td colspan=2>${newsitem.showContent}

     </td>

      </tr>

</table>            

            

<br>

</td></tr>

</table>

</body>

</html>

 

代码:  

  

import java.io.*;

import java.util.HashMap; 

import java.util.Map;

import org.apache.commons.logging.Log; 

import org.apache.commons.logging.LogFactory; 

import freemarker.template.*; 

/*

* Created on 2005-4-7 



*/ 

  

/** 

* 测试FreeMarker. 



* @author scud 



*/ 

public class FreeMarkerTest 



  

          private final Log logger = LogFactory.getLog(getClass()); 

        

          private Configuration freemarker_cfg = null; 

        

        

        

          public static void main(String[] args) 

          { 

            //@todo 自己的一个类 

              NewsItem aItem = null; 

            

            //@todo 装入新闻 

              //NewsItem = loadNewsItem(1); 

                

              FreeMarkerTest test = new FreeMarkerTest(); 

            

              Map root = new HashMap(); 

              root.put("newsitem", aItem); 

  

              String sGeneFilePath = "/tpxw/"; 

            

              String sFileName = "1.htm"; 

  

              boolean bOK = test.geneHtmlFile("/tpxw/view.ftl",root, sGeneFilePath,sFileName); 

            

          } 

        

  

          /** 

           * 获取freemarker的配置. freemarker本身支持classpath,目录和从ServletContext获取. 

           */ 

          protected Configuration getFreeMarkerCFG() 

          { 

              if (null == freemarker_cfg) 

              { 

                  // Initialize the FreeMarker configuration; 

                  // - Create a configuration instance 

                  freemarker_cfg = new Configuration(); 

  

                  // - FreeMarker支持多种模板装载方式,可以查看API文档,都很简单:路径,根据Servlet上下文,classpath等等 

                

                  //htmlskin是放在classpath下的一个目录 

                  freemarker_cfg.setClassForTemplateLoading(this.getClass(), "/htmlskin"); 

              } 

            

              return freemarker_cfg; 

          } 

  

          /** 

           * 生成静态文件. 

           * 

           * @param templateFileName 模板文件名,相对htmlskin路径,例如"/tpxw/view.ftl" 

           * @param propMap 用于处理模板的属性Object映射 

           * @param htmlFilePath 要生成的静态文件的路径,相对设置中的根路径,例如 "/tpxw/1/2005/4/" 

           * @param htmlFileName 要生成的文件名,例如 "1.htm" 

           */ 

          public boolean geneHtmlFile(String templateFileName,Map propMap, String htmlFilePath,String htmlFileName ) 

          { 

               //@todo 从配置中取得要静态文件存放的根路径:需要改为自己的属性类调用 

              String sRootDir = "e:/webtest/htmlfile" ; 

            

              try 

              { 

                  Template t = getFreeMarkerCFG().getTemplate(templateFileName); 

  

                  //如果根路径存在,则递归创建子目录 

                  creatDirs(sRootDir,htmlFilePath); 

                

                  File afile = new File(sRootDir +"/" +htmlFilePath + "/" + htmlFileName); 

  

                  Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(afile))); 

  

                  t.process(propMap, out); 

              } 

              catch (TemplateException e) 

              { 

                  logger.error("Error while processing FreeMarker template " + templateFileName,e); 

                  return false; 

              } 

4000
              catch (IOException e) 

              { 

                  logger.error("Error while generate Static Html File " + htmlFileName,e); 

                  return false; 

              } 

  

              return true; 

          } 

        

        

  

          /** 

           * 创建多级目录 

           * 

           * @param aParentDir String 

           * @param aSubDir    以 / 开头 

           * @return boolean 是否成功 

           */ 

          public static boolean creatDirs(String aParentDir, String aSubDir) 

          { 

              File aFile = new File(aParentDir); 

              if (aFile.exists()) 

              { 

                  File aSubFile = new File(aParentDir + aSubDir); 

                  if (!aSubFile.exists()) 

                  { 

                      return aSubFile.mkdirs(); 

                  } 

                  else 

                  { 

                      return true; 

                  } 

              } 

              else 

              { 

                  return false; 

              } 

          }    

  

  

    

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  freemarker