免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1370 | 回复: 0
打印 上一主题 下一主题

使用FreeMarker生成Html静态文件(实例) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-18 17:55 |只看该作者 |倒序浏览

以下是我在生成新闻的静态文件时用到的代码.仅供参考.请根据实际情况修改.
  
     
      模板:
   
     
       
        
查看文章: ${newsitem.title}
         
      
   
   
               
               ${newsitem.title} ( ${newsitem.addtime} )
         
         
                        返回
                                
         
   
                          
         
         
         
   
                          
      ${newsitem.showContent}
          
   
            
            

        
 
   
  

  
     
      代码:
   
      
      
  
          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;
         
                     
          }
         
                  
          }     
            
            
              
           
          }
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/84280/showart_1728299.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP