使用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、付费专栏及课程。

余额充值