美文网首页
Spring-boot集成freemarker入门|实践

Spring-boot集成freemarker入门|实践

作者: LIN_dsdj | 来源:发表于2019-02-12 14:46 被阅读0次

    Spring-boot集成freemarker入门|实践

    介绍

    官方介绍 https://freemarker.apache.org/

    百度百科:https://baike.baidu.com/item/freemarker/9489366?fr=aladdin

    关于介绍本文就不重复叙述了

    下面直接开始实践!

    Freemarker + Springboot Maven配置基础工程

    创建一个maven项目

    spring-boot项目中添加依赖

        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring‐boot‐starter‐freemarker</artifactId>
            </dependency>
        </dependencies>
    

    在resource目录下添加配置文件

    server:
      port: 8088 # 服务端口
    spring:
      application:
        name: test-freemarker
      freemarker:
        cache: false #关闭模板缓存,方便测试
        settings:
            template_update_delay: 0 #检查模板更新延迟时间,设置为0表示立即检查,如果时间大于0会有缓存不方便进行模板测试
    

    创建数据模型类

    package com.dsdj.test.freemarker.model;
    
    import lombok.Data;
    import lombok.ToString;
    
    import java.util.Date;
    import java.util.List;
    
    /**
     * model
     *
     * @author dsdj
     * @version 1.0
     * @className Student
     * @date 2019/2/12 9:09
     **/
    @Data
    @ToString
    public class Student {
        private String name;//姓名
        private int age;//年龄
        private Date birthday;//生日
        private Float money;//钱包
        private List<Student> friends;//朋友列表
        private Student bestFriend;//最好的朋友
    }
    

    这里使用了lombok需要引入下面的依赖

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.16.16</version>
    </dependency>
    

    创建模板

    在 src/main/resources下创建templates,此目录为freemarker的默认模板存放目录。

    在templates下创建模板文件demo.ftl.

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf‐8">
        <title>Hello World!</title>
    </head>
    <body>
    Hello ${name}!
    </body>
    </html>
    

    模板中的${name}最终会被freemarker替换成具体的数据。

    创建controller

    创建Controller类,向Map中添加name,最后返回模板文件。

    添加依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    

    创建启动类

    package com.dsdj.test.freemarker;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    /**
     * spring boot 启动类
     *
     * @author dsdj
     * @version 1.0
     * @className FreemarkerTestApplication
     * @date 2019/2/12 9:41
     **/
    @SpringBootApplication
    public class FreemarkerTestApplication {
        public static void main(String[] args) {
            SpringApplication.run(FreemarkerTestApplication.class,args);
        }
    }
    

    启动测试

    1549936254247.png

    FreeMarker基础

    关于freemarket的知识点,主要是掌握一起下知识

    • 总体结构

    • 指令(几个核心指令)

    • 表达式

    • 插值

    读者可以参考下面的教程

    http://freemarker.foofun.cn/dgui_template_overallstructure.html

    这个教程是翻译自官方的文档。可以快速浏览一遍,不懂再去查阅。

    在掌握了基础的语法之后,下面进行静态化实践。

    freemarker静态化实践

    使用模板文件静态化

    创建测试类

    package com.dsdj.test.freemarkert;
    
    import freemarker.template.Configuration;
    import freemarker.template.Template;
    import freemarker.template.TemplateException;
    import org.apache.commons.io.IOUtils;
    import org.junit.Test;
    import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.URISyntaxException;
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * TODO
     *
     * @author dsdj
     * @version 1.0
     * @className TestFreemarker
     * @date 2019/2/12 10:30
     **/
    
    public class TestFreemarker {
        @Test
        public void testGenerateHtml() throws IOException, TemplateException, URISyntaxException {
            // 创建配置类
            Configuration configuration = new Configuration(Configuration.getVersion());
            // 设置模板路径 toURI()防止路径出现空格
            String classpath = this.getClass().getResource("/").toURI().getPath();
            configuration.setDirectoryForTemplateLoading(new File(classpath+"/templates/"));
            // 设置字符集
            configuration.setDefaultEncoding("utf-8");
            // 加载模板
            Template template = configuration.getTemplate("demo1.ftl");
            // 数据模型
            Map<String,Object> map = new HashMap<>();
            map.put("name", "静态化测试");
            // 静态化
            String content = FreeMarkerTemplateUtils.processTemplateIntoString(template,map);
            // 打印静态化内容
            System.out.println(content);
            InputStream inputStream = IOUtils.toInputStream(content);
            // 输出文件
            FileOutputStream fileOutputStream = new FileOutputStream(new File("demo1.html"));
            int copy = IOUtils.copy(inputStream, fileOutputStream);
    
        }
    }
    

    测试结果

    1549951894520.png

    使用模板字符串静态化

    测试方法

    @Test
    public void testGenerateHtmlByString() throws IOException, TemplateException {
        // 创建配置类
        Configuration configuration = new Configuration(Configuration.getVersion());
        // 测试模板内容
        String templateString="" +
                "<html>\n" +
                " <head></head>\n" +
                " <body>\n" +
                " 名称:${name}\n" +
                " </body>\n" +
                "</html>";
        // 模板加载器
        StringTemplateLoader stringTemplateLoader = new StringTemplateLoader();
        stringTemplateLoader.putTemplate("template",templateString);
        configuration.setTemplateLoader(stringTemplateLoader);
        // 得到模板
        Template template = configuration.getTemplate("template","utf-8");
        // 数据模型
        Map<String,Object> map = new HashMap<>();
        map.put("name","使用模板字符串静态化");
        // 静态化
        String content = FreeMarkerTemplateUtils.processTemplateIntoString(template,map);
        // 打印静态化内容
        System.out.println(content);
        InputStream inputStream = IOUtils.toInputStream(content);
        // 输出文件
        FileOutputStream fileOutputStream = new FileOutputStream(new File("demo1.html"));
        int copy = IOUtils.copy(inputStream, fileOutputStream);
    }
    
    1549952513189.png

    以上就是freemarker的基本使用,但看到这里我们肯定有很多疑问。下面进行总结

    总结

    为什么可以直接直接跳转?

    模板静态化如何在场景下使用?

    相关文章

      网友评论

          本文标题:Spring-boot集成freemarker入门|实践

          本文链接:https://www.haomeiwen.com/subject/fehkeqtx.html