使用FreeMarker生成静态HTML

来源:互联网 发布:js一个函数执行完成 编辑:程序博客网 时间:2024/06/05 00:28

1、FreeMarker需要添加的Maven依赖:

<dependency>    <groupId>org.freemarker</groupId>    <artifactId>freemarker</artifactId>    <version>2.3.23</version></dependency>

2、使用模板生成HTML代码

2.1 数据模型

 public class User {   private String username;   private String password;   private Integer age;   private String address;  //省略setter和getter方法  }

2.2 FreeMarker模板

<!DOCTYPE html><html><head><meta charset="UTF-8"><title>用户信息</title><!-- 新 Bootstrap 核心 CSS 文件 --><link rel="stylesheet"    href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.css" /></head><body style="font-family:'Courier New'">    <h3 class="text-center">这是用户${username}的信息页!</h3>    <div class="col-md-6 column">        <table class="table table-bordered">            <tr>                <th>用户名</th>                <th>密码</th>                <th>年龄</th>                <th>地址</th>            </tr>            <tr>                <td>${username}</td>                <td>${password}</td>                <td>${age}</td>                <td>${address}</td>            </tr>        </table>    </div></body></html>

2.3 使用FreeMarker生成HTML代码

/**     * 使用模板生成HTML代码     */    public static void createHtmlFromModel() {        FileWriter out = null;        try {            // 通过FreeMarker的Confuguration读取相应的模板文件            Configuration configuration = new Configuration(Configuration.VERSION_2_3_23);            // 设置模板路径            configuration.setClassForTemplateLoading(CreateHtmlByFreemarker.class, "/static/ftl");            // 设置默认字体            configuration.setDefaultEncoding("utf-8");            // 获取模板            Template template = configuration.getTemplate("user.ftl");            //设置模型            User user = new User("tom", "hahahah", 28, "上海市");                        //设置输出文件            File file = new File("e:/html/result.html");            if(!file.exists()) {                file.createNewFile();            }            //设置输出流            out = new FileWriter(file);            //模板输出静态文件            template.process(user, out);        } catch (TemplateNotFoundException e) {            e.printStackTrace();        } catch (MalformedTemplateNameException e) {            e.printStackTrace();        } catch (ParseException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        } catch (TemplateException e) {            e.printStackTrace();        } finally {            if(null != out) {                try {                    out.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }    }

3、使用String作为FreeMarker模板,生成HTML代码

3.1 数据模型使用2.1模型

3.2 模板使用2.2模板

3.3 使用FreeMarker生成HTML代码

/**     * 把模板读入到String中,然后根据String构造FreeMarker模板     */    public static void createHtmlFromString() {        BufferedInputStream in = null;        FileWriter out = null;        try {            //模板文件            File file = new File("D:/EclipseLearnSpace/ResearchSpace/Html2Pdf/src/main/resources/static/html/user.html");            //构造输入流            in = new BufferedInputStream(new FileInputStream(file));            int len;            byte[] bytes = new byte[1024];            //模板内容            StringBuilder content = new StringBuilder();            while((len = in.read(bytes)) != -1) {                content.append(new String(bytes, 0, len, "utf-8"));            }                        //构造Configuration            Configuration configuration = new Configuration(Configuration.VERSION_2_3_23);            //构造StringTemplateLoader            StringTemplateLoader loader = new StringTemplateLoader();            //添加String模板            loader.putTemplate("test", content.toString());            //把StringTemplateLoader添加到Configuration中            configuration.setTemplateLoader(loader);                        //构造Model            User user = new User("tom", "kkkkk", 29, "北京山东");            //获取模板            Template template = configuration.getTemplate("test");            //构造输出路            out = new FileWriter("e:/html/result.html");            //生成HTML            template.process(user, out);        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (UnsupportedEncodingException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        } catch (TemplateException e) {            e.printStackTrace();        } finally {            if(null != in) {                try {                    in.close();                } catch (IOException e) {                    e.printStackTrace();                }            }            if(null != out) {                try {                    out.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }            }

4、使用String模板,模板中使用List

4.1 数据模型

public class Classes {    private String classId; // 班级ID    private String className; // 班级名称    private List<User> users;    public String getClassId() {        return classId;    }    //省略settter和getter方法}

4.2 FreeMarker模板

<!DOCTYPE html><html><head><meta charset="UTF-8"><title>班级信息</title><!-- 新 Bootstrap 核心 CSS 文件 --><link rel="stylesheet"    href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.css" /><style type="text/css">    .table-align{        margin-left: 25%;    }</style></head><body style="font-family:'Courier New'">    <h3 class="text-center">下面是班级ID【${classId}】,班级名称【${className}】的人员信息</h3>    <div class="col-md-6 column table-align">        <table class="table">            <tr>                <th>姓名</th>                <th>密码</th>                <th>年龄</th>                <th>地址</th>            </tr>            <!-- FreeMarker使用List循环 -->            <#list users as user>                <tr>                    <td>${user.username}</td>                    <td>${user.password}</td>                    <td>${user.age}</td>                    <td>${user.address}</td>                </tr>            </#list>        </table>    </div></body></html>


4.3 使用FreeMarker生成HTML代码

/**     * 根据String模板生成HTML,模板中存在List循环     */    public static void createHtmlFromStringList() {        BufferedInputStream in = null;        FileWriter out = null;        try {            //模板文件            File file = new File("D:/EclipseLearnSpace/ResearchSpace/Html2Pdf/src/main/resources/static/html/class.html");            //构造输入流            in = new BufferedInputStream(new FileInputStream(file));            int len;            byte[] bytes = new byte[1024];            //模板内容            StringBuilder content = new StringBuilder();            while((len = in.read(bytes)) != -1) {                content.append(new String(bytes, 0, len, "utf-8"));            }                        //构造Configuration            Configuration configuration = new Configuration(Configuration.VERSION_2_3_23);            //构造StringTemplateLoader            StringTemplateLoader loader = new StringTemplateLoader();            //添加String模板            loader.putTemplate("test", content.toString());            //把StringTemplateLoader添加到Configuration中            configuration.setTemplateLoader(loader);                        //构造Model            Classes classes = new Classes();            classes.setClassId("23");            classes.setClassName("实验一班");            List<User> users = new ArrayList<User>();            User user = new User("tom", "kkkkk", 29, "北京");            users.add(user);            User user2 = new User("Jim", "hhhh", 22, "上海");            users.add(user2);            User user3 = new User("Jerry", "aaaa", 25, "南京");            users.add(user3);            classes.setUsers(users);            //获取模板            Template template = configuration.getTemplate("test");            //构造输出路            out = new FileWriter("e:/html/result.html");            //生成HTML            template.process(classes, out);        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (UnsupportedEncodingException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        } catch (TemplateException e) {            e.printStackTrace();        } finally {            if(null != in) {                try {                    in.close();                } catch (IOException e) {                    e.printStackTrace();                }            }            if(null != out) {                try {                    out.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }            }
0 0