脱离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模板引擎,由Apache软件基金会开发并维护,它是Apache Jakarta项目的一部分。 Velocity的主要设计目标是将表现层逻辑从应用逻辑中分离出来,使开发者可以专注于业务逻辑的实现,而无需关心...
Velocity 是基于Java的模板引擎,广泛应用在阿里集 体各个子公司。Velocity模板适用于大量模板使用的场景,支持复杂的逻辑运算,包含 基本数据类型、变量赋值和函数等功能。Velocity.js 支持 Node.js 和浏览器环境。...
**Velocity——Java的模板引擎** Velocity是Apache软件基金会下的一个开源项目,它是一个基于Java的模板引擎,专门用于生成动态Web内容。Velocity的目标是将HTML、XML等模板语言与业务逻辑分离,使得开发者可以专注...
"Velocity模板引擎技术在Java Web中的应用" Velocity模板引擎技术是Java Web开发中的一种重要技术,旨在解决Java Web页面视图和业务逻辑的耦合问题。通过使用Velocity模板引擎技术,可以将Java Web页面视图和业务...
在Spring Boot项目中,利用Velocity模板引擎,我们可以创建一系列模板文件,如Mapper、Mapper.xml、Service和Controller等,这些模板在运行时会根据数据库中的表结构动态生成对应的Java源码。这不仅避免了手动编写...
Velocity模板引擎为Java Web开发提供了强大且灵活的功能支持。通过上述知识点的学习,我们可以了解到Velocity的基本用法,包括变量定义、循环、条件判断、格式化、国际化支持等方面的内容。这些知识点是使用Velocity...
在IT行业中,Velocity是一个强大的模板引擎,常用于生成动态内容,比如HTML页面、电子邮件模板定制等。本篇文章将深入探讨如何使用Velocity实现邮件模板的定制,以及与之相关的源码和工具。 首先,Velocity的基本...
本课程从velocity engine也就是velocity引擎开始, 先讲解velocity的基本使用以及基础语法 , 然后再讲解velocity 的进阶内容velocity Tools , 以及velocity作为web项目的视图改如何使用 , 每一部分都会有一个综合案例...
在实现具体的页面动态内容时,Velocity模板引擎会扫描整个页面,寻找所有的“#”字符,然后判断这些标记后面的部分是否是VTL语句。如果是,它就会执行相应的模板指令来生成最终的页面。Velocity模板引擎的这种工作...
Velocity 模板引擎初体验 Velocity 是一种 Java 模板引擎技术,由 Apache 提出,是一种基于 Java 的模板引擎,允许任何人使用简单而强大的模板语言来引用定义在 Java 代码中的对象。Velocity 的主要功能是桥梁 ...
Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。 当Velocity应用于web开发时,界面设计人员可以和java程序开发人员...
Velocity模板技术语法详细介绍,包括很详细的示例代码 1.变量………………………………………………………………………………1 2.循环………………………………………………………………………………2 3.条件语句...
#### 五、Velocity模板语言(VTL)详解 - **基本语法**:VTL语法简单直观,易于学习。它允许在HTML代码中嵌入VTL语句,如`#set()`用于设置变量。 - **变量赋值**:通过`#set()`指令可以为变量赋值。例如,`#set($a=...
Velocity 是一个基于 Java 的模板引擎(template engine),它允许任何人仅仅简单的使用模板语言(template language)来引用由 Java 代码定义的对象。 Velocity 的能力远不止 web 站点开发这个领域,例如,它可以从...
3. **Velocity模板引擎配置** - 可以通过VelocityConfigurer类配置Velocity引擎,比如设置模板路径、编码格式、缓存策略等。 - `Velocity.init()`初始化引擎,`Velocity.evaluate()`或`Velocity.mergeTemplate()`...
Velocity模板语言(Velocity Template Language,简称VTL)是Apache软件基金会的Velocity项目中的一部分,它是一种用于生成动态网页内容的模板引擎。Velocity以其简洁、易读的语法,为Java开发者提供了一种高效的...
Velocity模板引擎是一款强大的Java应用程序开发工具,主要用于生成动态网页内容。它是Apache软件基金会下的一个开源项目,基于MVC(Model-View-Controller)设计模式,致力于将视图逻辑与业务逻辑分离,使得开发者...