Velocity学习3

Velocity快速入门教程

Apache的速度是一个基于Java的的模板引擎(模板引擎),它允许任何人仅仅简单的使用模板语言(模板语言)来引用由java的代码定义的对象。
官网介绍如下:

Velocity是一个模板引擎,可用于多种用途。一些使用Velocity的常见应用程序类型是:

  • Web应用程序。Web设计人员使用占位符创建HTML页面以获取动态信息。该页面使用VelocityViewServlet或任何支持Velocity 的框架进行处理。这种Web应用程序开发方法称为模型 - 视图 - 控制器或MVC,旨在直接替代使用Java Server Pages(JSP)或PHP开发的应用程序。
  • 源代码生成。Velocity可用于基于模板生成Java源代码,SQL或PostScript。该PoweredByVelocity页面列出了一些在这种方式中使用Velocity开源和商业开发的软件包。
  • 自动发送电子邮件 许多应用程序会为帐户注册,密码提醒或自动发送的报告生成自动电子邮件。使用Velocity,电子邮件模板可以存储在文本文件中,而不是直接嵌入到Java代码中。
  • XML转换。Velocity提供了一个名为Anakia的ant任务,它读取XML文件并使其可用于Velocity模板。常见的应用程序是将以通用“xdoc”格式存储的文档转换为样式化HTML文档。
    从2.0版开始,Velocity也可以作为脚本引擎集成到Java Scripting Language Framework(由JSR-223规范定义)中。

Velocity主要使用场景如下:

  1. Web应用:开发者在不使用JSP的情况下,可以用Velocity让HTML具有动态内容的特性。
  2. 源代码生成:Velocity可以被用来生成Java代码,SQL或者PostScript。
  3. 自动电子邮件:很多软件的用户注册,密码提醒或者报表都是使用Velocity来自动生成的。
  4. 转换xml。

VTL语法使用

在Velocity中所有的关键字都是以#开头的,而所有的变量则是以开头$.Velocity的语法类似于JSP中的JSTL,甚至可以定义类似于函数的宏,下面来看看具体的语法规则。

一,变量

和我们所熟知的其他编程语言一样,Velocity也可以在模板文件中有变量的概念。

  1. 变量定义
#set($name =“velocity”)

等号后面的字符串Velocity引擎将重新解析,例如出现以$开始的字符串时,将做变量的替换。

 #set($hello =“hello $name”)

上面的这个等式将会给$hello赋值为“hello velocity”

  1. 的变量使用
    在模板文件中使用$name或者${name}来使用的定义变量。使用推荐${name}这种格式,在因为模板中同时可能定义了类似$name状语从句:$names的两个变量,如果不选用大括号的话,就引擎没有办法正确识别$names这个变量。
#set($name =“ricky”)

Welcome $name to velocity\.com

二,循环

在Velocity中循环语句的语法结构如下:

#foreach($element in $list)
 This is $element
 $velocityCount
#end

Velocity引擎会列出中的值循环赋给元变量,同时会创建一个$velocityCount的变量作为计数,从1开始,每次循环都会加1。

三,条件语句

条件语句的语法如下:

#if(condition)

#elseif(condition)

#else #end 

四,关系操作符

Velocity引擎提供了AND,OR和NOT操作符,分别对应&&,||和!例如:

#if($foo && $bar)
#end

五,宏

Velocity中的宏可以理解为函数定义。定义的语法如下:

#macro(macroName arg1 arg2 …)

#end

调用这个宏的语法是:

#macroName(arg1 arg2 …)

这里的参数之间使用空格隔开,下面是定义和使用Velocity宏的例子:

#macro(sayHello $name)
hello $name
#end

#sayHello(“velocity”)

输出的结果为你好速度

六,#parse和#include

#parse状语从句:#include指令的功能都是在外部引用文件,而两者的区别是:#parse会将引用的内容当成类似于源码文件,会将内容在引入的地方进行解析,#include是将引入文件当成资源文件,会将引入内容原封不动地以文本输出。分别看以下例子:
foo.vm文件:

#set($name =“velocity”)

parse.vm:

#parse(“foo.vm”)

输出结果为:速度

include.vm:

#include(“foo.vm”)

输出结果为:#set($ name =“velocity”)

API实战

1,Singleton模型

使用org.apache.velocity.app.Velocity

package com.bytebeats.velocity.sample;

import java.io.StringWriter;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.Template;
import org.apache.velocity.app.Velocity; import org.apache.velocity.exception.ResourceNotFoundException; import org.apache.velocity.exception.ParseErrorException; import org.apache.velocity.exception.MethodInvocationException; /** * ${DESCRIPTION} * * @author Ricky Fung * @date 2017-03-10 13:44 */ public class SingletonModelDemo { public static void main(String[] args) { Velocity.init(); VelocityContext context = new VelocityContext(); context.put("name", "Velocity"); Template template = null; try { template = Velocity.getTemplate("mytemplate.vm"); } catch( ResourceNotFoundException e ) { // couldn't find the template } catch( ParseErrorException pee ) { // syntax error: problem parsing the template } catch( MethodInvocationException mie ) { // something invoked in the template // threw an exception } catch( Exception e ) { } StringWriter sw = new StringWriter(); template.merge(context, sw); System.out.println("content:"+sw.toString()); } } 

2,单独实例

使用org.apache.velocity.app.VelocityEngine,如下:

package com.bytebeats.velocity.sample;

import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import java.io.StringWriter; /** * ${DESCRIPTION} * * @author Ricky Fung * @date 2017-03-10 13:48 */ public class SeparateInstanceDemo { public static void main(String[] args) { //1. create a new instance of the engine VelocityEngine ve = new VelocityEngine(); //2. configure the engine ve.setProperty(VelocityEngine.RESOURCE_LOADER, "classpath"); //3. initialize the engine ve.init(); VelocityContext context = new VelocityContext(); context.put("name", "Velocity"); Template template = ve.getTemplate("foo.vm"); StringWriter sw = new StringWriter(); template.merge(context, sw); System.out.println("content:"+sw.toString()); } } 

还有另外一种方式来配置:

        Properties props = new Properties();
        props.load(this.getClass().getResourceAsStream("/vm.properties"));
        VelocityEngine ve = new VelocityEngine(props); ve.init(); 

参考资料

开发者指南



作者:FX_SKY
链接:https://www.jianshu.com/p/82e5df3b4a1d
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

转载于:https://www.cnblogs.com/friendlysong/p/10767771.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值