velocity-engine-core是什么?Velocity模板引擎的使用
velocity-engine-core是什么?Velocity模板引擎的使用
- 1. 常见的模板引擎
- 2. Velocity 的语法
- 3.Velocity的使用
相信在日常开发中或多或少都听过或者使用过模板引擎,比如熟知的freemarker, thymeleaf等。而模板引擎就是为了实现View和Data分离而产生的。
而velocity-engine-core正是另一种模板引擎的引入依赖包,它就是Velocity。
1. 常见的模板引擎
-
thymeleaf
是一款用于渲染XML/XHTML/HTML5内容的模板引擎。它也可以 轻易的与Spring MVC等Web框架进行集成作为Web应用的模板引擎。也是springboot推荐的静态资源渲染的引擎。
-
freemarker
功能与Velocity差不多,但是语法更加强大,使用方便。是非常主流的模板引擎。
-
enjoy
Enjoy Template Engine 采用独创的 DKFF (Dynamic Key Feature Forward)词法分析算法以及独创的DLRD (Double Layer Recursive Descent)语法分析算法,极大减少了代码量,降低了学习成本,并提升了用户体验
-
velocity
不仅可以用于界面展示(HTML, XML等)还可以生成输入java代码,SQL语句等文本格式。我们公司就是使用Velocity来做代码的自动生成工具。
2. Velocity 的语法
关键字以 # 开头,变量以 $ 开头
2.1 定义变量
使用 #set 关键字
#set($name = "zhangsan")
#set(${h} = "hello $name") ##这里的name变量加不加 {} 都可以
#set($n = "${name}_new") ##这里的name变量就必须要加上{}了
#set($m = $n) ##重新赋值,如果有其他操作,需要向上面一样加上 ""#set($p = {}) ##定义对象,Java中的Map
#set($a = []) ##定义数组,Java中的List#set($v = $person.age) ##属性引用。 person是一个Java对象。
#set($v = $person.getName()) ##方法引用。
#set($v = $person.getName($type)) ##方法引用(带参数)。
2.2 变量的使用
以 $ 者 ${} 使用变量
#set($name = "zhangsan") ##定义变量
$name ##使用变量
${name} ##使用变量
${name}_abc ##必须加 {}
abc_$name ##可以不用加 {}
2.3 循环
使用 #foreach .... #end 使用循环
#set($list = ["北京", "上海", "深圳", "杭州"]) ##定义一个集合 #foreach($item in $list) 热门城市 ---> $item, 排名:[$foreach.count] #$foreach.index 是从0开始
#end
2.4 if判断
使用 #if(condition) ... #elseif(condition) ... #else ... #end 进行条件判断
#set($value = 1) ##定义一个变量#if($value == 0) value的结果是: $!value
#elseif($value == 1) value的结果是: $!value
#else value的结果大于1
#end//对象obj不为空才会执行里面的逻辑
#if($obj) ..... #end//对象obj为空才会执行里面的逻辑
#if(!$obj) ..... #end#等于字符串"abc" 才会执行里面的逻辑
if($obj == 'abc') ...... #end
2.5 关系操作符
可以使用 &&(与), ||(或), !(非) 来进行复杂的条件判断
#set($name = "")
#if(!$name) ##用于判空,如果是空,则为false, 取反后为true $!name 的年龄是: 13
#end #set($key = "velocity")
#set($flag = true)
#set($list = ["北京", "上海"])
#if($key && $key.contains("v") && $flag && $list.size() > 1) ## key 不为空并且包含v, flag 为true, list 元素数量大于1 条件成立......
#end
3.Velocity的使用
3.1 导入依赖
<dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.3</version>
</dependency>
3.2 定义模板
文件名以 .vm 结尾 (例如:hello.vm)
#if($c == 15)-----> hello: $!name
#end#foreach($item in $list)集合中的元素:${item} , 索引:【$foreach.index】
#end$person.name 的 生日是 $person.birthday,年龄是 $person.getAge()
3.3 定义引擎并解析模板
public class VelocityTest {public static void main(String[] args) throws IOException {//1.定义一个模板引擎VelocityEngine ve = new VelocityEngine();ve.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath");ve.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName());ve.init();//2.指定一个模板Template t = ve.getTemplate("hello.vm");VelocityContext ctx = new VelocityContext();//设置字符串ctx.put("c", 15);ctx.put("name", "velocity");//设置集合List<String> temp = new ArrayList<>();temp.add("北京");temp.add("杭州");temp.add("海南");ctx.put( "list", temp);//设置对象ctx.put("person", new Person("秋官", 30, LocalDate.now()));//合并到模板中, 可以是文件中//FileWriter fw = new FileWriter("demo.html");//t.merge(ctx, fw);//fw.close();StringWriter sw = new StringWriter();t.merge(ctx, sw);System.out.println(sw);}@AllArgsConstructor@Datapublic static class Person {private String name;private int age;private LocalDate birthday;}
}
除此以外,Velocity还提供了 Velocity-Tools工具包,他是Veloctiy下的一个子模块,参考gitee,Veloctiy-Tools主要包含2个部分:GenericTools和VelocityView ,前者提供了一些常用的工具类,比如DateTool, MathTool等等,后者主要是应用于web环境。
像我使用,使用velocity就是用来生成代码,所以导入 velocity-engine-core 就足够了,也没有导入springboot集成的velocity starter。
相关文章:
velocity-engine-core是什么?Velocity模板引擎的使用
velocity-engine-core是什么?Velocity模板引擎的使用 1. 常见的模板引擎2. Velocity 的语法3.Velocity的使用 相信在日常开发中或多或少都听过或者使用过模板引擎,比如熟知的freemarker, thymeleaf等。而模板引擎就是为了实现View和Data分离而产生的。 而…...
【华为od】存在一个m*n的二维数组,其成员取值范围为0,1。其中值为1的元素具备扩散性,每经过1S,将上下左右值为0的元素同化为1。
存在一个m*n的二维数组,其成员取值范围为0,1。其中值为1的元素具备扩散性,每经过1S,将上下左右值为0的元素同化为1。将数组所有成员初始化为0,将矩阵的[i, j]和[m,n]位置上元素修改成1后,在经过多长时间所有元素变为1。 输入描述 输入的前两个数字是矩阵大小。后面是数字…...
docker学习(七、搭建mysql8.2主从)
一、主库搭建 1.构建主库镜像 # 运行mysql镜像,配置端口3307为主库 docker run -p 3307:3306 --name mysql-master --privilegedtrue -v /mydata/mysql-master/log:/var/log/mysql -v /mydata/mysql-master/data:/var/lib/mysql -v /mydata/mysql-master/conf:/etc…...
消费升级:无人零售的崛起与优势
消费升级:无人零售的崛起与优势 随着人们生活水平的提高,消费内容正在从生存型消费转向以精神体验和享乐为主的发展型消费。社会居民的消费结构不断变迁,明显呈现消费升级趋势。个性化和多元化消费势头正在崛起,特别是无人零售的自…...
【开题报告】基于SpringBoot的煤炭企业安全宣传学习平台的设计与实现
1.选题背景 煤炭企业作为我国能源行业的重要组成部分,承担着国民经济的支撑和推动作用。然而,煤炭生产过程中存在较高的安全风险,煤矿事故频发,给人员生命财产安全带来严重威胁,也给社会稳定和经济发展带来不利影响。…...
机器连接和工业边缘计算
软件应用和IT创新是制造业投资的主要驱动力。解决方案架构应围绕特定标准进行整合,并采用架构蓝图和最佳实践来满足最终用户的需求。此外,边缘计算(Edge Computing)也将在制造业中加速部署。 边缘计算是制造业的下一个变革驱动力。…...
java系列-LinkedHashMap
1.插入新节点时,会将该节点加到链表尾部 public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>{/*** The head (eldest) of the doubly linked list.*/transient LinkedHashMapEntry<K,V> head;/*** The tail (young…...
【linux】查看CPU和内存信息
之前咱们一起学习了查看内存的和CPU的命令。 mpstat : 【linux】 mpstat 使用 uptime:【Linux】 uptime命令使用 CPU的使用率:【linux】查看CPU的使用率 nmon :【linux】nmon 工具使用 htop :【linux】htop 命令…...
【产品经理】产品专业化提升路径
产品专业化就是上山寻路,梳理一套作为产品经理的工作方法。本文作者从设计方法、三基座、专业强化、优秀产品拆解、零代码这五个方面,对产品经理的产品专业化进行了总结归纳,一起来看一下吧。 产品专业化就是上山寻路,梳理一套作为…...
Ubuntu(WSL)卸载与安装指定版本的 openssl
卸载 openssl 1)查找并删除 openssl 关联的目录与文件 whereis opensslwhich opensslrm -rf /a/b/c/ // 使用 rm 命令删除所有 openssl 相关目录 2)删除软件安装包 apt-get purge openssl 3)删除配置文件 rm -rf /etc/ssl 安装 ope…...
leetcode1115. 交替打印 FooBar
题目 1115. 交替打印 FooBar 给你一个类: class FooBar {public void foo() {for (int i 0; i < n; i) {print("foo");}}public void bar() {for (int i 0; i < n; i) {print("bar");}} }两个不同的线程将会共用一个 FooBar 实例&am…...
qt有哪些常用控件
Qt 是一个跨平台的应用程序开发框架,提供了许多不同类型的控件来构建用户界面。以下是一些常见的 Qt 控件: 按钮(Button):用于执行操作或触发事件。文本框(TextBox):用于输入和显示文…...
docker 手工redis7.x cluster
IP端口192.168.0.816379/6380192.168.0.826379/6380192.168.0.1146379/6380 mdkir /data/{6379,6380}cat <<END> /data/6379.conf # 端口号 port 6379# 设置客户端连接后进行任何其他指定前需要使用的密码 #requirepass 123456 ## 当master服务设置了密码保护时(用re…...
【华为OD题库-082】TLV解析II-Java
题目 两端通过TLVQ格式的报文来通信,现在收到对端的一个TLV格式的消息包,要求生成匹配后的(tag,length,valueOffset)列表。具体要求如下: (1)消息包中多组tag、length、value紧密排列,其中tag,length各占1字节(uint8),value所占字节数等于len…...
Memcached学习
一、概念 Memcached是一个开源的,高性能的内存缓存软件,从名称上看Mem就是内存,二cache是缓存。作用通过在事先规划好的内存空间中临时缓存数据库中的各类数据,以达到减少业务对数据库的直接高并发访问,从而达到提升数…...
2024最新金三银四软件测试面试题
一直以来大大小小参与过不少面试,遇到过不少坑,但是没来的及好好总结汇总下。现在把之前遇到的问题汇总下,希望以后自己能加深印象。 1、appium 怎么定位toast弹框 appium1.6以后回答需要升级u2进行定位。 2、什么是事务,知道事…...
微信小程序动态加载图表[echart]
1.引入Echarts (1)将ec-canvas文件拷贝下来放到你自己的项目中: (2)在你需要使用Echarts的页面的json文件中引入Echarts "usingComponents": {"ec-canvas": "../utils/ec-canvas/ec-canva…...
《opencv实用探索·十八》Camshift进行目标追踪流程
CamShift(Continuously Adaptive Mean Shift)是一种用于目标跟踪的方法,它是均值漂移(Mean Shift)的扩展,支持对目标的旋转跟踪,能够对目标的大小和形状进行自适应调整。 cv::CamShift和cv::me…...
MAP: Multimodal Uncertainty-Aware Vision-Language Pre-training Model
问题 多模态语义理解通常需要处理不确定性,这意味着获得的消息往往涉及多个目标。这种不确定性对我们的解释来说是有问题的,包括模式间和模式内的不确定性。人们很少研究这种不确定性的建模,特别是在未标记数据集的预训练和特定任务下游数据…...
【SpringCache】快速入门 通俗易懂
1. 介绍 Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。 Spring Cache 提供了一层抽象,底层可以切换不同的缓存实现,例如: EHCache Caffeine Redis(常用…...
WiFi密码安全测试:如何用hashcat的掩码模式快速爆破简单密码?
WiFi密码安全测试:hashcat掩码模式的高效爆破策略 在网络安全评估中,WiFi密码强度测试是基础但关键的一环。传统字典攻击虽然简单直接,但面对特定密码模式时效率低下。本文将深入探讨如何利用hashcat的掩码模式(Mask Attack&#…...
你的杜邦线和PCB走线,可能正在‘谋杀’J-Link SWD的高速信号
你的杜邦线和PCB走线,可能正在‘谋杀’J-Link SWD的高速信号 在嵌入式开发中,我们常常会遇到一个令人头疼的问题:昨天还能正常工作的调试接口,今天突然就无法识别芯片了。更令人困惑的是,降低SWD时钟速率后࿰…...
OpenClaw技能市场探秘:Gemma-3-12b-it生态的优质工具推荐
OpenClaw技能市场探秘:Gemma-3-12b-it生态的优质工具推荐 1. 为什么需要关注OpenClaw技能市场? 上周我在整理团队周报时,突然意识到一个问题:我们花在重复性操作上的时间太多了。从数据整理到图表生成,再到内容发布&…...
SEO_从零开始,手把手教你制定有效的SEO策略
SEO基础知识:什么是SEO? 在互联网时代,拥有一个高效的SEO策略是任何网站希望获得更多流量和更高知名度的关键。SEO,全称搜索引擎优化(Search Engine Optimization),是通过优化网站的内容和结构…...
3步攻克NCM加密壁垒:让音乐文件重获跨设备自由
3步攻克NCM加密壁垒:让音乐文件重获跨设备自由 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 当你从音乐平台下载的NCM格式文件无法在车载音响、MP3播放器等设备播放时,是否感到束手无策?ncmdump…...
华硕笔记本合盖不休眠终极指南:GHelper合盖模式完全教程
华硕笔记本合盖不休眠终极指南:GHelper合盖模式完全教程 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, …...
深入解析Xilinx PCIe IP核示例工程的仿真与调试技巧
1. Xilinx PCIe IP核示例工程快速入门 第一次接触Xilinx PCIe IP核时,我完全被复杂的文件结构和专业术语搞懵了。后来发现,只要掌握几个关键点,就能快速上手这个强大的高速串行通信接口。PCIe(Peripheral Component Interconnect …...
YOLO26功能体验:官方镜像预置多种权重,开箱即用体验最新模型
YOLO26功能体验:官方镜像预置多种权重,开箱即用体验最新模型 1. 引言:告别环境配置,直接上手YOLO26 如果你对计算机视觉感兴趣,想试试最新的目标检测模型,那么YOLO26绝对值得关注。作为YOLO系列的最新成员…...
PowerShell-Suite终极指南:10个高级Windows安全工具深度解析
PowerShell-Suite终极指南:10个高级Windows安全工具深度解析 【免费下载链接】PowerShell-Suite My musings with PowerShell 项目地址: https://gitcode.com/gh_mirrors/po/PowerShell-Suite PowerShell-Suite是一个功能强大的Windows安全工具集合ÿ…...
Phi-4-mini-reasoning轻量模型选型指南:何时该用Phi-4-mini而非Qwen3
Phi-4-mini-reasoning轻量模型选型指南:何时该用Phi-4-mini而非Qwen3 1. 模型概述与核心优势 Phi-4-mini-reasoning是一个基于合成数据构建的轻量级开源模型,专注于高质量、密集推理的数据处理能力。作为Phi-4模型家族成员,它特别适合需要高…...
