使用FreeMaker生成静态HTML

来源:互联网 发布:centos 安装jdk1.7 编辑:程序博客网 时间:2024/05/16 09:04

使用FreeMaker生成静态HTML

1. 从官网http://freemarker.org/下载jar包,将下载后的jar包加入项目

2. 将FreeMaker的封装成类,便于使用

FreeMakerUtil.java

public class FreeMakerUtil {    // 创建Configuration对象    private static Configuration config = new Configuration(Configuration.VERSION_2_3_25);    // 当前项目路径    public static String path = System.getProperty("user.dir");     /**     * @param templateName 模板名     * @param dataModel 模板模型 用于在模板内输出结果集     * @param out 输出对象     */    public static void processTemplate (String templateName, Map<?, ?> dataModel, Writer out) {            try {                // 获得模板                Template template = config.getTemplate(templateName, "utf-8");                // 通过模板生成的html文件                template.process(dataModel, out);            } catch (IOException e) {                // TODO Auto-generated catch block                e.printStackTrace();            } catch (TemplateException e) {                // TODO Auto-generated catch block                e.printStackTrace();            } finally {                if (null != out) {                    try {                        out.close();                    } catch (IOException e) {                        // TODO Auto-generated catch block                        e.printStackTrace();                    }                    out = null;                }            }    }    /**     * 初始化模板配置     * @param servletContext     * @param templateDir     */    public static void initConfig () {        config.setLocale(Locale.CHINA);        config.setDefaultEncoding("utf-8");        config.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);        try {            config.setDirectoryForTemplateLoading(new File(path + "/WebContent/WEB-INF"));        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

3. 创建ftl文件

ftl文件是生成html文件的模板文件。
当然,可以直接复制一段html内容,我们要做的只是替换其中的数据

body.ftl

<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title></head><body><table border="1">    <tr>        <td>id</td>        <td>name</td>        <td>age</td>        <td>birthday</td>    </tr>    <!-- --> 左边这个在ftl中不是注释,记得删除    <!-- <#list></#list> 标签表示传入一个List,List的名字为users然后再遍历这个list取出它的item    这个标签类似于JAVA中的foreach,只是":"被换成"as" -->    <#list users as user>         <tr>        <!-- 取值按照item中的属性名来取        如下,user中有个属性是id,所以就可以通过${user.id}来取得id的值 -->            <td>${user.id}</td>            <td>${user.name}</td>            <td>${user.age}</td>            <td>${user.birthday?string("yyyy-MM-dd hh:mm:ss")}</td>        </tr>    </#list></table></body></html>

4. 生成html文件

 /**     * @param templateName ftl文件的名字     * @param exportFilePath 导出的html路径     */    public void exportFile (String templateName, String exportFilePath) {        FreeMakerUtil.initConfig(); // 初始化FreeMaker        Map<String, Object> dataModel = new HashMap<String, Object>();        Writer out = null;        try {            // 生成的index.html文件            out = new OutputStreamWriter(new FileOutputStream(exportFilePath), "UTF-8");        } catch (UnsupportedEncodingException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (FileNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        // 创建数据源        List<User> users = new ArrayList<>();        for (int i = 0; i < 10; i++) {            User user = new User();            user.setName("a"+i);            user.setAge(i+10);            user.setBirthday(new Date());            user.setId(i);            users.add(user);        }        dataModel.put("users", users); // 对应body.ftl中的list        FreeMakerUtil.processTemplate(templateName, dataModel, out); // 导出index.html文件    }

运行生成的html文件的效果
这里写图片描述

成的html文件

<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title></head><body><table border="1">    <tr>        <td>id</td>        <td>name</td>        <td>age</td>        <td>birthday</td>    </tr>            <tr>            <td>0</td>            <td>a0</td>            <td>10</td>            <td>2016-07-20 08:14:12</td>        </tr>        <tr>            <td>1</td>            <td>a1</td>            <td>11</td>            <td>2016-07-20 08:14:12</td>        </tr>        <tr>            <td>2</td>            <td>a2</td>            <td>12</td>            <td>2016-07-20 08:14:12</td>        </tr>        <tr>            <td>3</td>            <td>a3</td>            <td>13</td>            <td>2016-07-20 08:14:12</td>        </tr>        <tr>            <td>4</td>            <td>a4</td>            <td>14</td>            <td>2016-07-20 08:14:12</td>        </tr>        <tr>            <td>5</td>            <td>a5</td>            <td>15</td>            <td>2016-07-20 08:14:12</td>        </tr>        <tr>            <td>6</td>            <td>a6</td>            <td>16</td>            <td>2016-07-20 08:14:12</td>        </tr>        <tr>            <td>7</td>            <td>a7</td>            <td>17</td>            <td>2016-07-20 08:14:12</td>        </tr>        <tr>            <td>8</td>            <td>a8</td>            <td>18</td>            <td>2016-07-20 08:14:12</td>        </tr>        <tr>            <td>9</td>            <td>a9</td>            <td>19</td>            <td>2016-07-20 08:14:12</td>        </tr></table></body></html>

使用FreeMaker可以很简单的产生静态页面,它的使用类似于JSP标签JSTL,可以动手试试哦!

0 0
原创粉丝点击