脱离Servlet容器使用Velocity
package com.tom.velocity; import java.io.InputStream; import java.io.StringWriter; import java.util.Properties; import org.apache.velocity.Template; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.VelocityEngine; public class HelloVelocity { public static void main(String[] args) throws Exception { //实例化并初始化Velocity模板引擎 VelocityEngine ve = new VelocityEngine(); Properties p = new Properties(); InputStream in = HelloVelocity.class.getClassLoader().getResourceAsStream("velocity.properties"); p.load(in); ve.init(p); //从指定目录下加载自定的vm文件 Template t = ve.getTemplate("vm/hello.vm"); //创建Velocity上下文环境,用于在vm和Java传值 VelocityContext context = new VelocityContext(); context.put("name", "tom"); context.put("job", "code-farmer"); //将模板序列化为字符串文档,进行打印 StringWriter writer = new StringWriter(); t.merge(context, writer); //将模板引擎解析的结果打印输出 System.out.println(writer.toString()); //输出 /* <p>name: tom</p> <p>job: code-farmer</p> */ } }
velocity.properties文件
存放在classpath根目录下,内容:
resource.loader=class #Why ClasspathResourceLoader search the vm in the root directory of classpath #This means, <class.resource.loader.path> doesn't take effect class.resource.loader.class=org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader class.resource.loader.path=vm
hello.vm文件
存放在{classpath根目录}/vm目录下。
<p>name: $name</p> <p>job: $job</p>
Velocity解析过程
t.merge(context, writer);
这个方法用于将模板t使用context中的key/value进行解析,然后通过writer将解析结果返回来。
在解析的时候,Template根据vm文件中的指令,变量等,切分为多个Node,每个Node根据其类型采用不同的策略进行,如下是常见的Node类型对应的Java类
上图是Node类的实现,比如ASTSetDirective用于解析#set指定,ASTText是不包含模板标记的普通文本
上图右边是SimpleNode实现类列表
问题:
在velocity.properties文件中指定了从Classpath加载vm资源,同时指定加载的目录是classpath下的vm目录(通过class.resource.loader.path=vm指定),为什么在Java代码需要指定vm/hello.vm,不是hello.vm来加载资源(Template t = ve.getTemplate("vm/hello.vm");)
相关推荐
Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎
Velocity 是基于Java的模板引擎,广泛应用在阿里集 体各个子公司。Velocity模板适用于大量模板使用的场景,支持复杂的逻辑运算,包含 基本数据类型、变量赋值和函数等功能。Velocity.js 支持 Node.js 和浏览器环境。...
本课程从velocity engine也就是velocity引擎开始, 先讲解velocity的基本使用以及基础语法 , 然后再讲解velocity 的进阶内容velocity Tools , 以及velocity作为web项目的视图改如何使用 , 每一部分都会有一个综合案例...
velocity是一款除JSP以外的另一款模板引擎,也许很多地方比常规的JSP更加好,或者说它这种模板引擎是基于常规JSP与一些标签整合后。 zip包中有两个jar包,提供使用。
Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。 当Velocity应用于web开发时,界面设计人员可以和java程序开发人员...
velocity与freemaker、jstl并称为java web开发三大标签技术,一、定义变量二、遍历数组三、遍历HashTable四、判断是否为空五、数值、日期格式化六、国际化七、内建对象八、include、parse实现布局模块化
Java的模板引擎Velocity初体验.pdf
Velocity模板技术语法详细介绍,包括很详细的示例代码 1.变量………………………………………………………………………………1 2.循环………………………………………………………………………………2 3.条件语句...
Velocity是一个基于java的模板引擎(template engine)。
Velocity用户手册,主要讲解Velocity模板引擎的语法和使用
NULL 博文链接:https://kingmxj.iteye.com/blog/371850
Velocity模板引擎 v2.2.0.zip
Velocity模板解析,通过Velocity模板自动替换表达式中的变量
Velocity文档中文版
NULL 博文链接:https://vipshow.iteye.com/blog/1778614
Velocity语法详细介绍,主要介绍了velocity再构建模板时的一些居然语法。
java web 开发 velocity 包, Java模板引擎Velocity