使用FreeMarker生成Html静态文件(实例)

本文介绍了一种利用FreeMarker模板引擎将动态新闻内容转换为静态HTML文件的方法。通过加载新闻项并应用模板,该过程能够高效地完成静态页面的生成工作。

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

模板: 
  

<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">   <href="index.jsp">返回</a>   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;          </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
            }
 
            
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
            }
 
        }
    
  
  
    
}
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值