velocity引擎
# Velocity简介
Velocity是一个基于java的模板引擎(template engine),它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。它作为一款成熟的基于java的模板引擎,能够帮我们实现页面静态化,同时它将Java代码与网页分开,使网站在其生命周期内更加可维护,并为Java Server Pages(JSP)或PHP提供了可行的替代方案。
# 基本语法
#
Velocity关键字都是使用#开头的,如#set、#if、#else、#end、#foreach等
# $
Velocity变量都是使用开 头 的 , 如 : 开头的,如:开头的,如:name、$msg
# !
如果某个Velocity变量不存在,那么页面中就会显示$xxx的形式,为了避免这种形式,可以在变量名称前加上!如页面中含有$!msg,如果msg有值,将显示msg的值;如果不存在就会显示为空白(建议使用)
# 变量
变量的定义
<body>
#set($root = "www") //定义root变量值为www
#set($name = "index") //定义name变量值为index
#set($template = "$root/$name") //定义template变量值为www/index
hello $template
</body>
2
3
4
5
6
输出结果
hello www/index
# 变量的赋值
赋值的左边必须是一个变量,或者是属性的引用。右边可以是:变量引用、字面字符串、属性引用、方法引用、字面数字、数组
#set($name = $bill) ##变量引用
#set($name.pre = "monica") ##字符串
#set($name.last = $address.num) ##属性引用
#set($name.mid = $hotel.find($web)) ##方法引用
#set($name.num = 123) ##数字
#set($name.say = ["yes",$my,"yes"]) ##数组
2
3
4
5
6
velocity会将属性解释为属性的get方法,如:
$foo.Bar 等同于 $foo.getBar()
$foo.User("join") 等同于 $foo.getUser("join")
$foo.Request.ServerName 等同于 $foo.getRequest().getServerName()
2
3
# 循环
#foreach( 单个元素名称 in 集合)
....
#end
2
3
$velocityCount
在foreach中velocityCount表示循环的次数
$velocityCount是循环的索引值
$velocityCount都是从1开始计数
示例:
#foreach($ofl in $!obj.ofls)
#if($velocityCount==1)
<h1><span class="fl">创建时间:<em>$!ofl.addTime</em></span></h1>
#end
2
3
4
注意:加1的情况可以正确计算出结果,并且能够正确显示,可是减1的语句直接作为一个字符串输出了,不能计算出结果。
解决方案:
v#set($temp=$velocityCount)
$temp-1
2
示例
#foreach( $num in [2..-2])
this is $num.</br>
#end
2
3
输出
this is 2.
this is 1.
this is 0.
this is -1.
this is -2
2
3
4
5
# 条件
#if(condition)
......
#elseif(condition)
......
#else
......
#end
2
3
4
5
6
7
判断null或者false
#if( !$name)
something code
#end
2
3
判断null或者空字符串
#if( "$!name" == "")
something code
#end
2
3
关系和逻辑操作符
&& 并且 || 或者 ! 取反
# 注释
单行注释##
##这里写注释
多行注释#* *#
#*
这个写注释 可以写多行的注释
*#
2
3
# 基本的使用步驟
初始化Velocity。Velocity可以使用两种模式,作为“单独的运行时实例”的单例模式(在下面的内容会介绍),你仅仅只需要初始化一次。 创建一个Context对象(后面会介绍这是什么)。 把你的数据对象添加到Context(上下文)。 选择一个模板。 ‘合并’ (merge)模板和你的数据输出。 结合springboot测试
<!--在高版本的springboot中是不支持velocity了。最高只到1.4.x版本支持-->
<!-- 引入velocity模板 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-velocity</artifactId>
</dependency>
<!--<dependency>-->
<!--<groupId>org.apache.velocity</groupId>-->
<!--<artifactId>velocity</artifactId>-->
<!--<version>1.7</version>-->
<!--</dependency>-->
<!--<dependency>-->
<!--<groupId>org.apache.velocity</groupId>-->
<!--<artifactId>velocity-tools</artifactId>-->
<!--<version>2.0</version>-->
<!--</dependency>-->
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
yml配置文件
spring.velocity.cache= false
spring.velocity.charset=UTF-8
spring.velocity.check-template-location=true
spring.velocity.content-type=text/html
spring.velocity.enabled=true
spring.velocity.resource-loader-path=/templates
spring.velocity.prefix=/templates/
spring.velocity.suffix=.vm
2
3
4
5
6
7
8
Controller层
@Controller
public class VelocityContoller {
@RequestMapping("/")
public String index(Map map){
User user = new User();
user.setAge(23);
user.setDate(new Date());
user.setId("1");
user.setName("张三");
map.put("message", "获取用户信息");
map.put("name", "张三");
//map.put("age", "24");
map.put("user",user);
return "index";
}
}
index.vm
<!DOCTYPE html>
<head lang="en">
<meta charset="UTF-8" />
<title>Insert title here</title>
</head>
<html>
<body>
$message
$name
$!age
<br>
$user.age
$user.getId()
$user.name
$user.date
<br>
#if($user.getId()==2)
id為:$user.getId()
#else
id為:null
#end
<br>
#set($ljk="luojiankang")
$ljk
</body>
</html>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
输出页面上
总结 Velocity将Java代码从Web 页面中分离出来,使用Web站点从长远看更容易维护,并且提供了一种可行的JavaServer Pages替代解决方案。
Velocity是一种基于Java的模板引擎,但允许任何人使用简单而强大的模板语言来引用定义在Java代码中的对象。
Velocity就是MVC架构的一种实现,但它更多的是关注在Model和View之间,作为它们的桥梁。
参考文章:
Velocity的简单使用_罗罗的1024-CSDN博客_velocity (opens new window)
参考视频:
黑马程序员Java进阶VelocityTools全套教程,哔哩哔哩_bilibili (opens new window)