FreeMarker页面静态化

页面静态化介绍

页面静态化其实就是将原来的动态网页(例如ajax请求动态获取数据库的数据并展示的网页)改为通过静态化技术生成的静态网页,这样用户在访问网页时,服务器直接给用户响应静态的html界面,没有了动态查询数据库的过程,相似静态化技术thymeleaf

目的

优化效率

以空间换时间(把界面生成好存储在服务器上)

FreeMarker介绍

用Java语言编写的模板引擎,基于模板来生成文本输出,与Web容器无关,它不仅可以用作表现层的实现技术,还可以用于生成XML、JSP或Java等

环境搭建

  1. 导入Maven坐标

    <dependency>
        <groupId>org.freemarker</groupId>
        <artifactId>freemarker</artifactId>
        <version>2.3.30</version>
    </dependency>
  2. 创建模板文件(四种元素)

    • 文本,直接输出部分
    • 注释,即<#--...-->格式不会输出
    • 插值,即${..}部分,将使用数据模型中的部分替代输出
    • FTL指令,和HTML标记类似,名字前加#号予以区分,不会输出
  3. 生成文件

    • 创建一个Configuration对象,直接new一个对象。构造方法的参数就是freemarker的版本号
    • 设置模板文件所在的路径
    • 设置模板文件使用的字符集
    • 加载一个模板,创建一个模板对象
    • 创建一个模板使用的数据集,可以是pojo也可以是map,一般是map
    • 创建一个Writer对象,一般创建FileWriter对象,指定生成的文件名
    • 调用模板对象process方法输出文件
    • 关闭流
    public class FreeMarkerTest {
        public static void main(String[] args) throws IOException, TemplateException {
            //创建配置类
            Configuration configuration = new Configuration(Configuration.getVersion());
            //设置模板所在目录
            configuration.setDirectoryForTemplateLoading(new File("D:\\IdeaProjects\\ftl"));
            //设置字符集
            configuration.setDefaultEncoding("UTF-8");
            //加载模板文件
            Template template = configuration.getTemplate("test.ftl");
            //准备模板文件中所需要的数据,通常是通过map进行构造
            Map map = new HashMap();
            map.put("name","IMAU");
            map.put("message","Hello FreeMarker");
            //准备输出流对象用于输出静态文件
            Writer writer = new FileWriter("D:\\IdeaProjects\\ftl\\test.html");
            //输出
            template.process(map,writer);
            //关闭流
            writer.close();
        }
    }

FreeMarker指令学习

  1. assign指令

    • 用于在页面上定义一个界面

    • 定义简单类型

      <#assign linkman="Mr.Chen">
      联系人:${linkman}
    • 定义对象类型

      <#assign info={"mobile":"12812345678","address":"北京市顺义区"}>
      电话:${info.mobile},地址:${info.address}
  2. include指令

    • 模板文件的嵌套,在一个模板文件中引入另一个模板文件
  3. if指令

    • 用于判断

      <#if success=true>
         你已经通过实名认证
      <#else>
          你未通过实名认证
      </#if>
    • 在Java代码中为success变量赋值

      map.put("success",true)
  4. list指令

    • 用于遍历

    • 在模板文件中使用list指令进行遍历

      <#list goodsList as goods>
         商品名称:${goods.name},价格:${goods.price}<br>
      </#list>
    • 在Java代码中给list赋值

      List goodsList = new ArrayList();
      
      Map goods1 = new HashMap();
      goods1.put("name","苹果");
      goods1.put("price",2.5);
      
      Map goods2 = new HashMap();
      goods2.put("name","香蕉");
      goods2.put("price",10.0);
      
      goodsList.add(goods1);
      goodsList.add(goods2);
      
      map.put("goodsList",goodsList);
Last modification:November 13th, 2020 at 09:33 pm
如果觉得我的文章对你有用,请随意赞赏