FreeMarker学习笔记

本文详细介绍了FreeMarker的基础知识,包括创建第一个Freemarker程序,FTL语法,以及与SpringMVC和Spring Boot的集成。同时,讨论了FreeMarker在动静分离架构中的应用,阐述了如何通过配置实现静态资源和动态资源的分离。
摘要由CSDN通过智能技术生成

FreeMarker学习笔记

⼀、概述

FreeMarker是⼀款模板引擎:即⼀种基于模板和要改变的数据,并⽤来⽣成输出⽂本(HTML⽹⻚,电⼦邮件,配置⽂件,源代码等)的通⽤⼯具。它不是⾯向最终⽤户的,⽽是⼀个Java类库,是⼀款程序员可以嵌⼊他们所开发产品的组件。
模板编写为 FTL (FreeMarker Template Language)。
设计思想:模板 + 数据 —> ⽂本输出

官网:https://freemarker.apache.org/
freemarker架构描述
FreeMarker可以用于实现页面静态化。
页面静态化:即将页面的内容以静态文件的方式进行展示输出。
静态页面(如:.html,.js,.css文件);直接响应给浏览器
动态页面:(如:.jsp文件)。运行机制:.jsp–>.java–>.class—>响应浏览器
静态页面的访问速度最快。

⼆、第⼀个Freemarker程序

Maven依赖jar

<dependency>
 	<groupId>org.freemarker</groupId>
 	<artifactId>freemarker</artifactId>
 	<version>2.3.23</version>
</dependency>

创建模板

创建一个FreeMarker的模板index.ftl(后缀名也可以是.html,官方推荐.ftl后缀)

<html>
 	<head>
 		<meta http-equiv="content-type" content="text/html;charset=utf-8">
 	</head>
 	<body>
 		<h1>您好:${name}</h1>
 	</body>
</html>

注:${name} 是freemarker的取值表达式

准备数据 并根据模板⽣成静态⻚

package com.demo.freemarker;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class FreemarkerTest {
    public static void main(String[] args) throws IOException, TemplateException {
        // 1. 准备数据
        Map<String,Object> dataMap = new HashMap<String, Object>();
        dataMap.put("name","张三");
        // 2. 设置Freemarker的版本
        Configuration configuration = new Configuration(Configuration.VERSION_2_3_23);
        // 3. 设置模板目录
        configuration.setDirectoryForTemplateLoading(new File("E:\\Java\\3_Framework\\ideaCode\\freemarker_demo\\src\\main\\webapp\\WEB-INF\\template"));
        // 4. 设置编码方式
        configuration.setDefaultEncoding("UTF-8");
        // 5. 读取模板
        Template template = configuration.getTemplate("index.ftl");
        // 6. 输出静态页面
        template.process(dataMap,new FileWriter("E:\\index.html"));
    }
}

三、FTL语法

1. 语法类型

  • Interpolation 插值 ${ key名 }
  • FTL tags 标签 <# 标签名></#标签名>
  • Comments 注释 <#-- 注释内容 —> ; Freemarker的注释不会显示在生成的源文件中,而jsp的注释会显示在源代码中。
    在这里插入图片描述
  • <@>:宏(略),⾃定义标签

2. 具体示例

1. 取值
# =========================================================
Map<String,Object> dataMap = new HashMap<String, Object>();
# =========================================================

# ---------- 普通类型 ------------
	<h1>您好:${name}</h1>
# ------------------------------------
	// 数据封装
	dataMap.put("name","张三");


# -------------- 对象类型 -------------
	<h1>您好:${user.name}</h1>
# ------------------------------------
	// 对象类型 数据封装
	User user = new User();
	user.setId(1);
	user.setName("⼩红");
	dataMap.put("user",user);


# ------------ 数字类型 ---------------
# ------------------------------------
	# assign ⽤以声明当前模板临时变量
	<#assign answer=42>
# --------------取值--------------------
	# 与 ${answer} 作用相同,获取字符串类型
	${answer?string}
	# 获取数字类型
	${answer?string.number}
	# 获取货币类型:¥ 23
	${answer?string.currency}
	# 获取百分制类型: 25%
	${answer?string.percent}
# ------------------------------------


# ------ ⽇期类型 ------
	# 获取日期:2012-09-09
	${date?date}
	# 获取时间:11:12:12
	${date?time}
	# 获取日期与时间:2012-09-09 11:12:12
	${date?datetime}
# ------------------------------------
	# ⾃定义⽇期格式
	${date?string("yyyy年MM⽉dd⽇")}
	或
	${date?string("yyyy年MM⽉dd⽇ hh:mm:dd")}
# ------------------------------------


# -------------- 布尔值处理 --------------
	# 获取字面值(实际值  true | false)b:表示key;c:表示value字面值
	${b?c}
# 根据boolean值获取值:值为true时表达式值为yes;值为false时表达式值为no
	${b?string('yes', 'no')}
# ----------------------------------------
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值