• springboot2.0结合freemarker生成静态化页面


    使用freemarker将页面生成html文件,本节测试html文件生成的方法:

    1、使用模板文件静态化
    定义模板文件,使用freemarker静态化程序生成html文件。
    2、使用模板字符串静态化
    定义模板字符串,使用freemarker静态化程序生成html文件。

    1. pom.xml配置

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.2.2.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.example</groupId>
        <artifactId>demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>demo</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-freemarker</artifactId>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-io</artifactId>
                <version>1.3.2</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.junit.vintage</groupId>
                        <artifactId>junit-vintage-engine</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>
    
    

    2. application.yml配置

    server:
      port: 8088
    spring:
      application:
        name: test-freemarker
      #    freemarker配置
      freemarker:
        cache: false  #关闭模板缓存,方便测试
        settings:
          template_update_delay: 0  #检查模板更新延迟时间,设置为0表示立即检查,如果时间大于0会有缓存不方便进行模板测试
        template-loader-path: classpath:/templates
        charset: UTF-8
        check-template-location: true
        suffix: .ftl
        content-type: text/html
        expose-request-attributes: true
        expose-session-attributes: true
        request-context-attribute: request
    
    

    3. 使用模板文件静态化

    3.1 创建测试类,编写测试方法

    package com.example.demo;
    
    import freemarker.template.Configuration;
    import freemarker.template.Template;
    import freemarker.template.TemplateException;
    
    import org.apache.commons.io.IOUtils;
    import org.junit.jupiter.api.Test;
    import org.springframework.boot.test.context.SpringBootTest;
    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.HashMap;
    import java.util.Map;
    
    /**
     * @author john
     * @date 2019/12/20 - 19:09
     */
    @SpringBootTest
    public class TestFreemarkerHtml {
        //基于模板生成静态化文件
        @Test
        public void testGenerateHtml() throws IOException, TemplateException {
            //创建配置类
            Configuration configuration = new Configuration(Configuration.getVersion());
    //设置模板路径
            String classpath = this.getClass().getResource("/").getPath();
            configuration.setDirectoryForTemplateLoading(new File(classpath + "/templates/"));
            //设置字符集
            //configuration.setDefaultEncoding("UTF‐8");
            //加载模板
            Template template = configuration.getTemplate("test1.ftl");
            //数据模型
            Map<String, Object> map = new HashMap<>();
            map.put("name", "john");
            //静态化
            String content = FreeMarkerTemplateUtils.processTemplateIntoString(template, map);
            //静态化内容
            System.out.println(content);
            InputStream inputStream = IOUtils.toInputStream(content);
            //输出文件
            FileOutputStream fileOutputStream = new FileOutputStream(new File("d:/test/test1.html"));
            int copy = IOUtils.copy(inputStream, fileOutputStream);
        }
    }
    
    

    编写模板

    <html>
    <head>
        <title>hello world!</title>
    </head>
    <body>
    ${name}<br/>
    <#assign text="{'bank':'工商银行','account':'10101920201920212'}" />
    <#assign data=text?eval />
    开户行:${data.bank} 账号:${data.account}
    </body>
    </html>
    

    生成文件

    3.2 使用模板字符串静态化

    package com.example.demo;
    
    import freemarker.cache.StringTemplateLoader;
    import freemarker.template.Configuration;
    import freemarker.template.Template;
    import freemarker.template.TemplateException;
    
    import org.apache.commons.io.IOUtils;
    import org.junit.jupiter.api.Test;
    import org.springframework.boot.test.context.SpringBootTest;
    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.HashMap;
    import java.util.Map;
    
    /**
     * @author john
     * @date 2019/12/20 - 19:09
     */
    @SpringBootTest
    public class TestFreemarkerHtml {
        //基于模板字符串生成静态化文件
        @Test
        public void testGenerateHtmlByString() throws IOException, TemplateException {
            //创建配置类
            Configuration configuration = new Configuration(Configuration.getVersion());
            //模板内容,这里测试时使用简单的字符串作为模板
            String templateString = "" +
                    "<html>
    " +
                    "  <head></head>
    " +
                    "  <body>
    " +
                    "  名称:${name}
    " +
                    "  </body>
    " +
                    "</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", "john");
            //静态化
            String content = FreeMarkerTemplateUtils.processTemplateIntoString(template, map);
            //静态化内容
            System.out.println(content);
            InputStream inputStream = IOUtils.toInputStream(content);
            //输出文件
            FileOutputStream fileOutputStream = new FileOutputStream(new File("d:/test/test2.html"));
            IOUtils.copy(inputStream, fileOutputStream);
        }
    }
    
    

  • 相关阅读:
    微软Blazor组件发布,DevExpress v19.1.8中可用:Charts新功能
    数据管理必看!Kendo UI for jQuery过滤器概述
    项目管理工具!DevExpress Winforms Gantt控件 v19.2强势来袭
    WPF界面开发:DevExpress WPF在GridControl中固定行时处理时刻
    bash文件操作之批量修改文件格式与重命名——二合一完美版
    ubuntu 查看文件编码并进行批量编码修改
    文件批量重命名
    Scanf--数据第一个字符是西文字符的scanf函数
    markdown格式速查
    markdown样式速查
  • 原文地址:https://www.cnblogs.com/ifme/p/12074776.html
Copyright © 2020-2023  润新知