使用FreeMarker生成静态HTML

来源:互联网 发布:票据市场知乎 编辑:程序博客网 时间:2024/06/04 23:23

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
原创粉丝点击