Velocity教程
来源:互联网 发布:mysql安装密码 编辑:程序博客网 时间:2024/06/01 09:37
Velocity是一个基于Java的模板引擎,通过特定的语法,Velocity可以获取在java语言中定义的对象,从而实现界面和java代码的真正分离,这意味着可以使用velocity替代jsp的开发模式了(实际上笔者所在的公司已经这么做了)。这使得前端开发人员可以和 Java 程序开发人员同步开发一个遵循 MVC 架构的 web 站点,在实际应用中,velocity还可以应用于很多其他的场景.
1. Velocity的介绍
Velocity是一个基于Java的模板引擎,其提供了一个Context容器,在java代码里面我们可以往容器中存值,然后在vm文件中使用特定的语法获取,这是velocity基本的用法,其与jsp、freemarker并称为三大视图展现技术,相对于jsp而言,velocity对前后端的分离更加彻底:在vm文件中不允许出现java代码,而jsp文件中却可以.
作为一个模块引擎,除了作为前后端分离的MVC展现层,Velocity还有一些其他用途,比如源代码生成、自动email和转换xml等.
2. Velocty的基本用法
在这里我们以一个HelloVelocity作为Velocity的入门实例.首先在官网下载velocity的最新发布包,新建普通java项目,引入其中的velocity-1.7.jar和lib文件夹下的所有jar包即可. 然后分为如下两步:
编写HelloVelocity.java文件如下:
public static void main(String[] args) { // 初始化模板引擎 VelocityEngine ve = new VelocityEngine(); ve.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath"); ve.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName()); ve.init(); // 获取模板文件 Template t = ve.getTemplate("hellovelocity.vm"); // 设置变量 VelocityContext ctx = new VelocityContext(); ctx.put("name", "Velocity"); List list = new ArrayList(); list.add("1"); list.add("2"); ctx.put("list", list); // 输出 StringWriter sw = new StringWriter(); t.merge(ctx,sw); System.out.println(sw.toString());}
首先,我们在代码中初始化了VelocityEngine这个模板引擎,对其设置参数进行初始化,指定使用ClasspathResourceLoader来加载vm文件。然后我们就可以往VelocityContext这个Velocity容器中存放对象了,在vm文件中我们可以取出这些变量,从而进行模板输出.
这三种是一个意思 设置模板加载路径,这里设置的是classpath下
Velocity 和 VelocityEngine 实现了 RuntimeConstants接口
2.2 编写hellovelocity.vm文件
其中,vm文件放在classpath目录下即可,类加载器会进行加载
hellovelocity.vm文件如下:
#set($greet = 'hello')$greet $name #foreach($i in $list)$i#end控制台输出如下:
hello Velocity12
3.1 变量
在Velocity中也有变量的概念,使用\$符声明变量,可以声明变量也可以对变量进行赋值(变量是弱类型的)。另外还可以使用\$取出在VelocityContext容器中存放的值
#set(${!name} = "velocity")#set(${!foo} = $bar)#set($foo =“hello”)#set($foo.name = $bar.name)#set($foo.name = $bar.getName($arg))#set($foo = 123)#set($foo = [“foo”,$bar])需要注意,上面代码中 \$!{}的写法,使用$vari获取变量时,如果变量不存在,Velocity引擎会将其原样输出,通过使用\$!{}的形式可以将不存在的变量变成空白输出.
3.2 循环
在Velocity中可以使用循环语法遍历集合,语法结构如下:
#foreach($item in $list) $item $velocityCount #end其中,\$item代表遍历的每一项,velocityCount是Velocity提供的用来记录当前循环次数的计数器,默认从1开始计数,可以在velocity.properties文件中修改其初始值
3.3 条件控制语法
在Velocity中可以使用条件语法对流程进行控制
#if(condition)...dosonmething...#elseif(condition)...dosomething...#else...dosomething...#end
3.4 宏
在Velocity中也有宏的概念,可以将其作为函数来理解,使用#macro
声明宏
## 声明宏#macro(sayHello $name) hello $name#end## 使用宏#sayHello("NICK")
3.5 parse和include指令
在Velocity中可以通过parse或者include指令引入外部vm文件,但是二者存在区别:include指令会将外部文件原样输出,而parse指令会先对其进行解析再输出(即对外部文件中的vm语法解析)
#parse("header.vm")#include("footer.vm")
- Velocity教程
- Velocity教程
- velocity教程
- Velocity教程
- Velocity教程
- Velocity教程
- Velocity教程
- Velocity教程
- Velocity教程
- Velocity教程
- Velocity教程
- velocity教程
- Velocity教程
- Velocity教程
- Velocity教程
- Velocity教程
- Velocity教程
- Velocity脚本教程
- Kubenetes 创建管理hadoop的docker容器的RC和service.yaml文件
- 脚本执行jar包(使用自带jre)
- JS中类型的检测
- View点击过快导致事件多此触发,全局解决
- 几个UDP网络库
- Velocity教程
- gradle 工程依赖 打包 配置文件
- 解决vim 打开的文件不能用鼠标复制到别的文件中
- Gulp.js
- TCP/IP协议(三)——UDP与TCP的区别
- 520,IT工程师们都是如何表白的?
- 分治——归并排序
- springMVC 后台跳转前台,但是Ajax不进入回调函数
- session.load()和session.get()的区别