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


模板: 

< 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 > 
& 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. * ; 
 
 
 
 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); 

 } 



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; 
 } 


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 ; 
 } 




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 ; 
 } 
 } 
}