Apache Velocity实现模板化

简介:

1.参考文献

http://www.cnblogs.com/zhuboxingzbx/articles/1225103.html

http://www.cnblogs.com/amboyna/archive/2008/06/19/1225105.html

2.概述

2.1.Velocity模板引擎

模板引擎的设计思想最早由Webmacro提出,并被应用在一个著名的搜索引擎www.altavista.com上。后来,这种思想渐渐被Apache开发小组所采用,并作为一个子项目被提出来,这就是现在的Velocity。

模板引擎与MVC中视图部分的关系更为密切。Velocity可以应用在任何需要格式化数据显示的Java程序中。那么Velocity到底是什么呢?它的官方解释是:“Velocity是一种基于Java的模板引擎,它允许任何人使用简单而强大的模板语言来引用定义在Java代码中的对象。”

2.2.使用Velocity的优点在于:

  • 很容易集成在各种各样的程序领域中;
  • 为网页制作人员提供了一种清晰而简单的语法;
  • 因为模板和代码是分离的,所以可以分别独立的开发和维护它们;
  • Velocity引擎可以很容易地集成到一些Java运行环境,特别是Servlet中;
  • Velocity使得模板可以访问任何环境对象中的共有方法。
Velocity的强大之处还在于它严格地区分程序开发功能的职责划分。它通过限制模板可能访问的对象(即后台程序允许其得到的对象)来实现这一点。这意味着网页设计人员可以只把精力放在数据的显示部分(View),而程序员则只要关注如何写好程序的控制层(Controller)、商业逻辑与数据管理(Model)。这就是典型的MVC开发模式,它简化了开发和日益复杂的应用和维护工作。

2.3.Velocity最擅长做的工作包括:

  • ◆ 基于Servlet的网站制作;
  • ◆ Java和SQL代码生成;
  • ◆ XML处理和转换;
  • ◆ 文字处理,比如生成trf文件等。
不过,Velocity用得最多的还是在基于Java Servlet的网页程序中做生成网页的引擎,以替代JSP等技术。除了使用比较容易外,它提供了强大的模板语言来显示和操作数据。注意,不是生成数据,这点很重要,因为生成工作应该是程序逻辑的部分。

Velocity非常适合在J2EE(Java 2 Platform,Enterprise Edition)的网站开发中替代JSP,做输出页面的技术工作。虽然JSP包含在J2EE规范中,但是J2EE本身并不需要JSP。

3.实例

3.1.实例1

模板(hellosite.vm)只是提供一些静态的字符,中间加杂着一些类如$title的“通配符”,这是要在HelloWorld.java中替换的。下面是hellosite.vm的代码:

[java]  view plain copy print ?
  1. Hello $name! Welcome to $site world!  

HelloWorld.java就是处理程序了,其中注释写的很清楚了,下面是HelloWorld.java的代码:

[java]  view plain copy print ?
  1. import java.io.StringWriter;  
  2. import org.apache.velocity.app.VelocityEngine;  
  3. import org.apache.velocity.Template;  
  4. import org.apache.velocity.VelocityContext;  
  5.   
  6. public class HelloWorld {  
  7.     public static void main(String[] args) throws Exception {  
  8.         /* first, get and initialize an engine */  
  9.         VelocityEngine ve = new VelocityEngine();  
  10.         ve.init();  
  11.         /* next, get the Template */  
  12.         Template t = ve.getTemplate("hellosite.vm");  
  13.         /* create a context and add data */  
  14.         VelocityContext context = new VelocityContext();  
  15.         context.put("name""xuwei");  
  16.         context.put("site""http://blog.csdn.net/xw13106209");  
  17.         /* now render the template into a StringWriter */  
  18.         StringWriter writer = new StringWriter();  
  19.         t.merge(context, writer);  
  20.         /* show the World */  
  21.         System.out.println(writer.toString());  
  22.     }  
  23. }  

3.2.实例2

这里模板和实例1的相同,java代码有所不如,代码如下。

[java]  view plain copy print ?
  1. import java.io.StringWriter;  
  2. import org.apache.velocity.app.VelocityEngine;  
  3. import org.apache.velocity.Template;  
  4. import org.apache.velocity.VelocityContext;  
  5.   
  6. public class HelloWorld2 {  
  7.     public static void main(String[] args) throws Exception {  
  8.   
  9.         // 初始化Velocity模板引擎  
  10.         VelocityEngine ve = new VelocityEngine();  
  11.         ve.init("D:\\Documents\\workspace\\VelocityTest\\a.properties");  
  12.   
  13.         // Velocity获取模板文件,得到模板引用  
  14.         Template t = ve.getTemplate("hellosite.vm");  
  15.   
  16.         // 初始化环境,并将数据放入环境  
  17.         VelocityContext context = new VelocityContext();  
  18.         context.put("name""xuwei");  
  19.         context.put("site""http://blog.csdn.net/xw13106209");  
  20.   
  21.         // 将环境变量和输出部分结合  
  22.         StringWriter writer = new StringWriter();  
  23.         t.merge(context, writer);  
  24.         System.out.println(writer.toString());  
  25.     }  
  26. }  
在这里,配置文件主要的作用就是提供a.properties文件的路径,不多说了,下面是a.properties的代码:
[java]  view plain copy print ?
  1. runtime.log = velocity_example.log  
  2. input.encoding=gbk    
  3. output.encoding=gbk    
  4. file.resource.loader.path=D:\\Documents\\workspace\\VelocityTest  


本文转自xwdreamer博客园博客,原文链接:http://www.cnblogs.com/xwdreamer/archive/2011/12/06/2296915.html,如需转载请自行联系原作者
目录
相关文章
|
存储 Java Apache
java积累——apache commons fileupload 实现文件上传
java积累——apache commons fileupload 实现文件上传
290 0
|
监控 Java 关系型数据库
Apache Flume-自定义 source(扩展)--功能测试实现|学习笔记
快速学习 Apache Flume-自定义 source(扩展)--功能测试实现
116 0
 Apache Flume-自定义 source(扩展)--功能测试实现|学习笔记
|
JavaScript Apache 开发者
通过 express 模拟 Apache 实现静态资源托管服务(补充)|学习笔记
快速学习通过 express 模拟 Apache 实现静态资源托管服务(补充)
106 0
|
JSON JavaScript Apache
通过 express 模拟 Apache 实现静态资源托管服务|学习笔记
快速学习通过 express 模拟 Apache 实现静态资源托管服务
130 0
|
运维 Kubernetes Cloud Native
MSE 支持 Apache Shenyu 网关实现全链路灰度
我们希望可以对这些服务的新版本同时进行小流量灰度验证,这就是微服务架构中特有的全链路灰度场景,通过构建从网关到整个后端服务的环境隔离来对多个不同版本的服务进行灰度验证。
483 1
MSE 支持 Apache Shenyu 网关实现全链路灰度
|
运维 Kubernetes Cloud Native
MSE支持Apache Shenyu网关实现全链路灰度
微服务引擎MSE面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持Nacos/ZooKeeper/Eureka)、云原生网关(原生支持Ingress/Envoy)、微服务治理(原生支持Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。
MSE支持Apache Shenyu网关实现全链路灰度
|
Cloud Native Java 数据处理
通过 MSE 实现基于Apache APISIX的全链路灰度
微服务引擎MSE面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持Nacos/ZooKeeper/Eureka)、云原生网关(原生支持Ingress/Envoy)、微服务治理(原生支持Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。
通过 MSE 实现基于Apache APISIX的全链路灰度
|
弹性计算 前端开发 JavaScript
在阿里云ECS上配置Apache+wsgi实现blog的部署
利用Django框架搭建个人博客网站,将网站通过Apache+wsgi部署到阿里云服务器。主要采用html、css、javascript作为前端,并使用了JQuery框架和Bootstrap框架;采用django框架作为后台开发技术、后台数据库使用mysql。本篇幅着重于Django框架介绍、数据库mysql配置和服务器部署。
在阿里云ECS上配置Apache+wsgi实现blog的部署
|
算法 Apache
使用 Apache Doris HyperLogLog 实现近似去重
在实际的业务场景中,随着业务数据量越来越大,对数据去重的压力也越来越大,当数据达到一定规模之后,使用精准去重的成本也越来越高,在业务可以接受的情况下,通过近似算法来实现快速去重降低计算压力是一个非常好的方式,本文主要介绍 Doris 提供的 HyperLogLog(简称 HLL)是一种近似去重算法。
684 0
|
运维 数据挖掘 OLAP
基于Ansible实现Apache Doris快速部署运维指南
Apache Doris是一个现代化的MPP分析型数据库产品。仅需亚秒级响应时间即可获得查询结果,有效地支持实时数据分析。Apache Doris的分布式架构非常简洁,易于运维,并且可以支持10PB以上的超大数据集。
372 0

推荐镜像

更多