初学velocity

     很久之前就已经听说过velocity,但是没有花些时间去认真了解它,由于现在自己要开发一个大的项目,在开发之前把过去的种种技术做一个回顾及加强.

 

     Velocity是一个开放源码的模版引擎,具体可以参考:http://jakarta.apache.org/velocity/index.html 了解Velocity的最新信息。 Velocity允许我们在模版中设定变量,然后在运行时,动态的将数据插入到模版中,替换这些变量.生成最终表现层页面.

 

跟学习其它技术一样,首先到官网去下载必要的包,下载地址:http://velocity.apache.org/download.cgi目前使用的是velocity 1.6.3,由于自己的E文水平一般,在使用之前也到网上搜索了相关文章,然后根据前辈们的指导和自己的实践结合.记录下此文,以便以后能快速回忆.

 

一、在eclipse 中新建一个工程,把包velocity-1.6.3.jar到在WEB-INF/lib下,

 

二、新建了一个hello.vm的测式模板

 

<html>
	<head></head>
	<body>
		HELLO! $name,Welcome to velocity!
	</body>
</html>
	

 

三、新建一个java属性文件 velocity.properties,参考了别人的配置示例,详细的说明以后再理解

 

#Velocity.properties配置示例 
# 如果需要系统从WEB-INF/classes路径加载Velocity的模板文件,取消下面两行的注释 
#resource.loader=class 
#class.resource.loader.class=org.apache.Velocity.runtime.resource.loader.ClasspathResourceLoader 
#如需禁止系统通过文件系统加载模板文件,注释如下两行 
resource.loader=file 
file.resource.loader.path=D:\Workspaces\MyEclipse 8.5\velocity\WebRoot\WEB-INF\velocityTempalte
#确定从何处加载velocity的模板文件 
file.resource.loader.cache=false 
#设置读取模板文件的解码格式,GB2312是为了支持中文 
input.encoding=gb2312 
#配置输出视图文件的解码格式,GB2312是为了支持中文 
output.encoding=gb2312 

 

 四、新建一个测式类VelocityTest.java

package velocity.test;

import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.io.StringWriter;

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

public class VelocityTest {

	public static void main(String[] args) {

		try {
			// 初始化
			Velocity.init("D:\\Workspaces\\MyEclipse 8.5\\velocity\\WebRoot\\WEB-INF\\velocity.properties");
			
			//取得velocity上下文
			VelocityContext context = new VelocityContext();
			context.put("name", "sea");
			
			Template template = Velocity.getTemplate("hello.vm");
			StringWriter writer = new StringWriter();			
			template.merge(context, writer);
			
			PrintWriter filewriter = new PrintWriter(new FileOutputStream("d:\\a.html"),true);
			filewriter.println(writer.toString());
			filewriter.close();

		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}

 

最后运行该类时出现如下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/collections/ExtendedProperties

 

发现缺少了集合包,把velicity.1.6.3解压后的lib目录下的commons-collections-3.2.1.jar拷入工程的lib目录下,继续运行,还是出现以后错误:

org.apache.velocity.exception.VelocityException: Failed to initialize an instance of org.apache.velocity.runtime.log.ServletLogChute with the current runtime configuration.
	at org.apache.velocity.runtime.log.LogManager.createLogChute(LogManager.java:206)
	at org.apache.velocity.runtime.log.LogManager.updateLog(LogManager.java:255)
	at org.apache.velocity.runtime.RuntimeInstance.initializeLog(RuntimeInstance.java:795)
	at org.apache.velocity.runtime.RuntimeInstance.init(RuntimeInstance.java:250)
	at org.apache.velocity.runtime.RuntimeInstance.init(RuntimeInstance.java:615)
	at org.apache.velocity.runtime.RuntimeSingleton.init(RuntimeSingleton.java:243)
	at org.apache.velocity.app.Velocity.init(Velocity.java:93)
	at velocity.test.VelocityTest.main(VelocityTest.java:17)
Caused by: java.lang.UnsupportedOperationException: Could not retrieve ServletContext from application attributes
	at org.apache.velocity.runtime.log.ServletLogChute.init(ServletLogChute.java:73)
	at org.apache.velocity.runtime.log.LogManager.createLogChute(LogManager.java:157)
	... 7 more

 最后分别把 commons-lang-2.4.jar和commons-logging-1.1.jar拷入lib目录才正常

 

输出d:\a.html下的文件如下

<html>
	<head></head>
	<body>
		HELLO! sea,Welcome to velocity!
	</body>
</html>
	

 

 

虽然是一个简单的应用,每个部份等深入了解之后,再继续纳入应用中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值