快速了解Velocity模板引擎

下面是一段来自互联网对于Velocity的简介:

-----------------------------------------------------------------------------------------------------------

Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。 当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。Velocity将java代码从web页面中分离出来,这样为web站点的长期维护提供了便利,同时也为我们在JSP和PHP之外又提供了一种可选的方案。 Velocity的能力远不止web站点开发这个领域,例如,它可以从模板(template)产生SQL和PostScript、XML,它也可以被当作一个独立工具来产生源代码和报告,或者作为其他系统的集成组件使用。Velocity也可以为Turbine web开发架构提供模板服务(template service)。Velocity+Turbine提供一个模板服务的方式允许一个web应用以一个真正的MVC模型进行开发。

-----------------------------------------------------------------------------------------------------------------------


使用了模板语言定义的模板文件

<user>
    <user-name>$user.name</user-name>
    <user-age>$user.age</user-age>
    <user-gender>$user.gender</user-gender>
<user>

可以输出显示为

<user>
    <user-name>chenzuhuang</user-name>
    <user-age>21</user-age>
    <user-gender>male</user-gender>
<user>

或者

<user>
    <user-name>tankui</user-name>
    <user-age>22</user-age>
    <user-gender>male</user-gender>
<user>

这都取决于你java代码传入的对象user里存放的信息。


甚至你还可以使用判断循环语句

<userList>
    #foreach $!{user} in $!{userList}
    <user>
    <user-name>$user.name</user-name>
    <user-age>$user.age</user-age>
    <user-gender>$user.gender</user-gender>
    <user>
    #end
</userList>


简而言之,模板语言的使用需要事先写一份模板,在模板中的可变值处使用变量,当需要将模板文件用作显示或者作为字符串输出的时候,会把java bean中信息填充到模板文件中使用变量之处。


下面来看一个Velocity的使用例子,来了解下Velocity的工作原理以及应用。

一、下载Velocity的jar包

http://download.csdn.net/detail/yatyou/8731659


二、创建Eclipse Java Project

buildpath导入这两个jar包:

velocity-1.7.jar

Velocity-1.7-dep.jar


三、定义模板

在项目根目录下创建文件夹vm,并在其中创建一个文件index.vm

<!DOCTYPE HTML>
<html>
    <head>
        <title>用户信息</title>
    </head>
    <body>
        <table>
            <tr><th>用户名</th><td>$user.username</td></tr>
            <tr><th>年龄</th><td>$user.age</td></tr>
        </table>
    </body>
</html>

四、定义java bean,用来传递数据

package com.chenzuhuang.blog.bean;
 
public class User {
    private String username;
    private int age;
     
    public User(String username, int age){
        this.username = username;
        this.age = age;
    }
     
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}


五、测试

package com.chenzuhuang.blog.core;
 
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.Reader;
import java.io.StringWriter;
 
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
 
import com.chenzuhuang.blog.bean.User;
 
public class VelocityTest {
 
    public static void main(String[] args) throws FileNotFoundException {
        //创建bean对象
        User user = new User("chenzuhuang", 21);
         
        //初始化Velocity引擎,Velocity引擎是单例模式且线程安全。
        Velocity.init();
         
        //创建VelocityContext上下文环境,并将user对象存放到VelocityContext中
        VelocityContext context = new VelocityContext();
        context.put("user", user);
         
        //通过FileReader来读取模板文件
        Reader reader = new FileReader("vm/index.vm");
         
        //创建字符串输出流,Velocity会将填充值后的模板字符串放在StringWriter里
        StringWriter vmWriter = new StringWriter(); 
         
        //根据指定的VelocityContext上下文对模板进行填值。
        //第一个参数为指定上下文,第二个参数为字符串输出流,第三个参数为日志Tag,第四个为模板输文件输入流
        Velocity.evaluate(context, vmWriter, "UserMessage", reader);
         
        //将经过替换模板输出
        System.out.println(vmWriter.toString());
         
    }
 
}


六、运行

输出结果为

<!DOCTYPE HTML>
<html>
    <head>
        <title>用户信息</title>
    </head>
    <body>
        <table>
            <tr><th>用户名</th><td>chenzuhuang</td></tr>
            <tr><th>年龄</th><td>21</td></tr>
        </table>
    </body>
</html>


Blog:http://my.oschina.net/chenzuhuang/blog

首发于:http://blog.chenzuhuang.com/archive/38.html

转载必须说明出处

----------------------------------------------------------------------------------------------------------


转载于:https://my.oschina.net/chenzuhuang/blog/425912

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值