Freemarker网站静态化

阿超 发表于 2009-08-30 03:36 | 来源: | 阅读 683 次
/**
* 生成静态页面主方法
* @param context ServletContext
* @param data 一个Map的数据结果集
* @param templatePath ftl模版路径
* @param targetHtmlPath 生成静态页面的路径
*/
ublic static void crateHTML(ServletContext context,Map data,String templatePath,String targetHtmlPath){
Configuration freemarkerCfg = new Configuration();
//加载模版
freemarkerCfg.setServletContextForTemplateLoading(context, "/");
freemarkerCfg.setEncoding(Locale.getDefault(), "UTF-8");
try {
//指定模版路径
Template template = freemarkerCfg.getTemplate(templatePath,"UTF-8");
template.setEncoding("UTF-8");
//静态页面路径
String htmlPath = context.getRealPath("/html")+"/"+targetHtmlPath;
File htmlFile = new File(htmlPath);
      Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(htmlFile), "UTF-8"));
     //处理模版
      template.process(data, out);
      out.flush();
      out.close();
} catch (Exception e) {
e.printStackTrace();
}   
/**
  * 生成静态页面主方法
  * @param context ServletContext
  * @param data 一个Map的数据结果集
  * @param templatePath ftl模版路径
  * @param targetHtmlPath 生成静态页面的路径
  */
 public static void crateHTML(ServletContext context,Map data,String templatePath,String targetHtmlPath){
  Configuration freemarkerCfg = new Configuration();
  //加载模版
  freemarkerCfg.setServletContextForTemplateLoading(context, "/");
  freemarkerCfg.setEncoding(Locale.getDefault(), "UTF-8");
  try {
   //指定模版路径
   Template template = freemarkerCfg.getTemplate(templatePath,"UTF-8");
   template.setEncoding("UTF-8");
   //静态页面路径
   String htmlPath = context.getRealPath("/html")+"/"+targetHtmlPath;
   File htmlFile = new File(htmlPath);
            Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(htmlFile), "UTF-8"));
            //处理模版
            template.process(data, out);
            out.flush();
            out.close();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

其实很简单,只要Google一下就有很多这方面的代码。我也是Google的代码然后自己再根据实际情况修改。简单说明一下参数: ServletContext :这个不用说了吧。做java web的应该都知道,只不过struts2中这样获取ServletActionContext.getServletContext() Map data : 模版的数据来源。freemarker通过一个Map给ftl模版送数据。现在已友情链接为列子详细介绍静态页面如何生成。其他模块以此类推。 String templatePath : ftl所在的路径。我这里相对于网站的一个相对路径然后通过ServerContext获取绝对路径。 String targetHtmlPath : 最后生成静态页的路径:我这里相对于网站的一个相对路径然后通过ServerContext获取绝对路径。 友情链接根据这段代码我们需要freemarker生成一个index_link.html文件。友情链接数据来源通过数据库查询获取。然后再写一个方法专门生成友情链接静态页面:

/**
* 生成友情链接的静态页index_link.html
* @param context
* @param data
*/
ublic static void createIndexFriendLink(ServletContext context,Map data){
crateHTML(context,data,"index_link.ftl","index_link.html");   
/**
  * 生成友情链接的静态页index_link.html
  * @param context
  * @param data
  */
 public static void createIndexFriendLink(ServletContext context,Map data){
  crateHTML(context,data,"index_link.ftl","index_link.html");
 }

此方法调用上面的createHTML方法。然后根据以上方法我们就可以再Struts2的action里面从数据库查询数据放入map调用createIndexFriendLink()方法生成静态页了。这是action中的一个方法:

/**
* 生成友情链接静态页index_link.html
* @return
*/
public String createLink(){
//权限验证
if(! this.isAccess())
    return "error";
try{
   //得到友情链接
    List links = friendLinkDAO.findAll();
   //准备数据
    HashMap data = new HashMap();
    data.put("links", links);
   //调用静态页面方法
    HTML.createIndexFriendLink(ServletActionContext.getServletContext(), data);
    addActionMessage("静态页面生成成功!");
   return "message";
}catch(Exception e){
    e.printStackTrace();
   return "failure";
}
}  
/**
  * 生成友情链接静态页index_link.html
  * @return
  */
 public String createLink(){
  //权限验证
  if(! this.isAccess())
   return "error";
  try{
   //得到友情链接
   List links = friendLinkDAO.findAll();
   //准备数据
   HashMap data = new HashMap();
   data.put("links", links);
   //调用静态页面方法
   HTML.createIndexFriendLink(ServletActionContext.getServletContext(), data);
   addActionMessage("静态页面生成成功!");
   return "message";
  }catch(Exception e){
   e.printStackTrace();
   return "failure";
  }
 }

List links = friendLinkDAO.findAll();通过spring注入action的hiberate DAO获取数据给list然后通过以下代码 HashMap data = new HashMap(); data.put("links", links); 准备数据调用createIndexFriendLink()方法。以下是:ftl模版源码:

<#if links?size != 0>   


<#else>   


</#IF>  

<#if links?size != 0>


<#else>


</#IF>

这样友情链接静态页就生成了。

喜欢Java豆技术站点的文章,那就通过 RSS Feed 功能订阅阅读吧!

我要评论

*

* 绝不会泄露



返回首页 | 关于我们 | 联系我们 | 广告合作 | 网站地图 | 友情链接 | 版权声明 | 模板设计