目录

1、velocity简介

2、 快速入门

3、基础语法

3.1 VTL注释

3.2 非解析内容

3.3 引用

3.3.1 变量引用

3.3.2 属性引用

3.3.3 方法引用

3.4 指令

3.4 指令

3.4.1 流程控制

3.4.2 引入资源

3.4.3 宏指令


1、velocity简介

Velocity是一个基于Java的模板引擎,可以通过特定的语法获取在java对象的数据 , 填充到模板中,从而实现界面和java代码的分离 !

那 Velocity 有什么应用场景呢?

  • Web应用程序 : 作为为应用程序的视图, 展示数据。
  • 源代码生成  : Velocity可用于基于模板生成Java源代码。
  • 自动电子邮件 : 网站注册 , 认证等的电子邮件模板。
  • 网页静态化  : 基于velocity模板 , 生成静态网页。

组成结构:

模块

描述

app

主要封装了一些接口 , 暴露给使用者使用。主要有两个类,分别是Velocity(单例)和VelocityEngine。

Context

主要封装了模板渲染需要的变量

Runtime

整个Velocity的核心模块,Runtime模块会将加载的模板解析成语法树,Velocity调用mergeTemplate方法时会渲染整棵树,并输出最终的渲染结果。

RuntimeInstance

RuntimeInstance类为整个Velocity渲染提供了一个单例模式,拿到了这个实例就可以完成渲染过程了。

详细介绍大家可以看官网,传送门放这里了:The Apache Velocity Project

2、 快速入门

这里给大家简单演示如何使用Velocity定义html 模板,然后将动态数据填充到模板中,最后形成一个完整的html 页面。

首先我们创建一个项目,我就直接创建一个springBoot 项目了,大家可以根据自己的需求来。

创建好项目,我们引入velocity依赖。

<dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.2</version>
</dependency>

我们在resources 目录下创建模板文件。

模板文件内容

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>Title</title></head><body>hello , ${name} !</body>
</html>

模板创建好之后,我们到Test 类中,编写java 代码。

@Testvoid contextLoads() throws IOException {// 1、设置velocity资源加载器Properties prop = new Properties();prop.put("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");// 2、初始化velocity引擎Velocity.init(prop);// 3、创建Velocity容器VelocityContext context = new VelocityContext();context.put("name", "一切总会归于平淡");// 4、加载Velocity模板Template tpl = Velocity.getTemplate("vms/demo01.vm", "UTF-8");// 5、合并数据到模板FileWriter fw = new FileWriter("E:\\code\\Demo\\velocityDemo\\src\\main\\resources\\html\\demo01.html");tpl.merge(context, fw);// 6、释放资源fw.close();}

输出结果:

Velocity解决了如何在后台程序和网页之间传递数据的问题,后台代码和视图之间相互独立,一方的修改不影响另一方,他们之间是通过环境变量(Context)来实现的,网页制作一方和后台程序一方相互约定好对所传递变量的命名约定,比如上面程序例子中的 name变量,它们在网页上就是$name 。

只要双方约定好了变量名字,那么双方就可以独立工作了。无论页面如何变化,只要变量名不变,那么后台程序就无需改动,前台网页也可以任意由网页制作人员修改。这就是Velocity的工作原理。

3、基础语法

Velocity Template Language (VTL) , 是Velocity 中提供的一种模版语言 , 旨在提供最简单和最干净的方法来将动态内容合并到网页中。

简单来说VTL可以将程序中的动态数展示到网页中。

VTL的语句分为4大类:注释 , 非解析内容 , 引用和指令。

3.1 VTL注释

语法:

  1. 行注释: ## 行注释内容
  2. 块注释:#* 块注释内容1 块注释内容2 *#
  3. 文档注释:#** 文档注释内容1 文档注释内容2 *#

代码演示:

3.2 非解析内容

什么是非解析内容?

非解析内容就是不会被velocity 解析的内容,所写的内容都会原样输出出来。

那这到底有什么用呢?因为我们就算是直接在模板文件中书写内容,它也会原样直接显示出来呀。

大家直接往下看。

语法:#[[ 非解析内容1 非解析内容2 ]]#

代码演示 :

我们再把java代码运行一下。

3.3 引用

引用语句就是对引擎上下文对象中的属性进行操作。语法方面分为常规语法($属性)和正规语法(${属性})。

3.3.1 变量引用

语法

描述

$变量名

若上下文中没有对应的变量,则输出字符串"$变量名"

${变量名}

若上下文中没有对应的变量,则输出字符串"${变量名}"

$!变量名

若上下文中没有对应的变量,则输出空字符串""

$!{变量名}

若上下文中没有对应的变量,则输出空字符串""

代码演示:

我们运行java 代码看看执行效果:

3.3.2 属性引用

语法

描述

$变量名.属性

若上下文中没有对应的变量,则输出字符串"$变量名.属性"

${变量名.属性}

若上下文中没有对应的变量,则输出字符串"${变量名.属性}"

$!变量名.属性

若上下文中没有对应的变量,则输出字符串""

$!{变量名.属性}

若上下文中没有对应的变量,则输出字符串""

代码演示:

我们创建一个实体类。

我们修改一下测试类代码。

我们运行一下代码,看看执行效果。

3.3.3 方法引用

方法引用实际就是指方法调用操作,关注点返回值参数 , 方法的返回值将输出到最终结果中

语法

描述

$变量名.方法([入参1[, 入参2]*]?)

若上下文中没有对应的变量,则输出字符串"$变量名.方法([入参1[, 入参2]*]?"

${变量名.方法([入参1[, 入参2]*]?)}

若上下文中没有对应的变量,则输出字符串"${变量名.方法([入参1[, 入参2]*]?)}"

$!变量名.方法([入参1[, 入参2]*]?)

若上下文中没有对应的变量,则输出字符串""

$!{变量名.方法([入参1[, 入参2]*]?)}

若上下文中没有对应的变量,则输出字符串""

代码演示:

我们修改一下java代码。

然后修改 模板文件。

然后我们看看执行效果。

3.4 指令

方法引用实际就是指方法调用操作,关注点返回值参数 , 方法的返回值将输出到最终结果中

语法

描述

$变量名.方法([入参1[, 入参2]*]?)

若上下文中没有对应的变量,则输出字符串"$变量名.方法([入参1[, 入参2]*]?"

${变量名.方法([入参1[, 入参2]*]?)}

若上下文中没有对应的变量,则输出字符串"${变量名.方法([入参1[, 入参2]*]?)}"

$!变量名.方法([入参1[, 入参2]*]?)

若上下文中没有对应的变量,则输出字符串""

$!{变量名.方法([入参1[, 入参2]*]?)}

若上下文中没有对应的变量,则输出字符串""

代码演示:

我们修改一下java代码。

然后修改 模板文件。

然后我们看看执行效果。

3.4 指令

指令主要用于定义重用模块、引入外部资源、流程控制。指令以 # 作为起始字符。

3.4.1 流程控制

指令

语法

描述

#set

#set($变量 = 值)

在页面中声明定义变量

#if/#elseif/#else

下面演示

进行逻辑判断

#foreach

下面演示

遍历循环数组或者集合

1、#set

看看执行效果:

2、#if/#elseif/#else

我们看看执行效果。

3、#foreach

我们看看生成效果。

内置属性:

$foreach.index

获取遍历的索引 , 从0开始

$foreach.count

获取遍历的次数 , 从1开始

3.4.2 引入资源

指令

描述

#include

引入外部资源 , 引入的资源不会被引擎所解析

#parse

引入外部资源 , 引入的资源将被引擎所解析

#define

定义重用模块(不带参数)

evaluate

动态计算 , 动态计算可以让我们在字符串中使用变量

1、#include

我们新建一个模板文件。

然后我们在 demo01.vm 中引入。

我们来看看执行效果

我们可以看到 ${now }并未被解析,这是大家要注意的。

2、#parse

我们看看执行的效果。

我们可以看到解析了。

3、#define

效果:

4、#evaluate

效果:

3.4.3 宏指令

作用 : 定义重用模块(可带参数)

定义语法:

#macro(宏名 [$arg]?).....
#end

调用语法:

#宏名([$arg]?)

演示:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
#set($userList = [
{"name":"一切总会归于平淡","sex":"男","age":"22"}
])
<h1>定义宏</h1> #macro(table $list)
<table border="1px">
<tr>
<td>编号</td>
<td>用户名</td>
<td>密码</td>
<td>邮箱</td>
<td>年龄</td>
<td>操作</td>
</tr>
#foreach($item in $list)
<tr>
<td>${foreach.count}</td>
<td>${item.name}</td>
<td>${item.sex}</td>
<td>${item.age}</td>
</tr>
#end
</table>
#end
<h1>调用宏</h1>
#table($userList)
</body>
</html>

效果:

模板引擎Velocity 基础相关推荐

  1. java velocity是什么意思_基于 Java 的模板引擎Velocity快速入门

    最近使用Velocity模板引擎,写一个maven项目Coding生成工具. 对基于Java的模板引擎Velocity的demo总结如下: Step1. 创建Maven项目,添加如下velocity的 ...

  2. 模板引擎Freemarker基础知识

    Freemarker基础知识 Freemarker是什么 FreeMarker 基础指令 List指令 遍历Map数据 if指令 其它指令 运算符 空值处理 内建函数 入门Demo 要导入的依赖 配置 ...

  3. 【工具】模板引擎 Velocity

    Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象. 当Veloci ...

  4. OSCHina技术导向:Java模板引擎velocity

    OSChina 采用 velocity 作为页面模板 Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template langua ...

  5. 模板引擎 Velocity

    为什么80%的码农都做不了架构师?>>>    Velocity简介 Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语 ...

  6. JAVA模板引擎velocity语法讲解

    Velocity 是一个基于 Java 的模板引擎,它允许用户使用简单的模板语言来引用由 Java 代码定义的对象.当 Velocity 应用于 Web 开发时,界面设计人员可以和 Java 程序开发 ...

  7. 模板引擎Velocity和Freemarker的区别

    Thymeleaf 他是boot里面自带的.他类似Vue和Angluar的指令,并不是真正的静态模板引擎.所以对有前端团队的,不建议使用. Velocity 静态模板引擎.类似的jsp语法,能多级编译 ...

  8. php单独使用blade模板引擎,laravel 基础教程 —— Blade 模板引擎

    Blade 模板引擎 简介 Blade 是 laravel 提供的一个简单强大的模板引擎.它不像其他流行的 PHP 模板引擎那样限制你在视图中使用原生的 PHP 代码,事实上它就是把 Blade 视图 ...

  9. Twig模板引擎常用基础用法总结

    Twig是一种PHP模板引擎,最近,由于比较频繁的使用Twig模板,于是想总结一下一些常用的基本用法,希望能给对Twig还不熟悉的朋友带来帮助. 首先贴一下Twig官方文档链接:Twig模板语法官方文 ...

最新文章

  1. 多行文本框限制输入字符长度(两种方法)
  2. 本周学习进度表及时间安排(2018-1-7~2018-1-13)
  3. Android FileUtil(android文件工具类)
  4. Dubbo-go 服务代理模型
  5. GetCurrentTime(),GetLocalTime(),GetSystemTime()之间的区别
  6. HIVE学习之(三)
  7. PyTorch入门(一)数据集的一些基础操作
  8. 字典哈希表的实现原理_字典哈希表的实现原理
  9. 电机学(2) - 变压器
  10. 《善用佳软:高效能人士的软件应用之道》一第2章 办公软件:核心应用,实用技巧...
  11. Linux版的led显示屏控制软件,中航Led显示屏控制软件下载
  12. msfconsole 控制台使用和操作
  13. idea 设置字体大小
  14. PCL包围盒计算原理及代码
  15. C# 客户端PDF文件打印方法大全
  16. mysql common是什么_MySQL概述及入门(一)
  17. Python深度学习-第一章、什么是深度学习
  18. 下一个AI领域的高薪方向:强化学习与智能决策研究班2023年春季招生启事
  19. 【AE-MG动画全套学习教程】After Effects CC MG动画高效学习视频全套
  20. 给网站戴上「安全套」

热门文章

  1. xhr 设置bearer token Authorization
  2. office忘记保存怎么查看自动保存的文件
  3. QGraphicsScene里添加图形项后不显示的问题处理
  4. 邹恒甫答胡景北学兄: 张维迎是报邹恒甫不支持他当正院长的仇
  5. 使用Python实现音频双通道分离
  6. js es6(邢增)
  7. JavaScript 的 深浅 拷贝
  8. html5 阿狸照片展示,沫子晒5年前cos阿狸照片,又粉又嫩颜值高,而粉丝只关心36D...
  9. 那些感动过你我的句子
  10. MYSQL按月对收款金额进行统计