• 阶段5 3.微服务项目【学成在线】_day04 页面静态化_10-freemarker静态化测试-基于模板文件静态化






    把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;
        }
    }
    FreemarkerTest.cs
    <!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
  • 相关阅读:
    leetcode 851. Loud and Rich
    674. 最长连续递增序列
    896. 单调数列
    905. 按奇偶排序数组
    917. 仅仅反转字母
    922. 按奇偶排序数组 II
    925. 长按键入
    929. 独特的电子邮件地址
    933. 最近的请求次数
    自己动手丰衣足食写java贪吃蛇
  • 原文地址:https://www.cnblogs.com/wangjunwei/p/11586488.html
Copyright © 2020-2023  润新知