
把resource拷贝到test目录下

只保留文件夹结构和test1.ftl这个模板文件就可以了。

新建一个包


编写测试类

使用freemaker提供的方法生成静态文件
Configuration是import freemarker.template.Configuration;包下的


手动的设置模板的路径。获取当前类的classPath然后拼上template的路径

抛出异常

获取test1.ftl这个模板

定义获取数据的方法。填充map的数据是从上节课的controller里面复制过来的。单独定义一个getMap的方法来获取。

静态化

processTemplateIntoString方法也要抛出异常。TemplateException

加断点一步步测试

一步步往下走报错。

路径写错了 漏了一个s

复制静态化后的字符串内容。

粘贴到一个编辑器里面

package com.xuecheng.test.freemarker; import com.xuecheng.test.freemarker.model.Student; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.ui.freemarker.FreeMarkerTemplateUtils; import java.io.File; import java.io.IOException; import java.util.*; @SpringBootTest @RunWith(SpringRunner.class) public class FreemarkerTest { //测试静态化,基于ftl模板文件生成html文件 @Test public void testGenerateHtml() throws IOException, TemplateException { //定义配置类 Configuration configuration = new Configuration(Configuration.getVersion()); //定义模板 //得到classpath的路径 String classpath = this.getClass().getResource("/").getPath(); configuration.setDirectoryForTemplateLoading(new File(classpath+"/templates/")); //获取模板文件内容。 Template template = configuration.getTemplate("test1.ftl"); //定义数据模型。 Map map=getMap(); //静态化 String content = FreeMarkerTemplateUtils.processTemplateIntoString(template, map); System.out.println(content); } public Map getMap(){ Map<String,Object> map=new HashMap<>(); map.put("name","黑马程序员"); Student stu1 = new Student(); stu1.setName("小明"); stu1.setAge(18); stu1.setMoney(1000.86f); stu1.setBirthday(new Date()); Student stu2 = new Student(); stu2.setName("小红"); stu2.setMoney(200.1f); stu2.setAge(19); stu2.setBirthday(new Date()); List<Student> friends = new ArrayList<>(); friends.add(stu1); stu2.setFriends(friends); stu2.setBestFriend(stu1); List<Student> stus = new ArrayList<>(); stus.add(stu1); stus.add(stu2); //向数据模型放数据 map.put("stus",stus); //准备map数据 HashMap<String,Student> stuMap = new HashMap<>(); stuMap.put("stu1",stu1); stuMap.put("stu2",stu2); //向数据模型放数据 map.put("stu1",stu1); //向数据模型放数据 map.put("stuMap",stuMap); map.put("point",102920122); return map; } }
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Hello World!</title>
</head>
<body>
<table>
<tr>
<td>序号</td>
<td>名字</td>
<td>年龄</td>
<td>金额</td>
</tr>
<tr>
<td>1</td>
<td style="background-color:cornflowerblue">小明</td>
<td>18</td>
<td style="background-color: cornflowerblue"1,000.86</td>
<td>2019年11月02日</td>
</tr>
<tr>
<td>2</td>
<td >小红</td>
<td>19</td>
<td 200.1</td>
<td>2019年11月02日</td>
</tr>
</table>
<br/>
遍历数据模型中的stuMap(map)数据
<br/>
姓名:小明<br/>
年龄:18<br/>
姓名:小明<br/>
年龄:18<br/>
<br/>
遍历map中的key.stuMap?keys就是key列表(是一个list)
<br/>
姓名:小红<br/>
年龄:19<br/>
姓名:小明<br/>
年龄:18<br/>
<br/>
学生的个数:
2
<br/>
102920122
<br/>
开户行:工商银行 账号:10101920201920212
</body>
</html>
生成静态页
用一个很有名的IOUtil。是这个包下的:org.apache.commons.io.IOUtils;

上面定义输入流,下面定义输出流。第三行输入流拷贝到输出流

拷贝完成后就关闭流





最终代码
package com.xuecheng.test.freemarker; import com.xuecheng.test.freemarker.model.Student; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; import org.apache.commons.io.IOUtils; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.ui.freemarker.FreeMarkerTemplateUtils; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.*; @SpringBootTest @RunWith(SpringRunner.class) public class FreemarkerTest { //测试静态化,基于ftl模板文件生成html文件 @Test public void testGenerateHtml() throws IOException, TemplateException { //定义配置类 Configuration configuration = new Configuration(Configuration.getVersion()); //定义模板 //得到classpath的路径 String classpath = this.getClass().getResource("/").getPath(); configuration.setDirectoryForTemplateLoading(new File(classpath+"/templates/")); //获取模板文件内容。 Template template = configuration.getTemplate("test1.ftl"); //定义数据模型。 Map map=getMap(); //静态化 String content = FreeMarkerTemplateUtils.processTemplateIntoString(template, map); // System.out.println(content); InputStream inputStream = IOUtils.toInputStream(content); FileOutputStream outputStream = new FileOutputStream(new File("d:/test1.html")); //输出文件 IOUtils.copy(inputStream,outputStream); inputStream.close(); outputStream.close(); } public Map getMap(){ Map<String,Object> map=new HashMap<>(); map.put("name","黑马程序员"); Student stu1 = new Student(); stu1.setName("小明"); stu1.setAge(18); stu1.setMoney(1000.86f); stu1.setBirthday(new Date()); Student stu2 = new Student(); stu2.setName("小红"); stu2.setMoney(200.1f); stu2.setAge(19); stu2.setBirthday(new Date()); List<Student> friends = new ArrayList<>(); friends.add(stu1); stu2.setFriends(friends); stu2.setBestFriend(stu1); List<Student> stus = new ArrayList<>(); stus.add(stu1); stus.add(stu2); //向数据模型放数据 map.put("stus",stus); //准备map数据 HashMap<String,Student> stuMap = new HashMap<>(); stuMap.put("stu1",stu1); stuMap.put("stu2",stu2); //向数据模型放数据 map.put("stu1",stu1); //向数据模型放数据 map.put("stuMap",stuMap); map.put("point",102920122); return map; } }
Configuration