Velocity定义
Velocity是一个基于Java的Web页面模版引擎,够帮我们实现页面静态化,同时它将Java代码与网页分开,并为Java Server Pages(JSP)提供了可行的替代方案。
什么是模板引擎?
模板引擎这里特指:用于Web开发的模板引擎,是为了使用户界面与业务数据分离而产生的,它可以生成特定格式的文档,比如:网站标准的html等。
要理解模板引擎,还是从MVC模式,如下图所示:
M(Model模型):包含后台的事务逻辑、真正处理事务的代码和商业逻辑等;
V(View视图):是网页显示部分,这部分接受来自后台程序结果或数据进行显示;
C(Controller控制器):在视图和模型之间传递控制,并依据要求调用对应的视图显示模型返回数据;
我们平时使用JSP页面,能够在JSP页面中写Java相关逻辑,这样在View中混淆了逻辑代码,造成前后端混淆在一起,彼此职责不分明。
所以以Velocity为代表的Java模板引擎出现,就可以将Java代码从网页中分离出来,使得页面设计者可以专注于版面的设计,而Java程序员可以集中精力编写复杂的代码, 从而实现前后端分离,提升工作效率。
Velocity语法使用
1.Velocity基本语法
1)“#”
使用“#”用来标识Velocity的脚本语句,比如:#set、#if 、#else、#end、#foreach、#end、#iinclude、#parse、#macro等。
2)$
Velocity变量使用$,比如:$name。
3)!
变量名称前加上!,比如:$!msg,如果msg有值,将显示msg的值,如果不存在就会显示为空白,一般会推荐使用。
2.声明变量
语法格式:
#set($var = XXX)
示例:
#set(${name} = “mikechen”)
“{}”用来明确标识Velocity变量。
“!”用来强制把不存在的变量显示为空白,这样可以优化改写为:
#set(${!name} = “mikechen”)
3.条件控制
语法格式:
#if(condition) ...dosonmething... #elseif(condition) ...dosomething... #else ...dosomething... #end
这个与Java的语法格式一样,只不过多一个#标识符。
示例:
condition > 5
condition = 5
condition < 5
4.循环
语法格式:
#foreach($item in $list) $item $velocityCount #end
示例:
#foreach($i in [1..5]) $i
#end
输出结果: 1 2 3 4 5
5.关系和逻操作符
Velocity 也具有逻辑AND, OR 和 NOT 操作符,分别对应 && 、|| 和 ! 。
如下:
#if($foo && $bar)This and that
#end
6.#parse 与 #include
#parse 与 #include 指令的功能都是在外部引用文件。
而两者的区别是:
- #parse 会将引用的内容当成类似于源码文件,会将内容在引入的地方进行解析;
- #include 是将引入文件当成资源文件,会将引入内容原封不动地以文本输出。
7.#macro声明宏
在Velocity中也有宏的概念,可以将其作为函数来理解。
语法格式:
#macro(宏的名称 $参数1 $参数2 …) 语句体(即函数体) #end
示例:
#macro(func $args1 $args2)
This is a macro. The argument have ${args1} and ${args2}.
#end#func(“hello” “world”)
输出结果:
This is a macro. The argument have hello and world.
Velocity应用场景
Velocity 主要使用场景如下:
- Web 应用:开发者在不使用 JSP 的情况下,可以用 Velocity 让 HTML 具有动态内容的特性;
- 源代码生成:Velocity 可以被用来生成 Java 代码、SQL 或者 PostScript;
- 自动 Email:很多软件的用户注册、密码提醒或者报表都是使用 Velocity 来自动生成的;
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》