`
bit1129
  • 浏览: 1051508 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【Velocity五】Velocity模板引擎

 
阅读更多

 脱离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");)

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 大小: 34.6 KB
  • 大小: 34.1 KB
分享到:
评论

相关推荐

    Velocity模板引擎Velocity模板引擎

    Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎

    JavaScript模板引擎Velocity.js.zip

    Velocity 是基于Java的模板引擎,广泛应用在阿里集 体各个子公司。Velocity模板适用于大量模板使用的场景,支持复杂的逻辑运算,包含 基本数据类型、变量赋值和函数等功能。Velocity.js 支持 Node.js 和浏览器环境。...

    Java进阶教程Velocity快速掌握模板引擎视频

    本课程从velocity engine也就是velocity引擎开始, 先讲解velocity的基本使用以及基础语法 , 然后再讲解velocity 的进阶内容velocity Tools , 以及velocity作为web项目的视图改如何使用 , 每一部分都会有一个综合案例...

    velocity开发包vm模板引擎

    velocity是一款除JSP以外的另一款模板引擎,也许很多地方比常规的JSP更加好,或者说它这种模板引擎是基于常规JSP与一些标签整合后。 zip包中有两个jar包,提供使用。

    模板引擎 Velocity 官方最新版下载

    Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。 当Velocity应用于web开发时,界面设计人员可以和java程序开发人员...

    velocity模板引擎

    velocity与freemaker、jstl并称为java web开发三大标签技术,一、定义变量二、遍历数组三、遍历HashTable四、判断是否为空五、数值、日期格式化六、国际化七、内建对象八、include、parse实现布局模块化

    Java的模板引擎Velocity初体验.pdf

    Java的模板引擎Velocity初体验.pdf

    Velocity模板技术语法详细介绍

    Velocity模板技术语法详细介绍,包括很详细的示例代码 1.变量………………………………………………………………………………1 2.循环………………………………………………………………………………2 3.条件语句...

    Velocity_中文手册

    Velocity是一个基于java的模板引擎(template engine)。

    Velocity用户手册 中文版

    Velocity用户手册,主要讲解Velocity模板引擎的语法和使用

    Velocity--java的模板引擎

    NULL 博文链接:https://kingmxj.iteye.com/blog/371850

    Velocity模板引擎 v2.2.0.zip

    Velocity模板引擎 v2.2.0.zip

    Velocity模板解析

    Velocity模板解析,通过Velocity模板自动替换表达式中的变量

    Velocity文档中文版

    Velocity文档中文版

    velocity实现邮件模板定制

    NULL 博文链接:https://vipshow.iteye.com/blog/1778614

    velocity语法

    Velocity语法详细介绍,主要介绍了velocity再构建模板时的一些居然语法。

    velocity1.5

    java web 开发 velocity 包, Java模板引擎Velocity

Global site tag (gtag.js) - Google Analytics