标签:
其实生成静态网页的方式有好多种,我昨天看了一下,Freemarker是其中一种,但是Freemarker现在我们都用得比较少了,现在用得ActiveMQ用来发送信息到静态页面,不过想了一下这个小东西,还是想给大家分享一下,我的小小心得。
若项目为Maven项目,那么可以如下
在Pom.xml文件里面添加
<dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.16</version> </dependency>
CreateFreemarkerStatic.java
package com.llmj.DemoTest.Test; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.HashMap; import java.util.Map; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; public class CreateFreeMarkStatic { /** * * @Description * @author xebest-pc * @param name * @return */ public Template getTemplate(String name) { try { // 通过Freemaker的Configuration读取相应的ftl Configuration cfg = new Configuration(); // 设定去哪里读取相应的ftl模板文件 cfg.setClassForTemplateLoading(this.getClass(), "/ftl"); // 在模板文件目录中找到名称为name的文件 Template temp = cfg.getTemplate(name); return temp; } catch (IOException e) { e.printStackTrace(); } return null; } /** * 控制台输出 * @Description * @author xebest-pc * @param name * @param root */ public void print(String name, Map<String, Object> root){ try { // 通过Template可以将模板文件输出到相应的流 Template temp = this.getTemplate(name); temp.process(root, new PrintWriter(System.out)); } catch (TemplateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 输出HTML文件 * @Description * @author xebest-pc * @param name * @param root * @param outFile */ public void fprint(String name, Map<String, Object> root, String outFile) { FileWriter out = null; try { // 通过一个文件输出流,就可以写到相应的文件中,此处用的是绝对路径 out = new FileWriter(new File("E:/workspace/freemarkprj/page/" + outFile)); Template temp = this.getTemplate(name); temp.process(root, out); } catch (IOException e) { e.printStackTrace(); } catch (TemplateException e) { e.printStackTrace(); } finally { try { if (out != null) out.close(); } catch (IOException e) { e.printStackTrace(); } } } public static void main(String[] args) { Map<String,Object> root=new HashMap<String,Object>(); root.put("username", "zhangsan");//在ftl中要赋值的变量 CreateFreeMarkStatic util= new CreateFreeMarkStatic(); util.fprint("01.ftl", root, "01.html"); } }
建立对应的实体类User.java
package com.llmj.DemoTest.entity; import java.io.Serializable; @SuppressWarnings("serial") public class User implements Serializable { private int id; private String name; private int age; private Group group; public Group getGroup() { return group; } public void setGroup(Group group) { this.group = group; } public User() { } public User(int id, String name, int age) { this.id = id; this.name = name; this.age = age; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
Group.java
package com.llmj.DemoTest.entity; public class Group { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
2 、在src目录下建个ftl包,用于存放ftl模板文件,this.getClass() 就是根据当前类的路径获取模板文件位置
01.ftl
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>测试</title> </head> <body> <h1>你好${username}</h1> </body> </html>
02.ftl
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h1>你好: ${username}</h1> </body> </html>
03.ftl
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h1>${user.id}-----${user.name}-----${user.age}</h1> <#if user.age lt 12> ${user.name}还是一个小孩 <#elseif user.age lt 18> ${user.name}快成年 <#else> ${user.name}已经成年 </#if> </body> </html>
04.ftl
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<#list users as user>
${user.id}---------${user.name}-------${user.age}<br/>
</#list>
</body>
</html>
05.ftl
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<hr/>
<#list users as user>
${user.id}---------${user.name}-------${user.age}<br/>
</#list>
</body>
</html>
06.ftl
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> ${user.id}-------${user.name}------${user.group!} <#-- !后为空就不输出 --> <#--${user.group.name!}--><#-- 按照以上的方式加! freemarker仅仅只会判断group.name是不是空值 --> ${(user.group.name)!"1234"} ${(a.b)!"没有a.b元素"} <#-- !:指定缺失变量的默认值 ??:判断某个变量是否存在,返回boolean值 --> <#if (a.b)??> <#--if后不用加$--> 不为空 <#else> 为空 </#if> </body> </html>
然后最后附上测试类FreemarkTest.java
import java.util.HashMap; import java.util.List; import java.util.Map; import org.junit.Test; import com.llmj.DemoTest.entity.Group; import com.llmj.DemoTest.entity.User; public class FreemarkerTest { @Test public void test(){ CreateFreeMarkStatic util = new CreateFreeMarkStatic(); Map<String, Object> map = new HashMap<String, Object>(); Group group = new Group(); group.setName("IT"); User user = new User(); user.setId(001); user.setName("张三"); user.setAge(12); user.setGroup(group); List<User> users = new ArrayList<User>(); users.add(user); users.add(user); users.add(user); map.put("user", user); //普通EL赋值 //util.fprint("01.ftl", map, "01.html" ); //判断 //util.fprint("03.ftl", map, "03.html"); //遍历 //util.print("05.ftl", map); //子元素判断 util.print("06.ftl", map); } }
这样就可以测试了
Freemarker入门小案例(生成静态网页的其中一种方式)
标签:
原文地址:http://www.cnblogs.com/yaomajor/p/5694624.html