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

velocity学习笔记

阅读更多

1.Velocity 的使用

Velocity是一个开放源吗的模版引擎,由apache.org小组负责开发,现在最新的版本是Velocity1.3.1,http://jakarta.apache.org/velocity/index.html 可以了解Velocity的最新信息。
Velocity允许我们在模版中设定变量,然后在运行时,动态的将数据插入到模版中,替换这些变量。
例如:

<html> 
<body>HELLO $CUSTOMERNAME</body> 
</html> 

我们可以在运行时得到客户的名字,然后把它插入到这个模版中替换变量$CUSTOMERNAME,整个替换过程是由Velocity进行控制的,而且java的调用代码也非常简单,如我们可以在java代码中这样调用

/***********************************************************/ 
//这个文件中设定了Velocity使用的log4j的配置和Velocity的模版文件所在的目录 
Velocity.init("D:\\Template\\resource\\jt.properties"); 
//模版文件名,模版文件所在的路径在上一条语句中已经设置了 
Template template = Velocity.getTemplate("hello.vm", "gb2312"); 
//实例化一个Context 
VelocityContext context = new VelocityContext(); 
//把模版变量的值设置到context中 
context.put("CUSTOMERNAME", "My First Template Engine ---- Velocity."); 
//开始模版的替换 
template.merge(context, writer); 
//写到文件中 
PrintWriter filewriter = new PrintWriter(new FileOutputStream(outpath),true); 
filewriter.println(writer.toString()); 
filewriter.close(); 
/***********************************************************/ 



这就是整个java的代码,非常的简单。如果我们有多个模版变量,我们仅需要把这些模版变量的值设置到context中。
下面我们简单的分析一下,Velocity引擎读取模板文件时,它直接输出文件中所有的文本,但以$字符开头的除外,$符号标识着一个模版变量位置,
context.put("CUSTOMERNAME", "My First Template Engine ---- Velocity.");
当 Velocity 模板引擎解析并输出模板的结果时,模板中所有出现$CUSTOMERNAME的地方都将插入客户的名字,即被加入到VelocityContext的对象的toString()方法返回值将替代Velocity变量(模板中以$开头的变量)。
模板引擎中最强大、使用最频繁的功能之一是它通过内建的映像(Reflection)引擎查找对象信息的能力。这个映像引擎允许用一种方便的Java“.”类似的操作符,提取任意加入到VelocityContext的对象的任何公用方法的值,或对象的任意数据成员。
映像引擎还带来了另外一个改进:快速引用JavaBean的属性。使用JavaBean属性的时候,我们可以忽略get方法和括号。请看下面这个模板的例子。

<html> 
<body> 
Name:$Customer.Name() 
Address:$Customer.Address() 
Age:$Customer.Age() 
</body> 
</html> 



java的代码:

/***********************************************************/ 
//设置客户信息 
Customer mycustomer = new Customer(); 
mycustomer.setName("Velocity"); 
mycustomer.setAddress("jakarta.apache.org/velocity/index.html"); 
mycustomer.setAge(2); 
//这个文件中设定了 Velocity 使用的 Log4j 的配置和Velocity的模版文件所在的目录
Velocity.init("D:\\Template\\resource\\jt.properties"); 
//模版文件名,模版文件所在的路径在上一条语句中已经设置了 
Template template = Velocity.getTemplate("hello.vm", "gb2312"); 
//实例化一个Context 
VelocityContext context = new VelocityContext(); 
//把模版变量的值设置到context中 
context.put("Customer", mycustomer); 
//开始模版的替换 
template.merge(context, writer); 
//写到文件中 
PrintWriter filewriter = new PrintWriter(new FileOutputStream(outpath),true); 
filewriter.println(writer.toString()); 
filewriter.close(); 

输出结果:

<html> 
<body> 
Name:Velocity 
Address:jakarta.apache.org/velocity/index.html 
Age:2 
</body> 
</html> 


除了替换变量之外,象Velocity高级引擎还能做其他许多事情,它们有用来比较和迭代的内建指令,通过这些指令我们可以完成程序语言中的条件判断语句和循环语句等。
例如,我们想要输出年龄等于2的所有客户的信息,我们可以这样定义我们的模版
模版:

<html> 
<body> 
<table> 
<tr> 
<td>名称</td> 
<td>地址</td> 
<td>年龄</td> 
</tr> 
#foreach ($Customer in $allCustomer) 
#if($Customer.Age()=="2") 
<tr> 
<td>$Customer.Name()</td> 
<td>$Customer.Address()</td> 
<td>$Customer.Age()</td> 
</tr> 
#end 
#end 
</table> 
</body> 
</html> 



java的代码:

/******************************************************/ 
//设置客户信息 
ArrayList allMyCustomer = new ArrayList(); 
//客户1 
Customer mycustomer1 = new Customer(); 
mycustomer1.setName("Velocity"); 
mycustomer1.setAddress("jakarta.apache.org/velocity/index.html"); 
mycustomer1.setAge(2); 
//客户2 
Customer mycustomer2 = new Customer(); 
mycustomer2.setName("Tomcat"); 
mycustomer2.setAddress("jakarta.apache.org/tomcat/index.html"); 
mycustomer2.setAge(3); 
//客户3 
Customer mycustomer3 = new Customer(); 
mycustomer3.setName("Log4J"); 
mycustomer3.setAddress("jakarta.apache.org/log4j/docs/index.html"); 
mycustomer3.setAge(2); 
//添加到allMyCustomer(ArrayList)中. 
allMyCustomer.add(mycustomer1); 
allMyCustomer.add(mycustomer2); 
allMyCustomer.add(mycustomer3); 
//这个文件中设定了Velocity使用的log4j的配置和Velocity的模版文件所在的目 
Velocity.init("D:\\Template\\resource\\jt.properties"); 
//模版文件名,模版文件所在的路径在上一条语句中已经设置了 
Template template =Velocity.getTemplate("hello.vm", "gb2312"); 
//实例化一个Context 
VelocityContext context = new VelocityContext(); 
/** 注意这里我们仅仅需要给一个模版变量负值 */ 
context.put("allCustomer", allMyCustomer); 
//开始模版的替换 
template.merge(context, writer); 
//写到文件中 
PrintWriter filewriter = new PrintWriter(new FileOutputStream(outpath),true); 
filewriter.println(writer.toString()); 
filewriter.close(); 
/******************************************************/ 

结果:

<html> 
<body> 
<table> 
<tr> 
<td>名称</td> 
<td>地址</td> 
<td>年龄</td> 
</tr> 
<tr> 
<td>Velocity</td> 
<td>jakarta.apache.org/velocity/index.html</td> 
<td>2</td> 
</tr> 
<tr> 
<td>Log4J</td> 
<td>jakarta.apache.org/log4j/docs/index.html</td> 
<td>2</td> 
</tr> 
</table> 
</body> 
</html> 



#if 语句完成逻辑判断,这个我想不用多说了。
allCustomer 对象包含零个或者多个Customer对象。由于ArrayList (List, HashMap, HashTable, Iterator, Vector等)属于Java Collections Framework的一部分,我们可以用#foreach指令迭代其内容。我们不用担心如何定型对象的类型——映像引擎会为我们完成这个任 务。#foreach指令的一般格式是“#foreach in ”。#foreach指令迭代list,把list中的每个元素放入item参数,然后解析#foreach块内的内容。对于list内的每个元 素,#foreach块的内容都会重复解析一次。从效果上看,它相当于告诉模板引擎说:“把list中的每一个元素依次放入item变量,每次放入一个元 素,输出一次#foreach块的内容”。

2.MVC设计模型

使用模板引擎最大的好处在于,它分离了代码(或程序 逻辑)和表现(输出)。由于这种分离,你可以修改程序逻辑而不必担心邮件消息本身;类似地,你(或公关部门的职员)可以在不重新编译程序的情况下,重新编 写客户列表。实际上,我们分离了系统的数据模式(Data Model,即提供数据的类)、控制器(Controller,即客户列表程序)以及视图(View,即模板)。这种三层体系称为Model-View- Controller模型(MVC)。
如果遵从MVC模型,代码分成三个截然不同的层,简化了软件开发过程中所有相关人员的工作。
结合模板引擎使用的数据模式可以是任何Java对象,最好是使用Java Collection Framework的对象。控制器只要了解模板的环境(如VelocityContext),一般这种环境都很容易使用。
一 些关系数据库的“对象-关系”映射工具能够和模板引擎很好地协同,简化JDBC操作;对于EJB,情形也类似。 模板引擎与MVC中视图这一部分的关系更为密切。模板语言的功能很丰富、强大,足以处理所有必需的视图功能,同时它往往很简单,不熟悉编程的人也可以使用 它。模板语言不仅使得设计者从过于复杂的编程环境中解脱出来,而且它保护了系统,避免了有意或无意带来危险的代码。例如,模板的编写者不可能编写出导致无 限循环的代码,或侵占大量内存的代码。不要轻估这些安全机制的价值;大多数模板编写者不懂得编程,从长远来看,避免他们接触复杂的编程环境相当于节省了你 自己的时间。 许多模板引擎的用户相信,在采用模板引擎的方案中,控制器部分和视图部分的明确分离,再加上模板引擎固有的安全机制,使得模板引擎足以成为其他内容发布系 统(比如JSP)的替代方案。因此,Java模板引擎最常见的用途是替代JSP也就不足为奇了。

3.HTML处理

由于人们总是看重模板引擎用来替换JSP的作用,有时他们会忘记模板还有更广泛的用途。到目前为止,模板引擎最常见的用途是处理HTML Web内容。但我还用模板引擎生成过SQL、email、XML甚至Java源代码。

分享到:
评论

相关推荐

    velocity学习笔记与struts2整合

    Velocity是Apache软件基金会的一个开源项目,它是一款快速、强大且易用的模板引擎,用于生成动态Web内容。在Java世界中,Velocity常被用来作为MVC框架中的视图层技术,与Struts2等框架集成,以实现更灵活的页面渲染...

    Struts2学习笔记

    根据给定的文件信息,以下是对Struts2学习笔记中涉及的关键知识点的详细解析: ### Struts2框架概览 #### MVC模式的理解与演进 Struts2是基于MVC(Model-View-Controller)模式设计的一种Java Web开发框架。在MVC...

    大数据技术原理学习笔记.docx

    本笔记基于林子雨老师在MOOC上的《大数据技术原理》课程,旨在为IT从业者和大学生提供一个全面了解大数据的基础框架。 首先,我们要认识到大数据的发展背景。随着互联网的普及,以及物联网、社交媒体、移动设备等...

    SpringBoot学习笔记.docx

    这篇学习笔记将引导我们深入了解 SpringBoot 的基本用法,包括项目的创建、返回视图、数据库交互、前端与后端数据传递、日志管理和安全控制等方面。 1. **新建项目**: 创建 SpringBoot 项目通常是通过 Maven 或 ...

    张龙圣思园struts2学习笔记word

    张龙圣思园的Struts2学习笔记,无疑为Java开发者提供了一份宝贵的参考资料,它可能涵盖了Struts2的基础概念、核心组件、配置方式以及实战技巧。 首先,让我们深入了解Struts2的核心特性。Struts2是MVC(Model-View-...

    java私人学习笔记

    Java私人学习笔记主要涵盖了Java编程语言以及与其相关的几个著名框架——Spring、Struts2和Hibernate,还有前端开发中常用的JavaScript。这些技术在IT行业中的应用广泛,是许多企业级应用开发的基础。以下是对这些...

    Spring3.0学习笔记

    尚学堂的Spring学习笔记.doc可能包含对这些特性的详细解释、实例代码以及如何在实际项目中应用的指导,对于想要深入理解Spring 3.0的开发者来说是一份宝贵的参考资料。通过阅读这份笔记,你可以系统地学习Spring 3.0...

    Hadoop学习笔记整理

    "Hadoop学习笔记整理" 本篇笔记对Hadoop进行了系统的介绍和总结,从大数据的基本流程到Hadoop的发展史、特性、集群整体概述、配置文件、HDFS分布式文件系统等方面都进行了详细的讲解。 一、大数据分析的基本流程 ...

    struts2入门教程和学习笔记

    这个入门教程和学习笔记是针对初学者设计的,帮助他们快速理解和掌握Struts2的核心概念和实践操作。 Struts2的学习首先需要理解MVC模式。MVC模式将应用逻辑分为三个部分:模型负责业务逻辑,视图负责展示数据,而...

    Freemaker_入门+深入+开发指南+学习笔记

    相比于其他模板引擎如Velocity,Freemaker支持更为灵活的过程调用、递归处理以及闭包回调等功能,使得开发者能够更加便捷地实现复杂的业务逻辑。 #### 二、基本语法 Freemaker使用特定的标签来定义其语法结构,这些...

    Struts2_学习笔记

    本学习笔记将深入探讨Struts2的核心概念、工作原理以及如何在实际开发中有效利用它。 **1. MVC模式与Struts2** MVC模式是一种软件设计模式,它将业务逻辑(Model)、用户界面(View)和数据控制(Controller)分离...

    struts2 学习重点笔记

    ### Struts2 学习重点知识点总结 #### 一、Struts2 概念与架构 **1.1 Struts2 简介** - **定义**:Struts2 是 Apache 组织提供的一个基于 MVC 架构模式的开源 Web 应用框架。 - **核心**:Struts2 的核心其实是 ...

Global site tag (gtag.js) - Google Analytics