模板引擎:第一章:FreeMarker

SpringBoot系列:Spring Boot使用模板引擎FreeMarker 可能有人会问我为什么愿意去花时间帮助大家实现求职梦想,因为我一直坚信时间是可以复制的。我牺牲了自己的大概十个小时写了这片文章,换来的是成千上万的求职者节约几天甚至几周时间浪费在无用的资源上。上面的这些(算法与数据结构)+(Java多线程学习手册)+(计算机网络顶级教程)等学习资源《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!上面的这些(算法与数据结构)+(Java多线程学习手册)+(计算机网络顶级教程)等学习资源。 阅读详情

Freemarker模板引擎技术

①概念

FreeMarker是一款模板引擎:即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。FreeMarker是免费的,基于Apache许可证2.0版本发布。其模板编写为FreeMarker Template Language(FTL),属于简单、专用的语言。需要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,主要用于如何展现数据, 而在模板之外注意于要展示什么数据。

②工作原理

所有的模板视图技术的工作原理基本类似,也就意味着FreeMarker和JSP基本差不多。模板文件和数据模型是模板视图技术用来生成HTML页面所必须的组成部分。

数据模型(Java) + 模板文件(.ftl .jsp文件)= 输出(HTML,XML,源码文件)

JSP在Web系统中弥补了Servlet生成HTML页面的不足,但只能应用于Web系统,生成HTML页面。而FreeMarker不仅仅应用于Web系统,也可以应用于Java系统,还能生成Java, XML等文件,所以应用面更广。使用时,需要在项目pom.xml文件中增加依赖关系。

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

用在SpringMVC中时需要加入对应的视图解析器

<bean id="freemarkerConfig"
	class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
	<!-- <property name="templateLoaderPath" value="/WEB-INF/ftl/" /> --> 
	<property name="templateLoaderPaths">
		<list>
			<value>/WEB-INF/ftl/</value>      
			<value>classpath:/ftl/</value>
		</list>
	</property>
	<property name="freemarkerSettings">
		<props>
			<prop key="defaultEncoding">UTF-8</prop>
			<!-- FreeMarker默认每隔5秒检查模板是否被更新,如果已经更新了,就会重新加载并分析模板。 但经常检查模板是否更新可能比较耗时。如果你的应用运行在生产模式下,而且你预期模板不会经常更新, 
				则可以将更新的延迟时间延长至一个小时或者更久。 可以通过为freemarkerSettings属性设置template_update_delay达到这一目的,0 
				表示每次都重新加载 -->
			<prop key="template_update_delay">0</prop>
			<prop key="default_encoding">UTF-8</prop>
			<prop key="number_format">0.##########</prop>
			<prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
			<prop key="classic_compatible">true</prop>
			<prop key="template_exception_handler">ignore</prop>
		</props>
	</property>
</bean>

<bean
	class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"
	p:prefix="/" p:suffix=".ftl">
	<property name="cache" value="false" />
	<property name="viewClass"
		value="org.springframework.web.servlet.view.freemarker.FreeMarkerView" />
	<property name="contentType" value="text/html;charset=UTF-8"></property>
	<property name="exposeRequestAttributes" value="true" />
	<property name="exposeSessionAttributes" value="true" />
	<property name="exposeSpringMacroHelpers" value="true" />
	<property name="requestContextAttribute" value="base"></property>
	<property name="order" value="0"></property>
</bean>

③基本语法

${...}

FreeMarker将会输出真实的值来替换大括号内的表达式,这样的表达式被称为interpolation(插值)。

<#-- 注释内容 -->

注释和HTML的注释也很相似,但是它们使用<#-- and -->来标识。不像HTML注释那样,FTL注释不会出现在输出中(不出现在访问者的页面中),因为FreeMarker会跳过它们。

<#if condition>
    ...
<#elseif condition2>
    ...
<#elseif condition3>
    ...
<#else>
    ...
</#if>

FTL标签和HTML标签有一些相似之处,但是它们是FreeMarker的指令,是不会在输出中打印的。这些标签的名字以#开头。(用户自定义的FTL标签则需要使用@来代替#)

④例子

bean.ftl文件

package ${packageName}.bean;
public class ${className} {
}

 Java代码

// 创建Freemarker对象的配置对象
Configuration cfg = new Configuration();
// 设定默认的位置(路径)
cfg.setDirectoryForTemplateLoading(new File(""));
cfg.setDefaultEncoding("UTF-8");
cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);

// 数据
Map paramMap = new HashMap();

String className = "User";

paramMap.put("packageName", "com.atguigu.crowdfunding");
paramMap.put("className", className);

Template t = cfg.getTemplate("bean.ftl");
// 组合生成
Writer out = new OutputStreamWriter(new FileOutputStream(new File("User.java")), "UTF-8");
// 执行
t.process(paramMap, out);

⑤常用语法

[1]条件

<#if condition>
    ...
<#elseif condition2>
    ...
<#elseif condition3>
    ...
<#else>
    ...
</#if>

[2]循环

<#list users as user>
    ${user.name},${user_index}
</#list>

[3]包含

<#include "xxxx.ftl"> 

[4]表达式

表达式说明
${Request.member.name}从Request域读取数据
${Session.member.name}从Session域读取数据
${Application.member.name}从Application域读取数据
${RequestParameters['id']}读取请求参数
${book.name?if_exists }用于判断如果存在,就输出这个值
${book.name?default(‘xxx’)}默认值xxx
${book.name!"xxx"}默认值xxx
${book.date?string('yyyy-MM-dd')}日期格式
s?html对字符串进行HTML编码
s?cap_first使字符串第一个字母大写
s?lower_case将字符串转换成小写
s?trim去掉字符串前后的空白字符
s?size获得序列中元素的数目

SpringBoot中使用FreeMarker

①依赖

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

②增加相关配置

spring.freemarker.allow-request-override=false
spring.freemarker.allow-session-override=false
spring.freemarker.cache=true
spring.freemarker.charset=UTF-8
spring.freemarker.check-template-location=true
spring.freemarker.content-type=text/html
spring.freemarker.enabled=true  
spring.freemarker.expose-request-attributes=false
spring.freemarker.expose-session-attributes=false
spring.freemarker.expose-spring-macro-helpers=true
spring.freemarker.prefer-file-system-access=false
spring.freemarker.suffix=.ftl
spring.freemarker.template-loader-path=classpath:/templates/
spring.freemarker.settings.template_update_delay=0
spring.freemarker.settings.default_encoding=UTF-8
spring.freemarker.settings.classic_compatible=true 
spring.freemarker.order=1

 其中最重要的是spring.freemarker.suffix和spring.freemarker.template-loader-path,其他配置项可以使用默认值。

	@RequestMapping("/testftl")
	public String testFtl(Model model) {
		
		model.addAttribute("message", "good news!!!");
		
		return "target";
	}

 

freemarker集成maven的简单的应用

之前做过的分布式项目中就有用到freemarker

 

 

项目在我的github上

也可以在百度云上下载

注意:导入项目后需要相应的修改,这里分享我的maven仓库防止导入项目全部报红。

 

 

 

 

 

 

 

 

 

 

 

【SpringBoot】4、SpringBoot中整合Freemarker模板引擎 FreeMarker 是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本( HTML 网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个 Java 类库,是一款程序员可以嵌入他们所开发产品的组件。 FreeMarker 是一个很值得去学习的模版引擎。它是基于模板文件生成其他文本的通用工具。本文主要介绍在 SpringBoot 中如何整合 FreeM... 阅读详情

相关推荐

基于bootstrap+Java的图书管理系统(任务书)

10] 倪甜弟,周晓波,王相喜.基于JSP图书馆自习室预约系统的设计与实现[J].现代计算机, 2024, 30(9):117-120.DOI:10.3969/j.issn.1007-1423.2024.09.023.[2] 陈明雪,赵勇,周小丽,等.基于Node.js和Bootstrap的图书管理系统设计与研究[J].现代信息科技, 2021, 5(24):4.[9] 杨婷婷.基于VOSviewer的图书馆管理系统研究的可视化分析[J].现代信息科技, 2023, 7(3):123-126.

毕业作品网站 649

Spring boot freemarker模板路径的几种设置方式

spring boot中使用freemarker模板引擎技术,spring boot中提供了一些默认的配置。默认配置如下所示: 本文只探讨freemarker中模板路径的设置方式,其他配置,请注意查看后续文章。 # FREEMARKER (FreeMarkerAutoConfiguration) spring.freemarker.allow-request-override=false ...

如烟阁 4万+

macOS Monterey官方镜像高速下载指南(附迅雷链接+兼容性清单)

本文提供macOS Monterey官方镜像的高速下载指南,重点介绍利用迅雷等工具加速下载官方安装包的有效方法。同时,详细列出了系统兼容性清单,帮助用户在下载前确认设备支持,并分享了从下载、验证到安全安装的完整流程与常见问题解决方案。

j7k8l的博客 2200

【Spring boot学习第九天】freemarker使用小结

1.修改freemarker默认模板位置 在配置文件中添加freemarker的配置地址即可: spring.freemarker.template-loader-path=classpath:/web 这样就相当于由原来template文件夹,改为了web文件夹,如图: 2.使用webjar方式加载js和css文件 这个类似于maven仓库,他可以把我们web开发需要的的js和c...

Love_云宝儿的博客 661

新华DCS系统仿真测试方法详细介绍

新华DCS ICAN3.1系统是应用广泛并且功能非常强大的国产DCS系统。具有管理虚拟CPU并仿真运行的功能。并且上位机画面可以与虚拟DPU数据实时同步仿真。具体仿真方法如下所示: 1、 需要设备及软件: 2、步骤如下: 2.1硬件步骤: 1)电脑开机。 2)交换机连接电脑网卡。 3)交换机上电运行。 2.2软件步骤: 1)设置电脑IP 一般配置IP为A网工程站IP。 222.222.221.201/255.255.255.0 2)建立虚拟DPU 登录 D:\iCAN\Program\Vxcu 文件夹。

lw_waston的博客 6896

Protege新手必看:从安装到建模的完整指南(附推理功能详解)

本文为Protege新手提供从安装、配置到核心建模的完整实战指南。详细讲解了Java环境准备、本体项目创建、类与属性定义、个体填充等关键步骤,并重点解析了推理功能的配置与使用,帮助读者快速构建可逻辑推理的知识图谱,避开常见陷阱。

numpy6sculptor的博客 798

freemarker模板加载TemplateLoader常见方式

使用过freemarker的肯定其见过如下情况: java.io.FileNotFoundException:Templatexxx.ftlnotfound. 模板找不到。可能你会认为我明明指定了文件,并且文件存在,但是为什么就是说找不到呢? 经过研究官方的API,原来freemarker在加载模板时,建议使用TemplateLoader,通过TemplateLoader指定从哪个目录开始加载模板,并且把模板加载在缓存中。 API的TemplateLoader是一个接口,他有如下几个...

lisheng19870305的专栏 3433

VS2019 +osg3.6.5+ earth3.2+qt5.14.2+osgQt 编译教程

用vs新建工程,稍后会在写一篇博客上分享四、结语至此,所有的编译就均已完成。

king_ink的博客 1135

Spring Boot 的FreeMarker

在访问根路径时,HomeController 返回 index 视图文件,Spring Boot 在通过 FreeMarker 视图引擎将该视图渲染为 HTML 页面并返回给客户端。在 Spring Boot 应用中,使用 @Controller 注解创建一个控制器,并使用 @RequestMapping 注解来映射 URL。在这个视图文件中,我们使用 FreeMarker 的模板语法来渲染 HTML 页面。是 FreeMarker 的变量,通过后端控制器传递过来并渲染到页面上。,即可看到渲染后的页面。

canduecho的专栏 1835

innovus实战攻略 | 用setUsefulSkewMode解锁时序优化的“隐藏技能”!

就像时序优化的“瑞士军刀”,参数虽多,但掌握了分类逻辑后,用起来其实很简单!如果你有更绝的用法,欢迎在评论区分享,大家一起卷起来!简单来说,它就是时序优化的“乾坤大挪移”。通过调整触发器的时钟到达时间,把关键路径的建立时间“借”给非关键路径,从而实现全局时序收敛。别急,这个命令就是你的“时序救星”!(工具最多只能借1.2ns的裕量,防止“借过头”导致新问题!这个参数能帮你兜底!(对关键路径“下死手”,确保优化到位!(设置上限,给工具套上“紧箍咒”!(直接跳过边界,避免优化反噬!(全局管理,防止“借过头”!

weixin_50820814的博客 1360

使用Simulink进行基于IIR滤波器的设计与稳定性分析仿真

IIR滤波器的稳定性与其系统函数的极点位置密切相关。如果所有极点都位于Z平面的单位圆内,则该滤波器是稳定的;否则,滤波器将是不稳定的。在设计IIR滤波器时,确保其稳定性对于避免输出信号发散至关重要。明确你的系统需求,比如输入信号类型(如正弦波)、采样率、IIR滤波器的设计参数(如滤波器类型、阶数、截止频率等)。假设我们需要设计一个低通IIR滤波器,用来去除高于500Hz的所有频率成分,保留低于500Hz的信号成分。采样率为8kHz。

xiaoheshang_123的博客 151

FreeMarker模板开发 中StringTemplateLoader的用法

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

一起记录GIS学习 3536

62. 如何通过增强(Enhancement) 的方式给 SAP ABAP 标准程序增添新功能

本文通过一个实际的例子,介绍了如何不通过修改 SAP 标准 ABAP 程序源代码的方式,对其的功能进行增强,即采取 ABAP 增强开发的方式进行二次开发,这是一种在实际 SAP 项目实施过程中使用非常广泛的技术。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3313

freemarker模板引擎详解以及使用方法

freemarker模板引擎详解以及使用方法

真正的大师永远怀着一颗学徒的心 6483

VC中sqlite的使用

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

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

模板引擎Freemarker使用教程

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

2402_84949062的博客 5033

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

freemarker模板引擎

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

#helloworld的博客 1080

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

模板引擎:FreeMarker

FreeMarker 是一种功能强大的模板引擎,主要用于生成动态文本输出,如网页、电子邮件、配置文件等。它支持变量、表达式、循环、条件判断等编程结构,能够灵活处理数据并生成动态内容。FreeMarker 与 Java 集成良好,可轻松用于生成 HTML、XML 等文本格式,并支持与 Spring、Struts 等框架集成。其工作原理基于模板文件和数据模型,通过模板引擎解析并生成最终输出。使用步骤包括引入 FreeMarker 库、创建模板文件、准备数据模型、配置 FreeMarker 并生成输出。

weixin_62307424的博客 1206

freemarker 模板引擎详解

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

weixin_44213835的博客 1592

Freemarker模板引擎技术

问题】当渲染文章数据时,由于文章的数据很多,直接去查询文章内容表的话,效率比较低。解决】使用freemarker将文章的内容通过模板技术生成静态的html文件存储到minio中,这样用户就只需要拿着minio的url去minio里获取静态页面即可。效率大大提高。

qq_57882997的博客 1700

JavaEE进阶——FreeMarker模板引擎

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

等一杯咖啡的博客 2万+

FreeMarker模板引擎

课程介绍 了解模板引擎 掌握FreeMarker常用语法 在servlet中使用freeMarker 什么是模板引擎 数据 + 模板 = 结果 模板引擎将数据与展现有效的解耦 主流模板引擎 JSP FreeMarker Beetl : Beetl是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎, 而是新一代的模板引擎,它功能强大,性能良好,超过当前流行的模板引擎。而且还易学易用。 FreeMarker Freemarker 是免费开源的模板弓|擎技

qq_42537795的博客 736

Freemarker模板引擎

FreeMarker 是。根据前边的数据模型分析,课程预览就是把课程的相关信息进行整合,在课程预览界面进行展示,课程预览界面与课程发布的课程详情界面一致,保证了教学机构人员发布前看到什么样,发布后也会看到什么样。freemarker提供很多指令用于解析各种类型的数据模型,参考地址:http://freemarker.foofun.cn/ref_directives.html。所以模板引擎就是:模板+数据=输出,Jsp页面就是模板,页面中嵌入的jsp标签就是数据,两者相结合输出html网页。

Relievedz的博客 984

前端模板引擎 -- Freemarker

一、Freemarker介绍 FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写。 FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序。 虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据,简单来讲就是模板加数据模型,然后输出页...

来日可期的博客 5005

springboot中Thymeleaf和Freemarker模板引擎的区别

目录前言Thymeleaf和Freemarker的区别配置文件pom.xmlapplication.ymlThymeleafFreemarker后记 前言 这两个都是属于模板引擎,但是各有各的好处, enn,在市面上比较多的也就是jsp、freemarker、velocity、thymeleaf等页面方案。 Thymeleaf和Freemarker的区别 FreeMarker是一个用Java语言编...

旺旺的博客 1万+

【模板引擎】微服务学习笔记六:freemarker模板引擎的常用命令介绍

主要介绍Freemarker这款优秀模板引擎的使用及其相关语法

赵四司机的博客 1547
上一篇: Linux系统:第一章:简介
下一篇: 模板引擎:第二章:Thymeleaf
Java程序员廖志伟
Java程序员廖志伟 优质创作者: Java技术领域 优质创作者: Java技术领域 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄8年 2万+粉丝 1902原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java程序员廖志伟

赏我包辣条呗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值