FreeMaker教程(一)-----FreeMaker简介

Java安全之freemaker模版注入 FreeMarker 是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。在线手册:什么是 FreeMarker?- FreeMarker 中文官方参考手册模板文件存放在Web服务器上,当访问指定模版文件时, FreeMarker会动态转换模板,用最新的数据内容替换模板中${...}的部分,然后返回渲染结果。${...}: FreeMarker将会输出真实的值来替换大括号内的表达式,这样的表达式被称为(插值) 阅读详情

1.什么是 FreeMarker?


FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写。FreeMarker被设计用来生成HTMLWeb页面,特别是基于MVC模式的应用程序。


     所谓模板,就是一份已经写好了基本内容,有着固定格式的文档,其中空出或者用占位符标识的内容,由使用者来填充,不同的使用者给出的数据是不同的。在模板中的占位符,在模板运行时,由模板引擎来解析模板,并采用动态数据替换占位符部分的内容。


       FreeMarker不是一个Web应用框架,而适合作为Web应用框架一个组件,FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java文件等。


     虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据(如下图)





2.FreeMake的优点


分离表现层和业务逻辑

       使用JSP开发过程中在页面中大量的存在业务逻辑的代码,使得页面内容凌乱,在后期大量的修改维护过程中就变得非常困难。FreeMarker根本不支持Java脚本代码,而是使用el表达式来输出展示数据。FreeMarker的设计初衷就是:模板+数据模型=输出,模板只负责数据在页面中的表现,不涉及任何的逻辑代码,而所有的逻辑都是由数据模型来处理的。用户最终看到的输出是模板和数据模型合并后创建的。

 

 

提高开发效率

         在我们以往的开发中,使用的都是JSP页面来展示数据的,即所谓的表现层。我们都知道,JSP在第一次执行的时候需要转换成Servlet类,开发阶段进行功能调适时,需要频繁的修改JSP,每次修改都要编译和转换,那么试想一天中我们浪费在程序编译的时间有多少。相对于JSP来说,FreeMarker模板技术不存在编译和转换的问题,所以就不会存在上述问题。而且开发过程中,我们在不必在等待界面设计开发人员完成页面原形后,我们再来开发程序。

 

 

分工明确

        以往用JSP展现数据时,程序员并不熟悉界面设计技术,反之界面开发人员,也并不熟悉程序语言。协调工作很困难,使用FreeMarker后,作为界面开发人员,只专心创建HTML文件、图像以及Web页面的其他可视化方面,不用理会数据;而程序开发人员则专注于系统实现,负责为页面准备要显示的数据。


3.FreeMarker的缺点


1.FreeMarker的缺点一,应用FreeMarker模板技术,在修改模板后,可能会看到已经过期的数据。如:生成静态的HTML页面后,如果一旦模板改变,而没有及时更新模板生成的HTML页面的话,用户看到的就是过期的数据。

2.FreeMarker的缺点二,FreeMarker模板技术在应用过程中,FreeMarker中的变量必须要赋值,如果不赋值,那么就会抛出异常。想避免错误就要应用if/elseif/else 指令进行判段,如果对每一个变量都判断的话,那么则反而增加了编程的麻烦。

3.FreeMarker的缺点三,FreeMarker的map限定key必须是string,其他数据类型无法操作。

4.FreeMarker的缺点四,FreeMarker不支持集群应用。为了编成的方便性,把序列化的东西都放到了Session中,如Session,request等,在开发的过程中确实方便,但如果将应用放到集群中,就会出现错误。


4.FreeMarker特性


1、通用目标


能够生成各种文本:HTML、XML、RTF、Java源代码等等
易于嵌入到你的产品中:轻量级;不需要Servlet环境
插件式模板载入器:可以从任何源载入模板,如本地文件、数据库等等
你可以按你所需生成文本:保存到本地文件;作为Email发送;从Web应用程序发送它返回给Web浏览器


2、强大的模板语言


所有常用的指令:include、if/elseif/else、循环结构
在模板中创建和改变变量
几乎在任何地方都可以使用复杂表达式来指定值
命名的宏,可以具有位置参数和嵌套内容
名字空间有助于建立和维护可重用的宏库,或者将一个大工程分成模块,而不必担心名字冲突
输出转换块:在嵌套模板片段生成输出时,转换HTML转义、压缩、语法高亮等等;你可以定义自己的转换


3、通用数据模型


FreeMarker不是直接反射到Java对象,Java对象通过插件式对象封装,以变量方式在模板中显示
你可以使用抽象(接口)方式表示对象(JavaBean、XML文档、SQL查询结果集等等),告诉模板开发者使用方法,使其不受技术细节的打扰


4、为Web准备


在模板语言中内建处理典型Web相关任务(如HTML转义)的结构
能够集成到Model2 Web应用框架中作为JSP的替代
支持JSP标记库
为MVC模式设计:分离可视化设计和应用程序逻辑;分离页面设计员和程序员


5、智能的国际化和本地化


字符集智能化(内部使用UNICODE)
数字格式本地化敏感
日期和时间格式本地化敏感
非US字符集可以用作标识(如变量名)
多种不同语言的相同模板


6、强大的XML处理能力


<#recurse> 和<#visit>指令(2.3版本)用于递归遍历XML树
在模板中清楚和直觉的访问XML对象模型
开源论坛 JForum 就是使用了 FreeMarker 做为页面模板。



5.Freemarker生成静态页面的原理


    Freemarker 生成静态页面,首先需要使用自己定义的模板页面,这个模板页面可以是最最普通的html,也可以是嵌套freemarker中的 取值表达式, 标签或者自定义标签等等,然后后台读取这个模板页面,解析其中的标签完成相对应的操作, 然后采用键值对的方式传递参数替换模板中的的取值表达式,做完之后 根据配置的路径生成一个新的html页面, 以达到静态化访问的目的。


6.Freemarker提供的标签


Freemarker提供了很多有用 常用的标签,Freemarker标签都是<#标签名称>这样子命名的,${value} 表示输出变量名的内容 ,具体如下:


1、list:该标签主要是进行迭代服务器端传递过来的List集合,比如:


<#list nameList as names>    
  ${names}   
</#list>

names是list循环的时候取的一个循环变量,freemarker在解析list标签的时候,等价于:


for (String names : nameList) {  
    System.out.println(names);  
} 



2、if:该标签主要是做if判断用的,比如:


<#if (names=="陈靖仇")>  
 他的武器是: 十五~~  
</#if> 

这个是条件判断标签,要注意的是条件等式必须用括号括起来, 等价于:


if(names.equals("陈靖仇")){  
    System.out.println("他的武器是: 十五~~");  
}  


3、include:该标签用于导入文件用的。


<#include "include.html"/> 

这个导入标签非常好用,特别是页面的重用。


另外在静态文件中可以使用${} 获取值,取值方式和el表达式一样,非常方便。



推荐阅读:


FreeMarker 中文官方参考手册

使用FreeMarker替换JSP的10个理由

专业视频格式转换工具Freemake的核心技术与应用 视频编解码技术是数字媒体处理的基础,通过不同编码算法实现视频数据的高效压缩与传输。专业级转换工具运用硬件加速和智能码率分配等原理,在保持画质的前提下显著提升转码效率。这类工具的技术价值体现在支持HDR元数据保留、批量处理等工业级需求,广泛应用于短视频制作、影视后期等领域。以Freemake Video Converter为例,其支持500+格式转换与CUDA加速,特别适合处理4K/8K素材和移动端适配场景,解决音画同步、色彩空间转换等常见工程问题。 阅读详情

相关推荐

LPDDR4协议规范之 (四)命令和时序

LPDDR4协议规范之 (四)命令和时序命令真值表激活操作读写访问操作读前沿和后沿突发读取操作流程读操作时序写前沿和后沿突发写操作写入均衡(待更新) 命令真值表 激活操作 ACTIVATE命令由两个连续命令组成,Activate-1命令和Activate-2。通过在(Activate-1)时钟的第一个上升沿保持CS HIGH,CA0 HIGH和CA1 LOW来发出Activate-1命令,通过...

YJFeiii的博客 2万+

FreeMarker详细介绍

FreeMarker概述 FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电 子邮件,配置文件,源代码等)的通用工具。 是一个Java类库。 FreeMarker 被设计用来生成 HTML Web 页面,特别是基于 MVC 模式的应用程序,将视图从业务逻辑中 抽离处理,业务中不再包括视图的展示,而是将视图交给 FreeMarker 来输出。虽然 FreeMarker 具有一 些编程的能力,但通常由 Java 程序准备要显示的数据,由 FreeMar

weixin_44454512的博客 7万+

CCD 技术介绍(基于innovus引擎CCOpt)

CCD:全称是,并行优化clock和data path。CCOpt:全称是Clock的timing分为两种模式,和。preCTS并没有clock,因此需要建立一个,从clock端口到寄存器CK端的来自sdc中的设置;postCTSupdateIO latency,clock就会自动的转换成propagatedclock,这时就是实际时钟互连线网络的delay。在实际设计中,clock起始于ideal。

m0_61003348的博客 8973

freemaker介绍及常见用法

总结一下freemaker的相关知识 freemaker(FTL)是一个模板引擎,即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。 在javaweb中,经常会使用freemaker模板来生成网页,它的基本工作机制如下:

u013625182的博客 1万+

架构——异地多活成熟的架构模式

摘要: 本文系统介绍了三种异地多活架构模式:业务定制型、业务通用型和存储通用型。业务定制型针对核心业务定制化设计,复杂度低但扩展性差;业务通用型通过统一配套服务(流量调度、配置中心等)实现多业务兼容,适合业务量大但一致性要求不高的场景;存储通用型依托分布式一致性数据库(如OceanBase、TiDB)天然支持强一致性,适合金融等高要求场景,但对部署距离和成本有较高限制。文章对比了各模式的优缺点及适用场景,为不同业务需求下的架构选型提供了实践指导。

小志的博客 7083

从硬件拆解到图像生成:一次搞懂MRI设备(主磁体、梯度线圈、射频系统)是如何协同工作的

本文深入解析MRI设备的三大核心系统——主磁体、梯度线圈和射频系统如何协同工作,实现从量子现象到诊断图像的转化。通过详细的技术参数和临床案例,揭示磁共振成像(MRI)在医疗图像处理中的精密工程原理和最新技术突破,帮助读者全面理解这一现代医学影像技术的运作机制。

weixin_33734785的博客 544

Freemarker指令语法

1、注释,即,介于其之间的内容会被freemarker忽略2、插值(Interpolation):即..部分,freemarker会用真实的值代替{…}3、FTL指令:和HTML标记类似,名字前加#予以区分,Freemarker会解析标签中的表达式或逻辑。4、文本,仅文本信息,这些不是freemarker的注释、插值、FTL指令的内容会被freemarker忽略解析,直接输出内容。

daai5201314的博客 2224

generate for与always内for:Verilog循环的静态生成与动态执行之辨

本文深入解析Verilog中generate for与always内部for循环的核心差异。generate for使用genvar变量在编译时静态生成硬件结构,适用于模块实例化;always内部for使用整型变量在运行时动态执行,综合为并行逻辑。理解这两种循环的适用场景和综合结果对提升数字电路设计质量至关重要。

yog99的博客 1085

Freemaker入门

超级简单的freemaker实战

2501_90975132的博客 849

部署与可视化系统:零基础到精通:LabVIEW 调用 YOLO 动态链接库(DLL)的保姆级视觉检测系统融合实战

LabVIEW与YOLO26深度集成:工业视觉检测新范式 本文揭示了LabVIEW与最新YOLO26模型深度集成的创新方案,通过C++封装ONNX Runtime为DLL,在LabVIEW中实现端到端视觉检测。核心突破点包括: 技术选型:对比YOLOv5/YOLOv8/YOLO26性能,YOLO26在CPU推理速度提升43%,支持NMS-Free端到端推理 部署架构:提供ONNX Runtime C++ API和TensorRT两种DLL封装路径,适配不同硬件环境 工程实现:详细展示从PyTorch模型导出

ZXSXJ的博客 282

Yolov8-pose关键点检测:通用倒瓶颈(UIB)搜索块结合C2f二次创新 | 轻量化之王MobileNetV4

通用倒瓶颈(UIB)搜索块结合C2f二次创新

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 613

FreeMaker一篇通

FreeMaker一篇通前言Freemaker是一个强大的模板引擎,相比velocity而言,其强大的过程调用、递归和闭包回调功能让freemaker可以完成几乎所有我们所想的功能。从个人看法而言,freemaker完全有能力作为MDA的代码辅助生成工具。本文试图越过传统的概念性介绍,通过一组例子直接把读者带入到Freemaker应用的较高层阶。正文大家看文章标题就应该知道,我想用一篇

冰糖糊涂的专栏 3793

概率质量函数(PMF)、概率密度函数(PDF)、累积分布函数(CDF)

1.概率分布函数(Probability Distribution Functions) 笔记来源:Probability Distribution Functions (PMF, PDF, CDF) 1.1 离散型:PMF和CDF 1.2 连续型:PDF和CDF 累积分布函数的导数 === 概率密度函数的函数值 dF(x)dx=f(x) \frac{dF(x)}{dx}=f(x) dxdF(x)​=f(x) 概率密度函数与 xxx 轴围成的面积 === 累积分布函数的函数值 ∫−∞xf(x)d

一个搬运知识的笨小孩 3万+

freemaker使用教程及jar

freemaker使用教程及jar

liaomin789的博客 144

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

FreeMaker简介

OECP社区有很多Freemaker的技巧及用法,貌似没有对Freemaker做出详细介绍的文章,所以今天为大家上传一篇介绍Freemaker的文章。 Freemaker是一个强大的模板引擎,相比velocity而言,其强大的过程调用、递归、闭包回调,功能让freemaker可以完成几乎所有我们所想的功能。从个人看法而言,freemaker完全有能力作为MDA(模型驱动架构...

weixin_34163741的博客 219

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

freemaker模板项目的总结

技术框架: 大体三部分: vue的后台管理, java的后端,freemaker的模板渲染文件技术: 服务端渲染, mysql数据库存储,ng转发,处理seo项目内容: 公司官网, 后台管理能编辑页面数据, 发布新页面/新文章,管理模版文件,新页面都基于模版文件创建。模板文件中需要用元数据时,新建模板文件,在后台配置模板中使用的数据key,与元数据对应,在模板中获取就可以使用。市场同学就可以编辑元数据用于管理。

是还不成熟的开发人员啊 513

FreeMaker开发教程

FreeMaker简介 FreeMaker其实是一种比较简单的网页展示技术,说白了就是网页模板和数据模型的结合体。这种结合模式的好处就是,分离了网页界面设计人员和编程人员的工作,让他们各司其职。 据个人理解,FreeMaker大致的工作方式是,网页模板里面嵌入了数据模型中的数据、FreeMake自定义流程控制语言、FreeMake自定义的操作函数等等,在装载网页的时候,FreeMaker模...

weixin_34414196的博客 175

freemaker 使用方法

首先注释 使用传统的不好使  需要使用才可以 FreeMarker的插值有如下两种类型:1,通用插值${expr};2,数字格式化插值:#{expr}或#{expr;format}  ${book.name?if_exists } //用于判断如果存在,就输出这个值  ${book.name?default(‘xxx’)}//默认值xxx  ${book.name!"xxx"}//默认

isunlight001的专栏 827

浅谈freemaker(一)

FreeMaker简介FreeMaker其实是一种比较简单的网页展示技术,说白了就是网页模板和数据模型的结合体。这种结合模式的好处就是,分离了网页界面设计人员和编程人员的工作,让他们各司其职。 据个人理解,FreeMaker大致的工作方式是,网页模板里面嵌入了数据模型中的数据、FreeMake自定义流程控制语言、FreeMake自定义的操作函数等等,在装载网页的时候,FreeMaker模板自动从...

weixin_30699235的博客 117

到底是freemarker还是freemaker?

一直看了freemaker三天了,今天才突然发现,原来应该是freemarker。 但是我在Google中输入freemaker却也找到了freemarker的主页,并且网上也还有不少freemaker的相关的文章。到底究竟是什么啊?还是两者都可以呢?...

killazy的专栏 292

java web freemaker_freemaker

FreeMarker模板文件主要由如下4个部分组成:1,文本:直接输出的部分2,注释:格式部分,不会输出3,插值:即${...}或#{...}格式的部分,将使用数据模型中的部分替代输出4,FTL指令:FreeMarker指定,和HTML标记类似,名字前加#予以区分,不会输出下面是一个FreeMarker模板的例子,包含了以上所说的4个部分Welcome!Welcome ${user} !We ha...

weixin_36082346的博客 237

freemaker基础

导读:   FreeMaker简介   FreeMaker其实是一种比较简单的网页展示技术,说白了就是网页模板和数据模型的结合体。这种结合模式的好处就是,分离了网页界面设计人员和编程人员的工作,让他们各司其职。   据个人理解,FreeMaker大致的工作方式是,网页模板里面嵌入了数据模型中的数据、FreeMake自定义流程控制语言、FreeMake自定义的操作函数等等,在装载网页的时候,

赵晓雷的专栏 2362

FreeMaker学习笔记一

在FreeMarker模板中可以包括下面三种特定部分: Ø         ${…}:称为interpolations,FreeMarker会在输出时用实际值进行替代Ø         FTL标记:类似于HTML标记,为了与HTML标记区分,用开始Ø         注释:包含在(而不是)之间例如:     ……     ……预定义指令:引用方式为用户定义指令:引用方式为,引用用户定义指令

我的JAVA学习 804

Freemaker——模板语言

展示 数据由java代码代供 只负责渲染页面 Freemaker 数据类型 1.布尔类型 在freemaker布尔类型不能直接输出,如果输出要先转为字符串 <#--方式一:?c--> <#--方式二:?String或String(“true时的文本”,“false时的文本”--> 2.数据类型——日期类型 ${myDate? date} ${myDare? time} ${myDate? datetime} ${myDate?String("yyyy-mm-dd

WRLKYLJ的博客 908

FreeMaker

FreeMaker一篇通前言Freemaker是一个强大的模板引擎,相比velocity而言,其强大的过程调用、递归和闭包回调功能让freemaker可以完成几乎所有我们所想的功能。从个人看法而言,freemaker完全有能力作为MDA的代码辅助生成工具。本文试图越过传统的概念性介绍,通过一组例子直接把读者带入到Freemaker应用的较高层阶。正文大家看文章标题就应该知道,我想用一篇

xymyeah 3409
上一篇: Dubbo教程(三)----一个简单的Dubbo示例
下一篇: Jenkins系列(三)----Maven项目配置详解
码农致富
码农致富 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄13年 3761粉丝 488原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值