FreeMarker静态模版基础语法

FreeMarker 语法全面详解 FreeMarker 是一种功能强大的模板引擎,其语法简洁且灵活。本文从基础到高级全面解析了 FreeMarker 的语法体系,涵盖静态文本、FTL 标签和插值等基础语法结构,并详细介绍了注释语法。插值部分讲解了基本插值、操作符及其优先级,以及特殊变量的使用。指令部分则深入探讨了条件判断、循环、变量定义、模板包含、宏和函数等常用指令,通过大量示例展示了如何在实际应用中灵活运用这些功能。无论是初学者还是有经验的开发者,都能从中获得实用的技巧和深入的理解。 阅读详情

FreeMarker基础语法 在 Spring Boot 中的使用详解


FreeMarker 是一款以 简洁性 和 灵活性 见长的模板引擎,尤其适合需要动态生成文本但追求逻辑与展示分离的场景。其清晰的语法、强大的数据驱动能力,使其成为 Java 生态中广泛使用的工具。选择时需权衡项目需求:若需高度交互的现代 Web 应用,可考虑结合前端框架;若侧重服务端渲染或代码生成,FreeMarker 仍是经典选择。
在这里插入图片描述


1. 导入依赖

在 pom.xml 中添加 Spring Boot 官方提供的 FreeMarker Starter 依赖:

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

Spring Boot 会自动管理版本,无需手动指定。


2. 配置文件(application.yml)

在 src/main/resources/application.yml 中配置 FreeMarker:

spring:
  freemarker:
    template-loader-path: classpath:/templates/  # 模板存放路径
    cache: false  # 开发时关闭缓存,修改模板后立即生效
    charset: UTF-8
    check-template-location: true
    suffix: .ftl  # 模板文件后缀
    content-type: text/html

在这里插入图片描述


3. 简单例子

步骤 1:创建 Controller

@Controller
public class DemoController {
    @GetMapping("/hello")
    public String hello(Model model) {
        model.addAttribute("name", "World");
        return "hello"; // 对应 templates/hello.ftl
    }
}

步骤 2:创建模板文件 hello.ftl

<!DOCTYPE html>
<html>
<head>
    <title>FreeMarker Demo</title>
</head>
<body>
    <h1>Hello, ${name}!</h1>
</body>
</html>

访问 http://localhost:8080/hello 会渲染出 Hello, World!。


4. 基本语法
  • 插值表达式:${variable}
    输出变量值,如 ${user.age}。

  • 定义变量:

    <#assign price = 100>
    Price: ${price}
    
  • 注释:
    <#-- 这是注释,不会输出 -->


5. 集合指令 <#list>

遍历集合(List、数组等):

<#list users as user>
    Index: ${user_index}  <#-- 内置索引(从0开始) -->
    Name: ${user.name}
    <#if user_has_next>, </#if>  <#-- 判断是否是最后一个元素 -->
</#list>

Controller 数据准备:

model.addAttribute("users", List.of(
    new User("Alice"),
    new User("Bob")
));

6. if 指令

条件判断:

<#if user.age < 18>
    未成年
<#elseif user.age == 18>
    刚成年
<#else>
    成年人
</#if>

7. 运算符
  • 算术运算符:+, -, *, /, %
  • 比较运算符:==, !=, >, >=, <, <=
  • 逻辑运算符:&&, ||, !
  • 空值处理运算符:
    • !:默认值,如 ${name!"Anonymous"}(若 name 为空,显示 “Anonymous”)。
    • ??:判断变量是否存在,如 <#if name??>...

8. 空值处理

避免因变量为 null 导致渲染错误:

  • 默认值:

    ${user.address!"No address"}
    
  • 安全判断:

    <#if user.address??>
        Address: ${user.address}
    <#else>
        Address not provided.
    </#if>
    

9. 内建函数

FreeMarker 提供丰富的内置函数,通过 ? 调用:

  • 字符串处理:

    ${"hello"?upper_case}  <#-- 输出 "HELLO" -->
    ${"Hello"?lower_case?cap_first}  <#-- 输出 "hello" → "Hello" -->
    
  • 日期格式化:

    ${now?string("yyyy-MM-dd HH:mm:ss")}
    
  • 集合操作:

    ${users?size}  <#-- 集合长度 -->
    ${users?join(", ")}  <#-- 将集合元素拼接为字符串 -->
    
  • 数值处理:

    ${price?string.currency}  <#-- 格式化为货币,如 "$100.00" -->
    

总结

通过上述步骤,你可以在 Spring Boot 中快速集成 FreeMarker,利用其强大的模板功能实现动态页面渲染。重点掌握集合遍历、条件判断和空值处理,能有效提升开发效率。

Spring Boot整合FreeMarker全栈指南:从基础语法到高级实战的完整解决方案 FreeMarker是一款基于Java的模板引擎,广泛用于生成HTML页面及其他文本输出。其核心优势包括轻量级、强大的表达式支持、高效的静态文本处理、模板继承和国际化支持。Spring Boot与FreeMarker的整合简单高效,只需添加依赖并进行基础配置即可使用。FreeMarker的基础语法涵盖变量输出、表达式处理、常用指令(如if-else、list、include)以及内置函数和日期处理。Spring Boot通过自动配置简化了FreeMarker的集成,开发者也可以通过自定义配置满足更复杂的需求 阅读详情

相关推荐

springboot整合freemarker例子

springboot整合freemarker例子

spring boot整合freemarker及freemarker基础语法超详细讲解

采用模板+数据=HTML 实现页面的静态化。 也就是服务端的页面静态化技术。 JSP/Freemarker/Thymeleaf是常见的模板引擎。 引依赖 okhttp与HttpClient一样的作用,实现远程访问: 实体类@Data等注解: freemarker默认会从templates目录中获取模板,所以不要乱改: freemarker...

学亮编程手记 2442

【ESP32开发】——开发环境搭建(VSCode+PlatformIO)

本章内容主要介绍ESP32的开发环境搭建(基于VSCode+PlatformIO)的流程与相应的注意事项,避免开发ESP32止于环境搭建!在项目的维护过程中,可以更好地管理和更新代码、调试问题,并且能够快速适应和采用新的功能、库或硬件平台。:VSCode 的代码提示和自动补全功能,以及 PlatformIO 的管理工具,都能帮助你编写规范、格式良好且易于阅读的代码。:Arduino 框架是一种简单、易用的嵌入式开发框架,适用于快速原型开发和小型项目。需要选择对应自己开发的开发板型号。

m0_61934621的博客 8415

FreeMarker的基本语法

Freemarker FreeMarker 是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。 模板编写为FreeMarker Template Language (FTL)。它是简单的,专用的语言,不是像PHP那样成熟...

CBeann的博客 1732

保姆级教程:用MS建完分子模型,如何一键转成LAMMPS能用的data文件?

本文详细介绍了如何将Materials Studio(MS)构建的分子模型转换为LAMMPS可用的data文件的全流程。重点讲解了力场选择、环境配置、转换命令参数解析及常见问题排查,帮助初学者快速掌握MS与LAMMPS之间的数据转换技巧,特别适合计算材料学领域的研究人员。

weixin_42665255的博客 471

在WinXP操作系统上安装Tornado2.2详细教程

使用VxWorks的人都想在自己的电脑中装VxWorks的编译器Tornado,然而Win10操作系统对于Tornado并不友好,根本装不成功。而对于Win7操作系统,之前在实验室一台Win7上装Tornado成功过,并且一直在上面进行vx开发,但是过一段时间在其他Win7上装Tornado时又不能成功,由此说明Tornado对于Win7操作系统对Tornado的兼容也不是很好,所以想要长久使用T...

weixin_43822311的博客 4481

【Java】SpringBoot集成freemarker|这下总该学会了吧

SpringBoot集成freemarker,包含freemarker语法和源码测试,拉取可用。

m0_64210833的博客 8436

攻克+86手机号Discord验证墙:从“无效”到“成功”的实战指南

本文提供了一份针对+86手机号在Discord注册时频繁遭遇“手机号无效”问题的实战解决指南。文章系统分析了问题根源,并分步详解了从打造纯净网络环境、尝试多种手机号格式(如+86前加0),到更换iOS等客户端设备的有效方法,旨在帮助用户成功完成Discord手机号验证。

mac99的博客 1109

freemarker基础语法+整合SpringBoot搭建环境

页面静态化就是对动态网页(ajax请求成功返回的数据)通过静态化技术变成静态网页,用户访问网页时,直接返回静态页面,而不去数据库中查询,对于数据变化不频繁的时候可以使用页面静态化,好处是可以降低对数据库的访问频率。比如电商网站里的某一个商品详细信息是变动不频繁的、新闻等,这种就适合做页面静态化。但对于数据变化频繁的就不适合了。

菜鸟的博客 1243

音频链路分析

音频链路分析摘要 本文分析了蓝牙音频设备(BES2700)的音频传输链路,主要包括通话和音乐播放两种场景: 通话链路: 下行:蓝牙接收数据→解码→通过Codec输出到扬声器 上行:麦克风采集→Codec处理→蓝牙编码发送 音乐播放链路: 通过A2DP协议接收高质量音频数据 经过解码、EQ调节等音频处理后输出 系统采用多线程消息机制处理音频任务,通过mailbox传递控制消息,由回调函数处理具体音频数据流。不同应用场景使用不同的蓝牙协议栈(HFP/HSP用于通话,A2DP用于媒体)和编码方式(mSBC/SBC

云淡风轻 85

基于PPT的三维光路结构示意图绘制实例演示-技术细节

基于PPT的三维光路结构示意图绘制实例演示-技术细节

简单光学 7468

Spring Boot中的Freemarker基本语法

FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。 模板编写为FreeMarker Template Language (FTL)。它是简单的,专用的语言, 不是 像PHP那样成熟的编程语言。 那就意味着要准备数...

zhouym_的博客 1773

爬虫反爬:一文掌握 BotBrowser 的原理和使用(能绕过很多验证码的指纹浏览器)

BotBrowser是使用经过修改的Chromium内核(修改Chromium的C++源代码)的隐形浏览器,可靠地绕过Cloudflare、Shape、PerimeterX、Datadome、Akamai、Kasada、hCaptcha和reCAPTCHA。BotBrowser是一个跨平台的自动化工具,它重新定义了web自动化。专为爬虫、RPA(机器人流程自动化)和 Web 测试设计。与 Puppeteer/Selenium 不同,它通过无头模式(Headless)和API 级控制。

数据知道的博客 1万+

freemark--模版引擎

是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。if 指令即判断指令,是常用的FTL指令,freemarker在解析时遇到if会进行判断,条件为真则输出if中间的内容,否则跳过内容不再输出。在templates下创建模板文件 01-basic.ftl ,模板中的插值表达式最终会被freemarker替换成具体的数据。它是简单的,专用的语言,index:得到循环的下标,使用方法是在stu后边加"_index",它的值是从0开始。

可爱的鸡仔的博客 2361

harbor x509: certificate signed by unknown authority【20251222】

本教程通过「合并证书链(服务器端)+ 预置根 CA(客户端)」彻底解决了自签名证书的 x509 错误,同时集成了 Trivy 漏洞扫描,实现了 Harbor 从搭建到实用的全流程。证书链合并是服务器端的关键,确保客户端获取完整信任路径;客户端需同时配置「系统信任库 + Docker 信任目录」,避免 Docker 独立信任机制导致的问题;所有 IP 需保持一致(Harbor 配置、证书绑定、客户端访问),是避免错误的基础。

老韩的Linux云计算架构师进阶之路 681

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

自定义代码生成器

​ 在项目开发过程中,有很多业务模块的代码是具有一定规律性的,例如controller控制器、service接口、service实现类、mapper接口、model实体类等等,这部分代码可以使用代码生成器生成,我们就可以将更多的时间放在业务逻辑上。传统的开发步骤:​ 创建数据库和表 ​ 根据表设计实体类 ​ 编写mapper接口 ​ 编写service接口和实现类 ​ 编写controller控制器 ​ 编写前端页面 ​ 前后端联调基于代码生成器开发步骤:​ 创建数据库和表 ​ 使用代码生成器生成实体类、m

黑马程序员官方博客 548

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Freemarker基本语法

总结来说,要使用Freemarker生成静态文件,你可以使用Java程序调用Freemarker进行渲染并输出到文件,或者结合静态网站生成器进行生成。1.使用Java程序调用Freemarker:你可以编写一个Java程序,使用Freemarker来渲染模板,并将渲染结果输出到文件。需要注意的是,指令的结束标签是必须的,在循环体内部的内容将被迭代多次。除了内建函数,Freemarker还支持自定义函数,可以在模板中使用自己定义的函数来进行特定的处理。操作符来连续访问键。

m0_61898915的博客 3204

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Freemarker网页静态化

1 课程计划 第九天: 1、使用freemarker实现网页静态化        a )  FreeMarker的使用方法        b )  FreeMarker的模板语法        c )  FreeMarker整合springmvc 2、ActiveMq同步生成静态网页 3、Sso系统说明 2 网页静态化 可以使用Freemarker实现网页静态化。 2.1 什么...

etna_hh的博客 2462

页面静态化技术velocity与freemarker比较

相比较 FreeMarker 而言,Velocity 更加简单、轻量级,但它的功能却没有 FreeMarker 那么强大。  对于大部分的应用来说,使用 FreeMarker 比 Velocity 更简单,因为 Velocity 还必须编写一些自定义的toolbox类以及一遍遍重复的编写一些比较通用的模版代码,因此也就丧失了刚开始开发时更多的宝贵时间。另外使用工具类和变通的方法在模版引擎中似

龙珠课堂 6804

java freemarker 模版_Java模版引擎之Freemarker

Java模版引擎之Freemarkerfreemarker是一款模版引擎,是一种基于模版生成静态文件的通用工具,它是为Java程序员提供的一个类库,它不是面向最终用户的,而是为程序员提供了一款可以嵌入他们开发产品的应用程序。1.插值1.1常用${var}语法进行取值1.2对null、不存在对象取值${var!’设置默认值’}1.3取包装对象的值,通过“点”语法:${user.name}1....

weixin_42367472的博客 271

使用freemarker生成静态html文件

一、引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> <version>2.1.10.RELEASE</version> </dependency> 二、yml配置 #freemarker相关配置属性

Soda_lw的博客 3407

freemarker入门、freemarker语法、spring与freemarker的整合、网页静态化方案分析

freemarker入门 上节课我们一起学习了如何在查询商品详情时添加缓存,这节课我们一起来学习下freemarker。 我们都知道,缓存可以提高查询性能,但是当用户访问量很大时,单纯依靠缓存已经不行了,为什么这么说呢?这是因为我们在访问商品详情的时候由于每款商品都不一样,因此每款商品的详情页都是动态生成的,每查看一次,页面就要重新渲染一次,渲染的过程是消耗时间的,当用户访问量很大时,这便在一定程...

AthlenaA的博客 506

SSM集成FreeMarker以及常用语法

文章目录一、前言二、FreeMarker简介三、SSM集成FreeMarker基本配置FTL指令常用标签及语法———————————- 基础语法 ———————————-1、字符输出2,日期输出3,数字输出(以数字20为例)4,申明变量5,比较运算算符6,算术运算符7,逻辑运算符8,FreeMarker中的运算符优先级如下(由高到低排列):9,if逻辑判断(注意:elseif不加空格)10、switch (条件可为数字,可为字符串)11、集合 & 循环12、Map对象13、FreeMarker支持如

qq_45660133的博客 967

Java模版引擎之Freemarker

Freemarker1. 插值2. 逻辑指定:if、switch2.1 if2.2 switch3. 集合遍历3.1 list遍历3.2 map遍历4. string基本操作指令5. 自定义函数(继承TemplateMethodModelEx接口)5.1 创建自定义函数类5.2 将自定义函数对象传到模版中5.3 在模版中使用6. List的指令6.1 排序6.2 反转6.3 长度7. Freema...

雨后是冰雹 1048

java freemarker 模版_Java模版引擎Freemarker

Java模版引擎FreemarkerFreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据(如下图)FreeMarker不是一个Web应用框架...

weixin_29821699的博客 631

FreeMarker页面静态化

如何对页面进行静态化? 一个页面等于模板加数据,在添加页面的时候我们选择了页面的模板。 页面静态化就是将页面模板和数据通过技术手段将二者合二为一,生成一个html网页文件。 页面静态化及页面发布流程图如下: 业务流程如下: 1、获取模型数据 2、制作模板 3 、对页面进行静态化 4、将静态化生成的html页面存放文件系统中 5、将存放在文件系统的html文件发布到服务器 FreeMarker介绍...

LucasLi2016的博客 590
上一篇: Redis 集群结构
下一篇: FreeMarker 生成静态文件(写在磁盘当中)
小李不秃头♛
博客等级 码龄2年 619粉丝 102原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值