使用FreeMarker生成静态HTML
1、FreeMarker需要添加的Maven依赖:
1 <dependency>
2 <groupId>org.freemarker</groupId>
3 <artifactId>freemarker</artifactId>
4 <version>2.3.23</version>
5 </dependency>
2、使用模板生成HTML代码
2.1 数据模型
1 public class User {
2
3 private String username;
4
5 private String password;
6
7 private Integer age;
8
9 private String address;
10
11 //省略setter和getter方法
12 }
2.2 FreeMarker模板
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <meta charset="UTF-8">
5 <title>用户信息</title>
6 <!-- 新 Bootstrap 核心 CSS 文件 -->
7 <link rel="stylesheet"
8 href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.css" />
9 </head>
10 <body style="font-family:'Courier New'">
11 <h3 class="text-center">这是用户${username}的信息页!</h3>
12 <div class="col-md-6 column">
13 <table class="table table-bordered">
14 <tr>
15 <th>用户名</th>
16 <th>密码</th>
17 <th>年龄</th>
18 <th>地址</th>
19 </tr>
20 <tr>
21 <td>${username}</td>
22 <td>${password}</td>
23 <td>${age}</td>
24 <td>${address}</td>
25 </tr>
26 </table>
27 </div>
28 </body>
29 </html>
2.3 使用FreeMarker生成HTML代码
1 /**
2 * 使用模板生成HTML代码
3 */
4 public static void createHtmlFromModel() {
5 FileWriter out = null;
6 try {
7 // 通过FreeMarker的Confuguration读取相应的模板文件
8 Configuration configuration = new Configuration(Configuration.VERSION_2_3_23);
9 // 设置模板路径
10 configuration.setClassForTemplateLoading(CreateHtmlByFreemarker.class, "/static/ftl");
11 // 设置默认字体
12 configuration.setDefaultEncoding("utf-8");
13
14 // 获取模板
15 Template template = configuration.getTemplate("user.ftl");
16 //设置模型
17 User user = new User("tom", "hahahah", 28, "上海市");
18
19 //设置输出文件
20 File file = new File("e:/html/result.html");
21 if(!file.exists()) {
22 file.createNewFile();
23 }
24 //设置输出流
25 out = new FileWriter(file);
26 //模板输出静态文件
27 template.process(user, out);
28 } catch (TemplateNotFoundException e) {
29 e.printStackTrace();
30 } catch (MalformedTemplateNameException e) {
31 e.printStackTrace();
32 } catch (ParseException e) {
33 e.printStackTrace();
34 } catch (IOException e) {
35 e.printStackTrace();
36 } catch (TemplateException e) {
37 e.printStackTrace();
38 } finally {
39 if(null != out) {
40 try {
41 out.close();
42 } catch (IOException e) {
43 e.printStackTrace();
44 }
45 }
46 }
47 }
3、使用String作为FreeMarker模板,生成HTML代码
3.1 数据模型使用2.1模型
3.2 模板使用2.2模板
3.3 使用FreeMarker生成HTML代码
1 /**
2 * 把模板读入到String中,然后根据String构造FreeMarker模板
3 */
4 public static void createHtmlFromString() {
5 BufferedInputStream in = null;
6 FileWriter out = null;
7 try {
8 //模板文件
9 File file = new File("D:/EclipseLearnSpace/ResearchSpace/Html2Pdf/src/main/resources/static/html/user.html");
10 //构造输入流
11 in = new BufferedInputStream(new FileInputStream(file));
12 int len;
13 byte[] bytes = new byte[1024];
14 //模板内容
15 StringBuilder content = new StringBuilder();
16 while((len = in.read(bytes)) != -1) {
17 content.append(new String(bytes, 0, len, "utf-8"));
18 }
19
20 //构造Configuration
21 Configuration configuration = new Configuration(Configuration.VERSION_2_3_23);
22 //构造StringTemplateLoader
23 StringTemplateLoader loader = new StringTemplateLoader();
24 //添加String模板
25 loader.putTemplate("test", content.toString());
26 //把StringTemplateLoader添加到Configuration中
27 configuration.setTemplateLoader(loader);
28
29 //构造Model
30 User user = new User("tom", "kkkkk", 29, "北京山东");
31 //获取模板
32 Template template = configuration.getTemplate("test");
33 //构造输出路
34 out = new FileWriter("e:/html/result.html");
35 //生成HTML
36 template.process(user, out);
37 } catch (FileNotFoundException e) {
38 e.printStackTrace();
39 } catch (UnsupportedEncodingException e) {
40 e.printStackTrace();
41 } catch (IOException e) {
42 e.printStackTrace();
43 } catch (TemplateException e) {
44 e.printStackTrace();
45 } finally {
46 if(null != in) {
47 try {
48 in.close();
49 } catch (IOException e) {
50 e.printStackTrace();
51 }
52 }
53 if(null != out) {
54 try {
55 out.close();
56 } catch (IOException e) {
57 e.printStackTrace();
58 }
59 }
60 }
61
62 }
4、使用String模板,模板中使用List
4.1 数据模型
1 public class Classes {
2
3 private String classId; // 班级ID
4
5 private String className; // 班级名称
6
7 private List<User> users;
8
9 public String getClassId() {
10 return classId;
11 }
12
13 //省略settter和getter方法
14
15 }
4.2 FreeMarker模板
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <meta charset="UTF-8">
5 <title>班级信息</title>
6 <!-- 新 Bootstrap 核心 CSS 文件 -->
7 <link rel="stylesheet"
8 href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.css" />
9 <style type="text/css">
10 .table-align{
11 margin-left: 25%;
12 }
13 </style>
14 </head>
15 <body style="font-family:'Courier New'">
16
17 <h3 class="text-center">下面是班级ID【${classId}】,班级名称【${className}】的人员信息</h3>
18 <div class="col-md-6 column table-align">
19 <table class="table">
20 <tr>
21 <th>姓名</th>
22 <th>密码</th>
23 <th>年龄</th>
24 <th>地址</th>
25 </tr>
26 <!-- FreeMarker使用List循环 -->
27 <#list users as user>
28 <tr>
29 <td>${user.username}</td>
30 <td>${user.password}</td>
31 <td>${user.age}</td>
32 <td>${user.address}</td>
33 </tr>
34 </#list>
35 </table>
36 </div>
37 </body>
38 </html>
4.3 使用FreeMarker生成HTML代码
1 /**
2 * 根据String模板生成HTML,模板中存在List循环
3 */
4 public static void createHtmlFromStringList() {
5 BufferedInputStream in = null;
6 FileWriter out = null;
7 try {
8 //模板文件
9 File file = new File("D:/EclipseLearnSpace/ResearchSpace/Html2Pdf/src/main/resources/static/html/class.html");
10 //构造输入流
11 in = new BufferedInputStream(new FileInputStream(file));
12 int len;
13 byte[] bytes = new byte[1024];
14 //模板内容
15 StringBuilder content = new StringBuilder();
16 while((len = in.read(bytes)) != -1) {
17 content.append(new String(bytes, 0, len, "utf-8"));
18 }
19
20 //构造Configuration
21 Configuration configuration = new Configuration(Configuration.VERSION_2_3_23);
22 //构造StringTemplateLoader
23 StringTemplateLoader loader = new StringTemplateLoader();
24 //添加String模板
25 loader.putTemplate("test", content.toString());
26 //把StringTemplateLoader添加到Configuration中
27 configuration.setTemplateLoader(loader);
28
29 //构造Model
30 Classes classes = new Classes();
31 classes.setClassId("23");
32 classes.setClassName("实验一班");
33 List<User> users = new ArrayList<User>();
34 User user = new User("tom", "kkkkk", 29, "北京");
35 users.add(user);
36 User user2 = new User("Jim", "hhhh", 22, "上海");
37 users.add(user2);
38 User user3 = new User("Jerry", "aaaa", 25, "南京");
39 users.add(user3);
40 classes.setUsers(users);
41 //获取模板
42 Template template = configuration.getTemplate("test");
43 //构造输出路
44 out = new FileWriter("e:/html/result.html");
45 //生成HTML
46 template.process(classes, out);
47 } catch (FileNotFoundException e) {
48 e.printStackTrace();
49 } catch (UnsupportedEncodingException e) {
50 e.printStackTrace();
51 } catch (IOException e) {
52 e.printStackTrace();
53 } catch (TemplateException e) {
54 e.printStackTrace();
55 } finally {
56 if(null != in) {
57 try {
58 in.close();
59 } catch (IOException e) {
60 e.printStackTrace();
61 }
62 }
63 if(null != out) {
64 try {
65 out.close();
66 } catch (IOException e) {
67 e.printStackTrace();
68 }
69 }
70 }
71
72 }
还没有评论,来说两句吧...