当前位置: 首页 > news >正文

Java学习第八十部分——Freemarker

一、前言提要

       Apache FreeMarker是一个用Java 编写的模板引擎。它的核心是:数据(Java 对象) + 模板(*.ftl 文件) = 文本输出(HTML、XML、邮件、源码、配置文件等任何纯文本格式)。  

二、关键特性  

  • 分离表现层与业务逻辑:模板只关心“如何展示”,不关心“数据怎么来”。  

  • 语法简洁:`${user.name}`、`[#if]`、`[#list]` 等标签直观易读。  

  • 零依赖 Servlet:不依赖 Web 环境,可在普通 Java 程序中生成静态文件(如生成代码、邮件模板)。  

  • 国际化支持:内建多语言、数字/日期格式化。  

  • 安全:默认对 HTML 转义,防止 XSS(可配置)。  

三、功能用法

功能分类关键语法/示例典型场景
1. 取值(插值)${user.name}
页面渲染、邮件模板、短信模板
2. 数字格式化${salary?c} → 原样
报表、电商价格展示
3. 字符串处理${str?substring(1,4)} 截取

文案统一加工、关键词脱敏
4. 日期格式化${date?string('yyyy-MM-dd')}
订单时间、消息时间
5. 条件判断<#if score < 60> 不及格


个性化提示、颜色区分状态
6. 循环遍历<#list users as u>

表格、下拉框、枚举展示
7. 宏(可复用片段)<#macro card title>

公共组件、代码片段复用
8. 命名空间/模块化<#import "/common/commons.ftl" as c>多人协作、宏库共享
9. assign 临时变量<#assign total=0>
循环累加、复杂计算
10. HTML 转义${content?html} 防 XSS富文本、评论展示
11. 缺失值处理${user.nick!'匿名'} 空值兜底避免 NPE,提高容错
12. switch-case<#switch day>
多分支文案,如周菜谱

四、使用场景  

+-------------------+---------------------------+
|       场景        |     示例输出文件类型      |
+===================+=============+
|  动态网页渲染     |    HTML、CSS、JS          |
+-------------------+---------------------------+
|  代码生成器       |    Java、SQL、Proto       |
+-------------------+---------------------------+
|  邮件/短信模板    |    纯文本或 HTML 邮件     |
+-------------------+---------------------------+
|  配置文件生成     |    YAML、JSON、XML        |
+-------------------+---------------------------+

五、与Java关系  

1. 运行依赖  
- Java 依赖:FreeMarker 本身是一个JAR 包(`freemarker-2.3.x.jar`),需运行在JVM上。  
- 数据交互:模板中使用的所有变量(如 `${user.name}`)必须来自Java对象(Map、JavaBean、List 等)。  

2. 工作流程  

// 1. 准备数据(Java 对象)
Map<String, Object> data = new HashMap<>();
data.put("user", new User("Alice", 25));// 2. 加载模板(*.ftl 文件)
Configuration cfg = new Configuration(Configuration.VERSION_2_3_31);
cfg.setClassForTemplateLoading(this.getClass(), "/templates");
Template template = cfg.getTemplate("user.ftl");// 3. 合并数据与模板,输出文本
Writer out = new StringWriter();
template.process(data, out);  // 输出结果:Hello, Alice! You are 25.

六、与Java生态集成  

七、与JSP对比  

维度FreeMarkerJSP
定位通用模板引擎专用于 Servlet Web
语法${}[#if]<% %>、JSTL 标签
依赖不依赖 Servlet必须运行在 Servlet 容器
功能更强大的内建函数(如序列化、日期格式化)依赖 JSTL 扩展

八、总结归纳

       FreeMarker 是一个Java 世界的“胶水层”,将后端数据前端展示/文本输出解耦。无论是生成动态网页,还是批量生成代码,它都能通过简单的模板语法和 Java 对象高效完成任务。

http://www.dtcms.com/a/301329.html

相关文章:

  • Linux c网络专栏第三章DPDK
  • Petalinux驱动开发
  • Linux驱动开发笔记(五)——设备树(下)——OF函数
  • 人社部物联网安装调试员的实训平台
  • RabbitMq 常用命令和REST API
  • 9.SpringBoot Web请求参数绑定方法
  • 盛最多水的容器-leetcode
  • 《Java 程序设计》第 7 章 - 继承与多态
  • 记录几个SystemVerilog的语法——时钟块和进程通信
  • maven聚合工程(多个mudule只编译、打包指定module)
  • JVM类加载机制全流程详解
  • 通过硬编码函数地址并转换为函数指针来调用函数
  • Java#包管理器来时的路
  • Leetcode-3427变长子数组求和
  • Mitk教程案例项目编译
  • 嵌入式——单片机的独立按键
  • 【3DsMax+Zbrush+SP】风格化低多边形模型制作教程——以制作杯子为例——03在Substance Painter中制作材质
  • PyTorch深度学习入门记录3
  • 两数之和 II - 输入有序数组-leetcode
  • 【深度学习系列82】joyagent上手体验
  • 五、搭建springCloudAlibaba2021.1版本分布式微服务-gateway网关
  • 基于大模型的预训练、量化、微调等完整流程解析
  • 【思维链(CoT)技术深度解析】从理论到实践的革命性推理方法
  • pytest中的参数化
  • Python-初学openCV——图像预处理(三)
  • 相对路径遍历(CWE-22)
  • 【杂谈】-被引用即被看见:生成式AI如何改写内容规则
  • vscode找不到python解释器的解决方案
  • 8. 若依框架的AjaxResult
  • Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现PCB上二维码检测识别(C#代码UI界面版)