文档章节

Velocity模板语言VTL

DENGJM
 DENGJM
发布于 2015/04/21 14:02
字数 1009
阅读 62
收藏 0
点赞 0
评论 0

Velocity是Apache软件组织提供的一想开源源码项目,可前往Apache Velocity Project下载。它是基于Java的模板引擎,主要用于简化Web应用开发。网页设计者可以通过Velocity模板语言定义模板,开发者编写程序代码设置上下文,Velocity引擎负责结合模板和上下文,以此生成动态网页。很明显,Velocity可将Java代码从Web页面中分离出来,是Web站点在长时间运行后仍然有很好的维护性。视图VTL模板语言不用经过JSP编译器的编译,VTL模板的解析是由Velocity引擎来完成的。特别需要注意的是,若扩展VelocityServlet,将被提示the type VelocityServlet is deprecated,如下图所示:

。API文档中写道,This servlet has been replaced by VelocityViewServlet, available from the Velocity-Tools sub-project.  VelocityViewServlet provides support for quick, clean MVC web development. VelocityServlet will be removed in a future version of Velocity.于是,我去扩展VelocityViewServlet,引用的时候,发现

,顿时感觉Velocity API文档在逗我。我进入VelocityViewServlet源码中发现,原来注释中有告诉我们,已经被移动到org.apache.velocity.tools.view.VelocityViewServlet中,部分源码如下图所示:

Velocity实例1

   新建文件myvelocity.vm,具体内容如下:

##author: DJM
#set($jianming="king")
Welcome $djm to Velocity!
Today is $date.
djm is $jianming.

     创建简单的类MyVelocity,代码如下:

package com.jianming;

import java.io.StringWriter;
import java.util.Date;

import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;

public class MyVelocity {

	public static void main(String[] args) {
		
		// 初始化并取得Velocity引擎
		VelocityEngine ve = new VelocityEngine();
		
		ve.init();
		
		// 取得velocity的模版
		Template template = ve.getTemplate("src/com/jianming/myvelocity.vm");
		
		// 取得velocity的上下文context
		VelocityContext context = new VelocityContext();
		
		context.put("djm", "DengJianming");
		
		context.put("date", new Date());
		
		StringWriter sw = new StringWriter();
		
		template.merge(context, sw);
		
		System.out.println(sw.toString());
		
	}
}

运行之后的结果如下图所示:

        

Velocity实例2

    在WEB-INF目录下创建属性文件velocity.properties和vm目录,并在vm目录中创建模板文件myvelocity.vm和。

   velocity.properties文件的内容为:

resource.loader = webapp  
webapp.resource.loader.class = org.apache.velocity.tools.view.servlet.WebappLoader
webapp.resource.loader.path=/WEB-INF/vm/  
input.encoding=utf-8
output.encoding=utf-8

   myvelocity.vm文件的内容为:

##author: DJM
<html>
    <head>
        <title>$djm</title>
    </head>
    <body bgcolor="#ffffff">
        <h2>$djm</h2><hr>
        #set($jianming="king")
        Welcome $djm to Velocity!<hr>
        Today is <font color="#E10300">$date.</font><hr>
        djm is $jianming.<hr>
    </body>
</html>

    

   编写MyVelocity类,源码如下:

package com.threeeyes.djm;

import java.util.Date;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.velocity.Template;
import org.apache.velocity.context.Context;
import org.apache.velocity.tools.view.VelocityViewServlet;

public class MyVelocity extends VelocityViewServlet {

    private static final long serialVersionUID = 8439995475770991915L;

    @Override
    protected Template handleRequest(HttpServletRequest request,
            HttpServletResponse response, Context ctx) {
        ctx.put("djm", "ZhaoXue");
        ctx.put("date", new Date());
        return getTemplate("myvelocity.vm");
    }

    @Override
    protected void setContentType(HttpServletRequest request,
            HttpServletResponse response) {
        response.setContentType("text/html; charset=utf-8");
    }
    
}

  在web.xml文件中添加如下配置:

<servlet>
   <servlet-name>myVelocity</servlet-name>
   <servlet-class>com.threeeyes.djm.MyVelocity</servlet-class>
   <init-param>
       <param-name>org.apache.velocity.properties</param-name>
       <param-value>/WEB-INF/velocity.properties</param-value>
   </init-param>
</servlet>
<servlet-mapping>
   <servlet-name>myVelocity</servlet-name>
   <url-pattern>/myVelocity</url-pattern>
</servlet-mapping>

部署到tomcat之后,运行程序显示结果如下:


Velocity注释

        VTL中,单行注释采用"##",对于多行注释采用"#*"和"*#"符号。      


Velocity指令

        #set指令

        #set指令用来为引用变量或者引用属性赋值,比如:    

        #set($djm="dengjianming")

        赋值表达式的左边必须是一个变量引用或者属性引用,右边可以是变量引用($djm)、字符串("zhaoxue")、属性引用($MyWife.name)、方法引用($djm.merge($condition))、数字(200)、数组({"deng", "jian", "ming"})、简单的算术表达式。

        字面字符串

         当使用#set指令时,在双引号中的字面字符串将被解析。在单引号中的字面字符串将不被解析。


        #if指令

        当#if指令的IF条件为真时,Velocity将输出#if代码块包含的文本,比如,

         #if($flag)

                <h1>少说话,多生娃</h1>

         #end

        当$flag是一个逻辑类型为true的变量或者$flag值为非空的情况下,if才为真。当$flag是一个逻辑类型为flase的变量或者$flag的值为null,if才为假。

        在#if语句后可包含#elseif和#else项。

 

           

        

        

© 著作权归作者所有

共有 人打赏支持
DENGJM
粉丝 8
博文 33
码字总数 29088
作品 0
杭州
后端工程师
MVC三种模板的比较

网上看的一篇,转如下: http://blog.sina.com.cn/s/blog_4adf62ab0100ryvb.html http://www.tuicool.com/articles/63mAvqy Velocity浅析及与Jsp、Freemarker对比 (2011-03-17 21:37:45) 转载......

强子哥哥 ⋅ 2016/05/19 ⋅ 0

使用 Velocity 实现客户端和服务器端模板

Velocity 是一种通用的、开放源代码的模板解决方案,可以在报告生成/数据转换应用程序中独立使用,也可以在 MVC 模型框架中作为视图组件。本文中,Sing Li 介绍了 Velocity,并说明如何将其模...

红薯 ⋅ 2008/10/05 ⋅ 1

Velocity 文档(1)

Velocity是什么? Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。 当Velocity应用于web开发...

mj4738 ⋅ 2012/01/30 ⋅ 0

《Velocity 模板使用指南》中文版

目 录 1.本文目地和使用对象 2.什么是Velocity? 3.Velocity能为你做什么? 1.一个Mud Store Example 4.Velocity Template Language (VTL): 介绍 5.输出第一个VTL页面! 6.Comments(注释) 7.Ref...

phantome ⋅ 2014/04/17 ⋅ 0

velocity用户指南 超全面的中文教材 分享

1. 关于 Velocity 用户指南旨在帮助页面设计者和内容提供者了解Velocity 和其简单而又强大的脚本语言(Velocity Template Language (VTL))。本指南中有很多示例展示了用Velocity来讲动态内容...

整理秀逗的脑袋 ⋅ 2011/12/08 ⋅ 13

Velocity入门指南——第二章 注释

注释一向是一门编程语言的必须成员,没有注释的代码不能称之为好代码。注释允许放置描述文本在模板引擎中。注释通常用于提示自己和解释别人的VTL(Velocity Template Language)语句在做什么...

Leech ⋅ 2015/12/03 ⋅ 0

Velocity入门指南——第八章 导入外部文件

Velocity有两种方式从外部引入文件:包括和解析。 1 包括 #include脚本元素允许模板设计者导入本地文件,然后插入到#include指令定义的位置。文件的内容通过模板引擎渲染。由于安 全原因,文...

Leech ⋅ 2015/12/04 ⋅ 0

Velocity入门指南——第三章 引用

在VTL中,有三种类型的引用:变量、属性和方法。 1 变量 变量的速记符号由前导“$”字符后随VTL标识符组成。VTL标识符必须以字母开头,其它合法字符包含: 字母 数值 连字符 下划线 下面是V...

Leech ⋅ 2015/12/03 ⋅ 0

Velocity用户手册---中文版(学习修改版) 转

Velocity的能力远不止web站点开发这个领域,例如,它可以从模板(template)产生SQL和PostScript、XML,它也可以被当作一个独立工具来产生源代码和报告,或者作为其他系统的集成组件使用。V...

asdtiang ⋅ 2010/02/22 ⋅ 0

Velocity宏定义的坑与解决办法

使用Velocity,当然就免不了要使用宏,或者说使用Velocity而不使用其宏,就相当于废了Velocity一半以上的武功,非常可惜的。 怎么使用Velocity的宏呢,才最大程度的发挥其作用但是又避免掉入...

悠悠然然 ⋅ 2014/04/14 ⋅ 2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

RabbitMQ学习以及与Spring的集成(三)

本文介绍RabbitMQ与Spring的简单集成以及消息的发送和接收。 在RabbitMQ的Spring配置文件中,首先需要增加命名空间。 xmlns:rabbit="http://www.springframework.org/schema/rabbit" 其次是模...

onedotdot ⋅ 11分钟前 ⋅ 0

JAVA实现仿微信红包分配规则

最近过年发红包拜年成为一种新的潮流,作为程序猿对算法的好奇远远要大于对红包的好奇,这里介绍一种自己想到的一种随机红包分配策略,还请大家多多指教。 算法介绍 一、红包金额限制 对于微...

楠木楠 ⋅ 23分钟前 ⋅ 0

Python 数电表格格式化 xlutils xlwt xlrd的使用

需要安装 xlutils xlwt xlrd 格式化前 格式化后 代码 先copy读取的表格,然后按照一定的规则修改,将昵称中的学号提取出来替换昵称即可 from xlrd import open_workbookfrom xlutils.copy ...

阿豪boy ⋅ 52分钟前 ⋅ 0

面试题:使用rand5()生成rand7()

前言 读研究生这3 年,思维与本科相比变化挺大的,这几年除了看论文、设计方案,更重要的是学会注重先思考、再实现,感觉更加成熟吧,不再像个小P孩,人年轻时总会心高气傲。有1 道面试题:给...

初雪之音 ⋅ 52分钟前 ⋅ 0

Docker Toolbox Looks like something went wrong

Docker Toolbox 重新安装后提示错误:Looks like something went wrong in step ´Checking if machine default exists´ 控制面板-->程序与应用-->启用或关闭windows功能:找到Hyper-V,如果处......

随你疯 ⋅ 今天 ⋅ 0

Guacamole 远程桌面

本文将Apache的guacamole服务的部署和应用,http://guacamole.apache.org/doc/gug/ 该链接下有全部相关知识的英文文档,如果水平ok,可以去这里仔细查看。 一、简介 Apache Guacamole 是无客...

千里明月 ⋅ 今天 ⋅ 0

nagios 安装

Nagios简介:监控网络并排除网络故障的工具:nagios,Ntop,OpenVAS,OCS,OSSIM等开源监控工具。 可以实现对网络上的服务器进行全面的监控,包括服务(apache、mysql、ntp、ftp、disk、qmail和h...

寰宇01 ⋅ 今天 ⋅ 0

AngularDart注意事项

默认情况下创建Dart项目应出现以下列表: 有时会因为不知明的原因导致列表项缺失: 此时可以通过以下步骤解决: 1.创建项目涉及到的包:stagehand 2.执行pub global activate stagehand或pub...

scooplol ⋅ 今天 ⋅ 0

Java Web如何操作Cookie的添加修改和删除

创建Cookie对象 Cookie cookie = new Cookie("id", "1"); 修改Cookie值 cookie.setValue("2"); 设置Cookie有效期和删除Cookie cookie.setMaxAge(24*60*60); // Cookie有效时间 co......

二营长意大利炮 ⋅ 今天 ⋅ 0

【每天一个JQuery特效】淡入淡出显示或隐藏窗口

我是JQuery新手爱好者,有时间就练练代码,防止手生,争取每天一个JQuery练习,在这个博客记录下学习的笔记。 本特效主要采用fadeIn()和fadeOut()方法显示淡入淡出的显示效果显示或隐藏元...

Rhymo-Wu ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部