`
clq9761
  • 浏览: 592703 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

Velocity模板应用

 
阅读更多

Velocity是一个基于java的模板引擎(模板引擎的作用就是取得数据并加以处理,最后显示出数据)。
     它允许任何人仅仅简单的使用模板语言来引用由java代码定义的对象。
    
主要应用在:
 1.Web应用的开发。
 2.作为模板产生SQL,XML或代码等。
 3.作为其他系统的集成组件使用。

 

当Velocity应用于application program或 a servlet,主要工作流程如下:
 1.初始化Velocity.
 2.创建Context对象
 3.添加数据到Context
 4.选择模板
 5.合并模板和数据产生输出页面

 

准备工作:导入相关依赖包,在下面附件中。

 

例1:应用程序事例

 

1.模板文件hellovelocity.vm文件

##这是一行注释,不会输出
#*这是多行注释,不会输出
   多行注释*#
// ---------- 1.变量赋值输出------------
Welcome $name to Javayou.com!
today is $date.
tdday is $mydae.//未被定义的变量将当成字符串

// -----------2.设置变量值,所有变量都以$开头----------------
#set( $iAmVariable = "good!" )
Welcome $name to Javayou.com!
today is $date.
$iAmVariable

//-------------3.if,else判断--------------------------
#set ($admin = "admin")
#set ($user = "user")
#if ($admin == $user)
Welcome admin!
#else
Welcome user!
#end

//--------------4.迭代数据List---------------------
#foreach( $product in $list )
$product
#end

// ------------5.迭代数据HashSet-----------------
#foreach($key in $hashVariable.keySet() )  
$key ‘s value: $ hashVariable.get($key)
#end

//-----------6.迭代数据List Bean($velocityCount为列举序号,默认从1开始,可调整)
#foreach ($s in $listBean)
<$velocityCount> Address: $s.address
#end

//-------------7.模板嵌套---------------------
#foreach ($element in $list)
	#foreach ($element in $list)
	inner:This is ($velocityCount)- $element.
	#end
outer:This is ($velocityCount)- $element.
#end

//-----------8.导入其它文件,多个文件用逗号隔开--------------
#include("com/test2/test.txt")

 

2.其它非模板文件text.txt

   ======text.txt====================
   this is test's content.yeah.

 

3.客户端应用测试代码:

package com.test2;
import java.io.FileOutputStream;
import java.io.StringWriter;
import java.util.*;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;

public class HelloVelocity {

	public static void main(String[] args) throws Exception {

		// 初始化并取得Velocity引擎
		VelocityEngine ve = new VelocityEngine();

		// 取得velocity的模版		
		Properties p =new Properties();
		p.put(Velocity.FILE_RESOURCE_LOADER_PATH, "D:/myspace/VelocityTest/src");
		ve.init(p);
		
		//取得velocity的模版 
		Template t = ve.getTemplate("com/test2/hellovelocity.vm","utf-8"); 	

		// 取得velocity的上下文context
		VelocityContext context = new VelocityContext();

		// 把数据填入上下文
		context.put("name", "Liang");
		context.put("date", (new Date()).toString());

		// 为后面的展示,提前输入List数值
		List temp = new ArrayList();
		temp.add("item1");
		temp.add("item2");
		context.put("list", temp);		
		List tempBean = new ArrayList();
		tempBean.add(new UserInfo("1","张三","福建"));
		tempBean.add(new UserInfo("2","李四","湖南"));
		context.put("listBean", tempBean);

		// 输出流
		StringWriter writer = new StringWriter();
		// 转换输出
		t.merge(context, writer);
		// 输出信息
		System.out.println(writer.toString());
		
		// 输出到文件
		FileOutputStream of = new FileOutputStream("d:/velocity.txt");
                           of.write(writer.toString().getBytes("GBK")); 
                           of.flush();
                           of.close();		
	}
}

 

4.UserInfo实体类

package com.test2;

public class UserInfo {
	
	private String userId;
	private String userName;
	private String address;	
	
	public UserInfo(String userId, String userName, String address) {
		super();
		this.userId = userId;
		this.userName = userName;
		this.address = address;
	}
	public String getUserId() {
		return userId;
	}
	public void setUserId(String userId) {
		this.userId = userId;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
}

 

例2:Web应用事例

 

1.在web-inf目录下建立velocity目录,建立一模板文件velocity.vm。

<html>
<title>hello!Lizhiwo_wo!</title>
<body>
#set($foo = "Velocity")
Hello $foo World!  欢迎您~~~~~~~~~~~~
<table>
	<tr>
		<td>ID</td><td>姓名</td><td>地址</td>
	</tr>
	#foreach ($s in $listBean)	
		<tr>
		<td>$s.userId</td><td>$s.userName</td><td>$s.address</td>
		</tr>
	#end
</table>
</body>
</html>

 

2.在web-inf目录下建立velocity.properties属性文件

resource.loader = file
file.resource.loader.path = /WEB-INF/velocity
file.resource.loader.cache = true
file.resource.loader.modificationCheckInterval = 300

 

3.建立Servlet文件VelocityServletTest.java

package servlet;

import java.io.IOException;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletConfig;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.collections.ExtendedProperties;
import org.apache.velocity.Template;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.context.Context;
import org.apache.velocity.tools.view.servlet.VelocityViewServlet;

import com.test2.UserInfo;

	public class VelocityServletTest extends VelocityViewServlet{
	
	private static final long serialVersionUID = 1L;	
	
	//第一步 加载配置文件这个方法会在VelocityServlet的初始化方法init()中被调用
    protected ExtendedProperties loadConfiguration(ServletConfig config) throws IOException
    {
        ExtendedProperties p = super.loadConfiguration(config);

        // 获取velocity.properties中配置的velocity模板路径
        String velocityLoadPath = p.getString(Velocity.FILE_RESOURCE_LOADER_PATH);        
   
        if (velocityLoadPath != null) {
        
        	// 获取模板路径的绝对路径
        	velocityLoadPath = getServletContext().getRealPath(velocityLoadPath);
            if (velocityLoadPath != null) {
            	//重新设置模板路径
            	 System.out.println("vMPath2:"+velocityLoadPath);
                p.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, velocityLoadPath);               
            }
        }
        return p;
    }

	protected Template handleRequest(HttpServletRequest req, 
									 HttpServletResponse res, 
									 Context context)
									 throws Exception{
		
		//字符编码
    	req.setCharacterEncoding("gb2312");
        res.setCharacterEncoding("gb2312");
        //页面输出
        res.setContentType("text/html;charset=" + "gb2312");
		
		List tempBean = new ArrayList();
		tempBean.add(new UserInfo("1","张三","福建"));
		tempBean.add(new UserInfo("2","李四","湖南"));
		context.put("listBean", tempBean);
		
	    String templateName = "velocity.vm";	    
	    // 测试信息输出
	    Template t= getTemplate(templateName, "utf-8");	    
		StringWriter writer = new StringWriter();
		// 转换输出
		t.merge(context, writer);
		// 输出信息
		System.out.println(writer.toString());	    
	    // 获取模板页面展示
            return templateName != null ? getTemplate(templateName, "utf-8") : null;		
	}
}

 

 4.在web.xml文件中进行配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
	xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	
	<servlet>
        <servlet-name>velocityServletTest</servlet-name>
        <servlet-class>servlet.VelocityServletTest</servlet-class>
        <init-param>
            <param-name>org.apache.velocity.properties</param-name>
            <param-value>/WEB-INF/velocity.properties</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>velocityServletTest</servlet-name>
        <url-pattern>/velocityServletTest</url-pattern>
    </servlet-mapping>
</web-app>

 

5.将其部署到tomcat下,页面访问
  http://localhost:8080/VelocityTest/velocityServletTest
  输出页面如下:

 Hello Velocity World! 欢迎您~~~~~~~~~~~~ 
 ID	姓名	地址
 1	张三	福建
 2	李四	湖南

 

分享到:
评论
2 楼 chenchudongsg 2015-07-02  
引用
[size=xx-small][/size]
1 楼 王雷震 2012-10-26  
你的这个程序有问题呀 !!!

相关推荐

    Velocity模板应用案例

    【Velocity模板应用案例】 Velocity是Apache软件基金会的一个开源项目,它是一个基于Java的模板引擎,用于生成动态内容。Velocity通过将逻辑与呈现分离,使得开发者可以专注于业务逻辑,而设计师可以自由地设计页面...

    Velocity模板入门DEMO

    Velocity模板语言(Velocity Template Language,简称VTL)是Apache软件基金会的Velocity项目中的一部分,它...通过深入学习和实践“Velocity模板入门DEMO”,你将能够更好地理解和应用Velocity,提升你的Web开发能力。

    velocity模板使用指南中文版

    Velocity 是一种流行的模板引擎,广泛应用于Java 和 .Net 平台。它提供了一个灵活、可扩展的模板语言,能够根据需要生成动态内容。本文档是 Velocity 模板使用指南中文版,旨在帮助开发人员快速掌握 Velocity 的...

    Velocity模板技术

    在给定的示例中,我们看到了一个简单的Velocity模板应用实例。下面将详细解析其中的关键知识点: 1. **Velocity模板语法**: - `$`符号:在Velocity中,`$`符号用于访问变量或调用方法。例如,`$kk.id`表示访问`kk...

    Velocity模板引擎技术在Java Web中的应用.pdf

    "Velocity模板引擎技术在Java Web中的应用" Velocity模板引擎技术是Java Web开发中的一种重要技术,旨在解决Java Web页面视图和业务逻辑的耦合问题。通过使用Velocity模板引擎技术,可以将Java Web页面视图和业务...

    Velocity模板使用指南中文版

    ** Velocity 模板使用指南中文版 ** Velocity 是一个基于 Java 的开源模板引擎,它允许开发者将业务逻辑与页面展示分离,使得网页设计者可以专注于页面的布局和样式,而程序员则关注于程序的逻辑处理。Velocity 在 ...

    Velocity模板解析

    Velocity模板的主要目标是将业务逻辑与显示逻辑分离,让开发者专注于内容的展示,而不用关心页面布局和设计。 Velocity的工作原理基于模板语言和Java对象的结合。在模板中,开发者可以使用特定的指令(如#set、#if...

    SpringBoot集成Mybatis,velocity模板展示数据

    本项目主要探讨的是如何将SpringBoot与Mybatis、Velocity模板引擎进行整合,以便更高效地展示和处理数据。 首先,让我们深入了解SpringBoot的核心特性。SpringBoot的设计理念是“约定优于配置”,它内置了Tomcat...

    Velocity实现模板(详细步奏)

    Velocity 是一款开源的模板引擎,它为 Java 应用程序提供了灵活的模板处理能力,尤其适用于分离应用程序的表示层逻辑和业务逻辑。Velocity 提供了一种简单的模板语言(Velocity Template Language,VTL),使得非...

    SpringBoot集成Mybatis,velocity模板

    5. **使用Velocity模板**:创建Velocity模板文件(如`templates/email.vm`),然后在服务类中使用VelocityContext填充数据,并通过VelocityEngine渲染模板。 ```java // EmailService.java public void sendEmail...

    Velocity模板语言介绍

    ### Velocity模板语言介绍 #### 一、Velocity简介 Velocity是一种基于Java的模板引擎(template engine),它使得非技术背景的人员能够轻松地使用一种简洁的模板语言来引用由Java代码所定义的对象。这种特性使得...

    Struts2与Velocity模板

    Struts2 与 Velocity 模板 Velocity 是一种基于 JAVA 的模板引擎,开发人员使用...Velocity 模板引擎是一个功能强大且灵活的模板引擎,广泛应用于 Web 开发中,可以与 Struts2 框架集成,实现显示层与程序代码的分离。

    JavaScript模板引擎Velocity.js.zip

    Velocity.js 是velocity模板语法的javascript实现。Velocity 是基于Java的模板引擎,广泛应用在阿里集 体各个子公司。Velocity模板适用于大量模板使用的场景,支持复杂的逻辑运算,包含 基本数据类型、变量赋值和...

    使用了Struts结构和Velocity模板技术的BLOG

    本项目“使用了Struts结构和Velocity模板技术的BLOG”旨在演示如何结合这两种技术来创建一个功能完善的博客系统。 **Struts框架** Struts是一个基于MVC(Model-View-Controller)设计模式的Java Web框架。它为...

    Velocity_中文手册

    Velocity通过使用简单而功能强大的脚本语言——Velocity模板语言(Velocity Template Language,简称VTL)来实现这一点。VTL能够让开发者定义模板,模板中可以包含数据的占位符和控制结构。 Velocity在Web开发中...

    velocity学习文档

    1. **结合Servlets**: 如何与Servlet容器协同工作,将Velocity模板应用于HTTP请求的响应。 2. **MVC架构**: 理解如何在MVC模式下使用Velocity,以及它与Spring、Struts等框架的集成。 3. **Web上下文**: 与Web应用...

    测试模板Velocity.docx

    Velocity 模板语言和...Velocity 模板语言是一种灵活、高效的模板语言,广泛应用于文档自动化技术中。其优点包括灵活的模板设计、高效的数据插入和跨语言支持等,可以与其他技术集成,以实现文档的自动化生成和管理。

    SpringBoot Velocity 代码生成模板

    在Spring Boot项目中,使用Velocity模板引擎可以自定义生成代码,如Mapper、Mapper.xml、Service、Controller等。Mapper是数据库操作层,通常配合MyBatis框架使用;Mapper.xml包含SQL语句;Service是业务逻辑层,...

Global site tag (gtag.js) - Google Analytics