把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