论坛首页 Java企业应用论坛

抛砖:用freemarker、webwork发布静态页面的方法

浏览 14062 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-12-27  

方法一:(这个方法借鉴freemarker的docs文档Programmer's Guide 的quick start部分,详细请看相关的文档。

java 代码

 

  1. public class HtmlTemplateGenerator {   
  2.   
  3.     Configuration cfg = null;   
  4.        
  5.     public HtmlTemplateGenerator(String templatePath) throws IOException {   
  6.         cfg = new Configuration();   
  7.         cfg.setDefaultEncoding("UTF-8");   
  8.         cfg.setDirectoryForTemplateLoading(new File(templatePath));   
  9.         cfg.setObjectWrapper(new DefaultObjectWrapper());   
  10.     }   
  11.        
  12.     /**  
  13.      * 生成静态文件  
  14.      * @param ftlTemplate ftl模版文件  
  15.      * @param contents    ftl要用到的动态内容  
  16.      * @param savePath    文件保存路径  
  17.      * @param saveFilename 保存文件名  
  18.      * @throws IOException  
  19.      * @throws TemplateException  
  20.      */  
  21.     public void create(String ftlTemplate, Map contents, String savePath, String saveFilename) throws IOException, TemplateException {   
  22.         Template temp = cfg.getTemplate(ftlTemplate);   
  23.         /* Merge data model with template */  
  24.            
  25.         String realPath = ServletActionContext.getServletContext().getRealPath(savePath);   
  26.         System.out.println( saveFilename + ":" + realPath);   
  27.         File file = new File(realPath);   
  28.         if(!file.exists())   
  29.             file.mkdirs();   
  30.            
  31.         Writer out = new OutputStreamWriter(new FileOutputStream(realPath + "/" + saveFilename),"UTF-8");   
  32.         temp.process(contents, out);   
  33.         out.flush();   
  34.     }   
  35.        
  36. }     

        如果用spring,可以将它配置成bean,然后在其他地方使用。第五行的 templatePath 是模版文件的路径,比如/WEB-INF/template。
        action中的使用:HtmlTemplateGenerator.create("html/magazine/search.ftl", null, "/magazine", "search.html"); 其中“html/magazine/search.ftl”是在“/WEB-INF/template”目录下。这里还需要注意的是。模版文件(search.ftl)中如果还要引用其他文件,它的路径也是不需要添加总路径“/WEB-INF/template”。

方法二:继承webwork的FreemarkerResult,改写getWriter方法:
不知有无好的法子。

java 代码
  1. protected Writer getWriter() throws IOException {   
  2.         String savePath = (String) ActionContext.getContext().getSession().get("SAVE_PATH");   
  3.         String saveFilename = (String) ActionContext.getContext().getSession().get("SAVE_FILENAME");   
  4.         String realPath = ServletActionContext.getServletContext().getRealPath(savePath);   
  5.         System.out.println( saveFilename + ":" + realPath);   
  6.         File file = new File(realPath);   
  7.         if(!file.exists())   
  8.             file.mkdirs();   
  9.            
  10.         return templateOut = new OutputStreamWriter(new FileOutputStream(realPath + "/" + saveFilename),"UTF-8");   
  11.     }  

        这里的路径和文件名通过webwork的session传入,不知有无其他好方法。
        如果生成文件的同时还需要看到生成的页面,则要改写“doExecute”:

java 代码
  1. template.process(model, getWriter());   
  2. template.process(model, super.getWriter()); //添加这句   
  3. templateOut.flush();  

 

        生成的文件格式不限于html,可以是其他文件格式,如js,text等。       
        比较这两种方法:
        方法一:在需要生成分页文件时,比较合适。
        方法二:可以象往常一样使用,一次需要生成多文件则不适合。

        不知各位在做这些项目时,使用甚么好方法。

   发表时间:2007-01-19  
收藏先,有新的静态页面需求的时候再研究下FreeMarker,我目前用xslt转换实现的静态页面,唉老东西得舍得扔阿。
0 请登录后投票
   发表时间:2007-01-19  
我用的差不多就是第一种方法,现在想的是如何把模板编辑也给可视化。开发dreamwearver插件?
0 请登录后投票
   发表时间:2007-01-21  
不错,值得研究
0 请登录后投票
   发表时间:2007-02-06  
第二种方法,覆盖FreemarkerResult的
protected void postTemplateProcess(Template template, TemplateModel model)方法,在这个方法里面生成静态页面
0 请登录后投票
   发表时间:2007-02-06  
其实我更想知道怎么管理大量的静态页面更好些,合适生成静态页面更好些,不过还是收藏了,谢谢先
0 请登录后投票
   发表时间:2007-02-08  
引用
quaff     1 天前
第二种方法,覆盖FreemarkerResult的
protected void postTemplateProcess(Template template, TemplateModel model)方法,在这个方法里面生成静态页面


嗯,有时间看看。
0 请登录后投票
   发表时间:2007-02-08  
我在开发相关项目的时候,也没有一个好的方法管理海量的静态页面,所以如果各位晓得的话,请多多指教。
0 请登录后投票
   发表时间:2007-02-09  
colonel 写道
我在开发相关项目的时候,也没有一个好的方法管理海量的静态页面,所以如果各位晓得的话,请多多指教。


我一个站点是按日期存静态文件目录,每天凌晨切换目录,所有文件的文件名是URL的32位MD5 Hash,对外链接不变,访问了才生成静态文件,一天有好几个G,切换目录后有另一个程序去删老的目录。
0 请登录后投票
   发表时间:2007-04-06  
关于第一个方法:

我想问一下这个 Map contents 这个data model在webwork的action中怎么得到?

是自己new一个Map 然后把数据put进去么?



想利用webwork构建好model只能用第二种方法么
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics