Velocity模板引擎详解(看这篇就够了)

Velocity模板引擎详解(看这篇就够了)-mikechen

Velocity定义

Velocity是一个基于Java的Web页面模版引擎,够帮我们实现页面静态化,同时它将Java代码与网页分开,并为Java Server Pages(JSP)提供了可行的替代方案。

 

什么是模板引擎?

模板引擎这里特指:用于Web开发的模板引擎,是为了使用户界面与业务数据分离而产生的,它可以生成特定格式的文档,比如:网站标准的html等。

要理解模板引擎,还是从MVC模式,如下图所示:

Velocity模板引擎详解(看这篇就够了)-mikechen

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的语法格式一样,只不过多一个#标识符。

示例:

#if($condition > 5)

 

condition > 5

#elseif($condition == 5)

 

condition = 5

#else

 

condition < 5

#end

 

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面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法