`

用freemarker生成静态页(代码)

阅读更多
{code}
package com.gbits.wdhw.web;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.URISyntaxException;
import java.util.Locale;
import java.util.Map;

import javax.servlet.ServletContext;

import com.gbits.wdhw.common.config.operConfig;

import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;

/**
*
* 生成静态页操作
*
* @author yanse
*
*/
public class produceHtml
{

    /**
     * 生成静态页面主方法
     *
     * @param context
     *            ServletContext
     * @param data
     *            模版的数据来源,freemarker通过一个Map给ftl模版送数据
     * @param templatePath
     *            ftl模版所在的路径
     * @param targetHtmlPath
     *            最后生成静态页的路径
     */
    public static void crateHTML(ServletContext context,
            Map<String, Object> 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 htmlBashPath = operConfig.readConfigByKey("htmlPath");
            String htmlPath = context.getRealPath(htmlBashPath) + "/"
                    + 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();
        }
    }

    /**
     * templatePath模板文件存放路径,templateName 模板文件名称,filename 生成的文件名称
     *
     * @param templatePath
     * @param templateName
     * @param fileName
     * @param root
     */
    public static void analysisTemplate(String templatePath,
            String templateName, String fileName, Map<String, Object> data)
    {
        try
        {
            // 初使化FreeMarker配置
            Configuration config = new Configuration();
            // 设置要解析的模板所在的目录,并加载模板文件
            config.setDirectoryForTemplateLoading(new File(templatePath));
            // 设置包装器,并将对象包装为数据模型
            config.setObjectWrapper(new DefaultObjectWrapper());

            // 获取模板,并设置编码方式,这个编码必须要与页面中的编码格式一致
            // 否则会出现乱码
            Template template = config.getTemplate(templateName, "UTF-8");
            // 合并数据模型与模板
            FileOutputStream fos = new FileOutputStream(fileName);
            Writer out = new OutputStreamWriter(fos, "UTF-8");
            template.process(data, out);
            out.flush();
            out.close();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        catch (TemplateException e)
        {
            e.printStackTrace();
        }
    }

    public static void main(String[] args)
    {
        try
        {
            System.out.println(produceHtml.class.getClassLoader()
                    .getResource("/wdhw").toURI().getPath());
        }
        catch (URISyntaxException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    /**
     *
     * 根据模块标识生成对应的模块页面
     *
     * @param context
     * @param data
     * @param moderFlag
     * @param id
     */
    public static void createModerHTML(ServletContext context,
            Map<String, Object> data, String moderFlag, String id)
    {
        String templatePath = produceHtml.getTemplateNameByType(moderFlag);
        String targetHtmlPath = produceHtml.getHtmlPathByType(moderFlag, id);
        createFolder(context.getContextPath() + "/html/"+moderFlag,moderFlag);
        produceHtml.crateHTML(context, data, templatePath, targetHtmlPath);
    }

    /**
     *
     * 判断文件夹是否存在,不存在则创建一个
     */
    public static void createFolder(String path,String moderFlag)
    {
    if (!moderFlag.equals("index"))
    {
        File file = new File(path);
      // 判断文件夹是否存在,如果不存在则创建文件夹
      if (!file.exists())
      {
      file.mkdir();
      }
    }
    }
   
    public static void testHTML()
    {
    }

    /**
     *
     * 根据类型获取模板
     *
     * @param type
     * @return
     */
    public static String getTemplateNameByType(String type)
    {
        String templatePath = operConfig.readConfigByKey("templatePath");
        return templatePath + type + "/" + type + ".ftl";
    }

    /**
     *
     * 根据类型获取最后生成静态页的路径
     *
     * @param type
     * @param id
     * @return
     */
    public static String getHtmlPathByType(String type, String id)
    {
        String htmlPath = "";
        if (type.equals("index"))
        {
            htmlPath = type + ".html";
        } else
        {
            htmlPath = type + "/" + id + ".html";
        }
        return htmlPath;
    }

}
{code}
分享到:
评论
1 楼 androidarm3 2011-11-15  
operConfig这个是什么?

相关推荐

    教你如何用FreeMarker生成静态页面.doc

    以下是一个简单的Java代码示例,展示了如何使用FreeMarker生成静态页面: 1. 导入所需的FreeMarker库和IO相关的类。 2. 创建一个名为`FreeMarkerUtil`的公共类。 3. 定义一个静态方法`analysisTemplate`,接收模板...

    struts2+freemarker 生成静态页面

    5. **配置和优化**:在实际项目中,配置Struts2和FreeMarker生成静态页面时,需要考虑目录结构、文件命名规则、缓存控制等多个方面。例如,静态页面可能存储在特定的目录下,文件名可能包含URL参数以区分不同的动态...

    Struts2整合Freemarker生成静态页面

    以上就是Struts2整合Freemarker生成静态页面所涉及的主要知识点。通过熟练掌握这些,开发者可以有效地构建动态、高性能的Web应用。在提供的链接中,可能有更具体的示例和教程,帮助你深入理解和实践这一技术。

    freemarker生成静态网页

    这可能是一个动态HTML的示例,或者是一个自定义的类,用于处理Freemarker生成静态页的过程。具体功能需要查看源代码才能明确。 通过以上步骤,你可以使用Freemarker轻松地将动态数据转化为静态网页。这种方式在网站...

    使用FreeMarker生成Html静态文件

    标题“使用FreeMarker生成Html静态文件”暗示了我们将探讨如何利用FreeMarker将动态数据转化为静态的HTML页面。这一过程通常涉及以下几个步骤: 1. **配置FreeMarker**: 首先,我们需要在Java项目中引入FreeMarker...

    springboot整合freemarker生成静态html的demo.zip

    在本项目"springboot整合freemarker生成静态html的demo.zip"中,我们将探讨如何将SpringBoot框架与FreeMarker模板引擎结合,以实现动态数据驱动的静态HTML页面生成。FreeMarker是一个强大的、开源的模板语言,它允许...

    freemarker生成静态html示例

    本示例项目是在Eclipse环境中创建的一个工程,目的是演示如何使用Freemarker来生成静态HTML页面。 在了解这个项目之前,首先需要知道什么是Freemarker。Freemarker是一个开源的Java库,它允许开发者通过定义模板(....

    httpclient,freemarker的静态化分页

    总的来说,`httpclient`与`freemarker`在页面静态化分页中的结合使用,既保证了数据的动态获取,又实现了静态文件的高效生成,是Web开发中一种实用的优化手段。通过合理的代码组织和设计,可以构建出高效且易于维护...

    freemarker生成静态HTML例子

    本示例将详细介绍如何使用Freemarker生成静态HTML页面。 1. **Freemarker基本概念** - **模板**: Freemarker的核心是模板,它定义了输出文件的结构和样式,其中包含了一系列指令和变量。 - **数据模型**: 数据...

    javaCMS 生成静态页面简单列子

    Java CMS(内容管理系统)生成静态页面是一种常见的优化网站性能和提升用户体验的方法。在这个过程中,原本由动态脚本生成的网页内容被转化为HTML文件,这些HTML文件可以被浏览器直接读取,减少了服务器处理请求的...

    用java代码生成静态页面

    ### 使用Java代码生成静态页面的知识点 在当前的网络环境中,很多开发者会遇到需要通过程序自动生成静态HTML页面的需求。这种需求通常出现在博客系统、新闻网站或是任何需要定期更新大量内容且希望减轻服务器动态...

    freemarker实现代码生成器

    下面将详细介绍如何使用Freemarker来创建一个代码生成器。 一、Freemarker基础 1. 模板语言:Freemarker是基于模板的,即预先定义好模板文件,模板中包含静态文本和变量,变量在运行时会被实际值替换。 2. 数据...

    Java 生成静态页

    6. **任务调度**:如果需要定期或者在特定事件(如内容更新)后自动生成静态页,可以使用Java的定时任务框架,如Quartz或Spring的Scheduled Tasks。 7. **版本控制**:静态页的生成过程中可能会涉及多版本管理,...

    FreeMarker教你如何生成html静态页面源码

    5. **生成静态文件**:一旦HTML源码生成,你可以将其写入到磁盘上的一个文件中,从而创建静态页面。确保选择合适的路径,并正确处理文件的创建和覆盖。 6. **优化和调试**:在实际应用中,你可能需要对模板进行优化...

    通过freemarker模板 生成PDF

    3. **处理模板**:使用Freemarker API的`Configuration`和`Template`类,将数据模型应用到模板上,生成HTML字符串。 4. **调用wkhtmltox**:通过Java绑定库,将生成的HTML字符串转换为PDF。 5. **保存PDF**:将生成...

    java生成静态页面——Freemarker实例教程.docx

    #### 三、Freemarker生成静态页面的工作原理 Freemarker生成静态页面的基本步骤如下: 1. **准备模板** 创建一个模板文件,该文件通常是一个包含HTML标记的普通文件,其中可能包含Freemarker的特殊标签或表达式...

    Struts2+Hibernate+Freemarker实现【增删改查】生成静态页面

    Struts2+Hibernate+Freemarker实现【增删改查】生成静态页面!这是一个相对网上较全的案例。源码内含数据库文件sql.sql及效果图!本人致力于完整的Demo。欢迎关注!回头补上分页。敬请期待!

    jsp 静态引擎(freemarker)生成静态html案例

    3. 个人觉得freemarker 和taglib,jsf至少在使用层面上很像,但是freemarker 的macro容易写,几行代码就搞定了,taglib和jsf需要写一堆java文件和tld文件,繁琐得很 4.freemarker 不能直接调用java对象的method. 这点...

Global site tag (gtag.js) - Google Analytics