1.velicoty
是什么;Velocity是一个基于Java的模板引擎,其提供了一个Context容器,在java代码里面我们可以往容器中存值,然后在vm文件中使用特定的语法获取,这是velocity基本的用法,其与jsp、freemarker并称为三大视图展现技术
2.velicoty的入门案例
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.runtime.RuntimeConstants;
import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
public class Main {
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());
}
}
hellovelocity.vm代码
#set($greet = 'hello')
$greet $name
#foreach($i in $list)
$i
#end
控制台结果:
hello Velocity
1
2
过程:
在代码中初始化velocityEngine这个模板引擎,对参数进行初始化,指定classpathResourceLoader来加载vm文件,然后往velocityContext这个velicoty容器中存对象,在vm文件中取出变量,从而进行模板输出.
3.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引擎会将其原样输出,通过使用\$!{}的形式可以将不存在的变量变成空白输出. (不懂)
②循环
#foreach($item in $list)
$item
$velocityCount
#end
注释:,$item代表遍历的每一项,velocityCount是Velocity提供的用来记录当前循环次数的计数器,默认从1开始计数,可以在velocity.properties文件中修改其初始值
③条件控制:
#if(condition)
...dosonmething...
#elseif(condition)
...dosomething...
#else
...dosomething...
#end
4.函数
## 声明宏
#macro(sayHello $name)
hello $name
#end
## 使用宏
#sayHello("NICK")
5.parse和include指令
作用:引入外部vm文件
区别:include作为外部文件原样输出
parse指令会先对其解析(对外部文件的vm语法解析)
#parse("header.vm")
#include("footer.vm")
6.在web项目中使用velocity
(这个需要velocity-tools包) velocity只是一个模板引擎,在web项目中使用Velocity还得添加一个HTTP框架来处理请求和转发,apache提供了velocity-tools,其提供了VelocityViewServlet,也可继承VelocityViewServlet,从而实现自己的HTTP框架
一般都是继承VelocityViewServlet,重写handleRequest方法,在其中存入公共的参数.
通过继承或直接使用VelocityViewServlet,可以在管理的vm文件中获得request、session与application对象,也可以直接获取在这几个域对象中保存的值,获取的顺序与EL表达式获取的顺序类似:
${request} –> ${session} –> ${application}
比如${testArr},获取testArr属性,velocity会在velocity的context中寻找。没找到在request域中找,没找到在session中找.
7.