`
芝加哥09
  • 浏览: 60679 次
社区版块
存档分类
最新评论

Velocity详解——(maven管理)

 
阅读更多

本文讲解了velocity主要的模板方法,会了这些方法基本上就会了velocity。同时本java工程是用maven管理,(maven的使用,大家可以看我的另一篇文章)。用到的是1.7版本。代码如下:

 

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.cloud</groupId>
  <artifactId>velocity_01</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>velocity_01</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.7</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.velocity</groupId>
      <artifactId>velocity</artifactId>
      <version>1.7</version>
    </dependency>
  </dependencies>
</project>

 

测试当中要用到的两个model类:

Person.java:

package com.cloud.velocity.model;

public class Person {
    private Integer id;
    private String name;

    public Integer getId() {
        return id;
    }
    
    public void setId(Integer id) {
        this.id = id;
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }

    public Person() {}
    
    public Person(int id, String name) {
        this.id = id;
        this.name = name;
    }
}

 

Product.java

package com.cloud.velocity.model;

public class Product {
    private String id;
    private String name;
    private String note;
    
    public String getId() {
        return id;
    }
    
    public void setId(String id) {
        this.id = id;
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public String getNote() {
        return note;
    }
    
    public void setNote(String note) {
        this.note = note;
    }

    public Product() {
    }
    
    public Product(String id, String name, String note) {
        this.id = id;
        this.name = name;
        this.note = note;
    }
    
}

 

用到的工具类:

DateUtil.java

package com.cloud.velocity.utils;

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateUtil {
    public String dateFormat(String formatStr, Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat(formatStr);
        return sdf.format(date);
    }
}

 

Velocity的配置文件:

velocity.properties

file.resource.loader.path=D:\\neil\\hadoop_workspace\\velocity_01\\src\\main\\resources
input.encoding=UTF-8
output.encoding=UTF-8
directive.foreach.counter.name=index
directive.foreach.counter.initial.value=0

 

各种模板文件:

helloWorld.vm

${hello}

 

person.vm

${p.id} = ${p.name}

 

persons.vm

#foreach($person in $persons)
    $person.id = $person.name
#end

 

maps.vm

#foreach($key in $maps.keySet())
    $index = $key = $maps.get($key)
#end

================================
#foreach($entry in $maps.entrySet())
    $entry.getKey() = $entry.getValue()
#end

 

pageSet.vm

#set($name="cloud")
$name
===================
#set($age=22)
$age
===================
#set($arrs=["chris", "cloud"])
#foreach($arr in $arrs)
$arr
#end
====================
#set($ints=[1..15])
#foreach($int in $ints)
$int
#end

 

ifelse.vm

#if($bool)
Is true
#else
Is false
#end

 

date.vm

$dateFormat.dateFormat("yyyy-MM-dd HH:mm:ss", $now)

 

html.vm

<html>
    <head>
        <title>$product.name -- Cloud</title>
    </head>
    <body>
        <h1>$product.name</h1>
        <br />
        <div>
            Note:$product.note
        </div>
    </body>
</html>

 

最重要的测试类:

VelocityTest.java

package com.cloud.velocity.test;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.StringWriter;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.junit.BeforeClass;
import org.junit.Test;

import com.cloud.velocity.model.Person;
import com.cloud.velocity.model.Product;
import com.cloud.velocity.utils.DateUtil;

public class VelocityTest {

    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
    }

    /**
     * 其中helloWorld.vm中的格式为:${hello},即此种情况是最简单的,单元测试的结果
     * 就是将"Cloud, 您好!!!"原样输出。
     */
    @Test
    public void test() {
        Velocity.init("src/main/resources/velocity.properties");
        VelocityContext context = new VelocityContext();
        context.put("hello", "Cloud, 您好!!!");
        Template template = Velocity.getTemplate("helloWorld.vm");
        StringWriter writer = new StringWriter();
        template.merge(context, writer);
        System.out.println(writer.toString());
    }

    /**
     * 这里测试的情况为:如何将一个JavaBean中的内容在模板中显示出来。
     * person.vm中内容为:${p.id} = ${p.name}
     * 单元测试结果:22 = cloud
     */
    @Test
    public void testBean() {
        Velocity.init("src/main/resources/velocity.properties");
        VelocityContext context = new VelocityContext();
        context.put("p", new Person(22, "cloud"));
        Template template = Velocity.getTemplate("person.vm");
        StringWriter writer = new StringWriter();
        template.merge(context, writer);
        System.out.println(writer.toString());
    }
    
    /**
     * 这里测试的情况为:在模板中如何迭代一个list集合(数组也是一样的)。
     * persons.vm中的内容为:
     * #foreach($person in $persons)
     *   $person.id = $person.name
     *  #end
     *  单元测试的结果为:
     *  22 = cloud
     *  23 = chris
     */
    @Test
    public void loopList() {
        Velocity.init("src/main/resources/velocity.properties");
        VelocityContext context = new VelocityContext();
        context.put("persons", new Person[] {new Person(22, "cloud"), new Person(23, "chris")});
        Template template = Velocity.getTemplate("persons.vm");
        StringWriter writer = new StringWriter();
        template.merge(context, writer);
        System.out.println(writer.toString());
    }

    /**
     * 这里测试的情况为:在模板中如何迭代一个map集合。
     * maps.vm中的内容为:
     * #foreach($key in $maps.keySet())
     *      $index = $key = $maps.get($key)
     *  #end
     *
     *   ================================
     *  #foreach($entry in $maps.entrySet())
     *      $entry.getKey() = $entry.getValue()
     *   #end
     * 其实这里是列出在模板中显示map集合内容的两种方法。其中$index是一个计数器。它的配置是在velocity.properties中
     * directive.foreach.counter.name=index //这里配置了计数器的名字:即为index,默认的为:velocityCount。
     * directive.foreach.counter.initial.value=0 //这里是设置计数器的起始值,即为0。默认为:1。
     * 单元测试的结果为:
     * 0 = 22 = cloud
     * 1 = 23 = chris
     * 
     * ================================
     * 22 = cloud
     * 23 = chris
     */
    @Test
    public void loopMap() {
        Velocity.init("src/main/resources/velocity.properties");
        VelocityContext context = new VelocityContext();
        Map<String, String> maps = new HashMap<String, String>();
        maps.put("22", "cloud");
        maps.put("23", "chris");
        context.put("maps", maps);
        Template template = Velocity.getTemplate("maps.vm");
        StringWriter writer = new StringWriter();
        template.merge(context, writer);
        System.out.println(writer.toString());
    }
    
    /**
     * 这里测试的情况为:为模板中的变量赋值。
     * pageSet.vm中内容为:
     * #set($name="cloud")
     * $name
     * ===================
     * #set($age=22)
     * $age
     * ===================
     * #set($arrs=["chris", "cloud"])
     * #foreach($arr in $arrs)
     * $arr
     * #end
     * ====================
     * #set($ints=[1..15])
     * #foreach($int in $ints)
     * $int
     * #end
     * 测试结果为:
     * cloud
     * ====================
     * 22
     * ====================
     * chris
     * cloud
     * ====================
     * 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 //此处的显示效果应为:竖着显示的,为了节约空间,在此就横着写了。
     *注意:$ints=[1..15]这种赋值形式是为:为这个变量赋值连续的变量。
     *
     */
    @Test
    public void pageSet() {
        Velocity.init("src/main/resources/velocity.properties");
        VelocityContext context = new VelocityContext();
        Template template = Velocity.getTemplate("pageSet.vm");
        StringWriter writer = new StringWriter();
        template.merge(context, writer);
        System.out.println(writer.toString());
    }
    
    /**
     * 这里测试的是在模板中如何用条件判断语句。
     * ifelse.vm内容为:
     * #if($bool)
     * Is true
     * #else
     * Is false
     * #end
     * 单元测试结果为:
     * Is false
     */
    @Test
    public void ifelse() {
        Velocity.init("src/main/resources/velocity.properties");
        VelocityContext context = new VelocityContext();
        context.put("bool", false);
        Template template = Velocity.getTemplate("ifelse.vm");
        StringWriter writer = new StringWriter();
        template.merge(context, writer);
        System.out.println(writer.toString());
    }
    
    /**
     * 这里测试的结果为:如何在模板中按特定的格式显示出日期。
     * 我在此没有去使用第三方jar包,而是利用velocity有很好的
     * 扩展功能实现的。
     * 在我写了一个DateUtil工具类。
     * date.vm的内容为:
     * $dateFormat.dateFormat("yyyy-MM-dd HH:mm:ss", $now)
     * 单元测试结果为:
     * 2013-11-10 10:43:22
     */
    @Test
    public void dateFormat() {
        Velocity.init("src/main/resources/velocity.properties");
        VelocityContext context = new VelocityContext();
        context.put("now", new Date());
        context.put("dateFormat", new DateUtil());
        Template template = Velocity.getTemplate("date.vm");
        StringWriter writer = new StringWriter();
        template.merge(context, writer);
        System.out.println(writer.toString());
    }
    
    /**
     * 这里实现的功能是:将模板中的内容输出到一个文件当中。
     */
    @Test
    public void outFile() {
        try {
            Velocity.init("src/main/resources/velocity.properties");
            Product product = new Product("p0010", "cloud", "Good job!");
            VelocityContext context = new VelocityContext();
            context.put("product", product);
            Template template = Velocity.getTemplate("html.vm");
            File saveFile = new File("src/main/html/product.html");
            if (!saveFile.getParentFile().exists()) {
                saveFile.getParentFile().mkdirs();
            }
            FileOutputStream outStream = new FileOutputStream(saveFile);
            OutputStreamWriter outStreamWriter = new OutputStreamWriter(outStream, "UTF-8");
            BufferedWriter writer = new BufferedWriter(outStreamWriter);
            template.merge(context, writer);
            writer.flush();
            writer.close();
        } catch (Exception e) {
        }
    }
}

 

分享到:
评论

相关推荐

    springmvc3 + velocity 1.7+maven + mysql

    Spring MVC 3、Velocity 1.7、Maven 和 MySQL 是构建现代Web应用程序的四个关键组件,它们共同为开发者提供了一套强大而灵活的工具集。让我们深入了解一下这些技术及其在项目中的应用。 1. Spring MVC 3:Spring ...

    velocity实践——初识velocity

    NULL 博文链接:https://twb.iteye.com/blog/265761

    SpringMVC+Velocity+Maven整合例子

    在SpringMVC和Velocity的整合项目中,Maven可以帮助我们管理Spring、Velocity以及其它依赖库的版本,确保项目的可重复构建。 将SpringMVC、Velocity和Maven整合在一起,可以按照以下步骤进行: 1. **配置POM.xml**...

    Maven 整合 Spring mvc + Mybatis + Velocity 的实例

    本实例将探讨如何使用Maven作为项目管理工具,结合Spring MVC作为控制层框架,Mybatis作为数据访问层框架,以及Velocity作为视图层模板引擎,来构建一个完整的Java Web应用。以下是关于这些技术的详细解释和整合步骤...

    Spring+SpringMVC+Mybatis+Velocity+Maven demo

    在本项目中,Maven被用来管理项目的依赖关系,确保Spring、SpringMVC、Mybatis和Velocity等库的正确引入和版本控制。 整合这些技术通常涉及以下步骤: 1. **创建Maven项目**:首先,我们需要一个Maven项目结构,...

    maven velocity

    ** Maven与Velocity整合详解 ** Maven和Velocity都是在Java开发中非常重要的工具。Maven是一个项目管理和综合工具,它帮助开发者管理项目的构建、报告和文档。Velocity则是一个基于Java的模板引擎,它允许开发者将...

    spring3 mvc+mybatis+velocity+maven

    在"spring3 mvc+mybatis+velocity+maven"项目中,Maven用于管理和构建整个项目,通过在pom.xml文件中声明依赖关系,Maven会自动下载并管理所有必要的库,简化了项目的构建和部署流程。 总结起来,这个项目展示了...

    springMVC+maven+velocity+数据源配置

    springMVC架构,maven , velocity , 数据源配置在项目中(springMVC的配置文件中)。

    Maven + Spring mvc + Mybatis + Velocity 整合实例

    在本实例中,Maven负责管理所有依赖项,如Spring、Mybatis和Velocity的版本,确保它们之间的兼容性。 2. Spring MVC:Spring MVC是Spring框架的一部分,它是一个用于构建Web应用程序的Model-View-Controller(MVC)...

    maven+springMVC+mybatis+velocity+mysql+junit项目框架搭建

    本项目框架“maven+springMVC+mybatis+velocity+mysql+junit”提供了一种高效、灵活且可维护的解决方案。以下将详细讲解这些组件及其作用。 1. Maven: Maven是一个项目管理工具,用于构建、依赖管理和项目信息...

    Spring+Hibernate+SpringMVC+Velocity+Maven整合

    Spring+Hibernate+SpringMVC+Velocity+Maven整合

    maven+druid+mybatis+velocity框架整合

    "maven+druid+mybatis+velocity"就是一个常见的高效开发架构,它涵盖了构建管理、数据库连接池、持久层操作以及模板引擎等多个核心部分。下面将详细阐述这些组件及其整合方式。 1. Maven:Maven是Apache软件基金会...

    maven搭建spring mvc velocity+mybatis

    总结起来,"maven搭建spring mvc(velocity+mybatis)"是一个典型的Java Web开发流程,它结合了项目管理、Web框架、模板引擎和持久层工具。通过这样的实践,开发者可以更好地理解和掌握现代企业级应用的构建方式,提升...

    Spring MVC+Maven+Velocity配置实例

    Spring MVC负责处理请求和响应,Maven简化了项目的构建和依赖管理,而Velocity则为呈现动态内容提供了简洁的模板语言。通过熟练掌握这三个工具的使用,开发者可以构建出高质量、易于维护的Web应用程序。

    Velocity标签详解文档

    例如,Velocity可以与Turbine框架结合,为Turbine提供模板服务,构建更强大的Web应用程序,支持真正的MVC模式开发,使得业务逻辑、视图呈现和控制器管理各自独立,提高了代码的可维护性和扩展性。 在实际应用中,...

    Maven + Spring mvc + Mybatis + Velocity +国际化配置 demo

    1. Maven:Maven 是一个项目管理工具,它简化了Java项目的构建、依赖管理和项目信息管理。通过在`pom.xml`文件中定义项目依赖,Maven可以自动下载所需的库,并按照预定义的生命周期进行构建,包括编译、测试、打包和...

    maven+velocity+spingmvc+ibatis+mysql

    【标题】"maven+velocity+springmvc+ibatis+mysql"是一个综合性的Web项目构建方案,它结合了多个开源技术来创建一个用户管理系统。在这个系统中,Maven作为项目管理和构建工具,Velocity用于模板引擎生成动态网页,...

    Velocity配置文件详解

    ### Velocity配置文件详解 #### 一、概述 在Apache Velocity框架中,`velocity.properties`配置文件扮演着核心角色。此文件通常位于`org.apache.velocity.runtime.defaults`包下,并且定义了Velocity运行时所需的...

    maven+springmvc+spring+ibatis+velocity+mysql

    在构建企业级Web应用时,"maven+springmvc+spring+ibatis+velocity+mysql"这个组合提供了高效且灵活的开发框架。让我们逐一解析这些技术及其在项目中的作用。 **Maven** 是一个项目管理和综合工具,它帮助开发者...

Global site tag (gtag.js) - Google Analytics