您的位置:首页 > Web前端 > HTML

使用FreeMarker生成静态HTML

2017-02-08 11:45 681 查看
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();

                }

            }

        }

        

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: