- 浏览: 469285 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
mrshen:
很棒,在其他大神的博客上理清了思路看懂之后,来lz这里用例子学 ...
RED-BLACK(红黑)树的实现TreeMap源码阅读 -
a939639017:
yanf4j check不下来 ?
Java nio 2.0 AIO -
hellostory:
又是抄来的 - -
mysql分表方案 -
davidluoye:
为什么不说下支持的数据库呢?
模糊查询的优化 -
oliveevilo:
表示没看懂
Synchronized和java.util.concurrent.locks.Lock的区别
遇到的velocity加载模板时的路径问题。
于是查阅资料解决。最后综合velocity自己带的例子的example1和example2,改写了一个例子。怎样解决的在例子的注释中已经说的很明确。对于初学velocity的同志来说,这个例子可以是你参照学习的良好实例
- /*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
- import java.io.BufferedWriter;
- import java.io.OutputStreamWriter;
- import java.io.StringWriter;
- import java.util.ArrayList;
- import java.util.Properties;
- import org.apache.velocity.Template;
- import org.apache.velocity.VelocityContext;
- import org.apache.velocity.app.Velocity;
- import org.apache.velocity.app.VelocityEngine;
- import org.apache.velocity.exception.MethodInvocationException;
- import org.apache.velocity.exception.ParseErrorException;
- /**
- * This class is a simple demonstration of how the Velocity Template Engine
- * can be used in a standalone application using the Velocity utility class.
- *
- * It demonstrates two of the 'helper' methods found in the org.apache.velocity.util.Velocity
- * class, mergeTemplate() and evaluate().
- *
- *
- * @author <a href="mailto:geirm@optonline.net">Geir Magnusson Jr.</a>
- * @version $Id: Example2.java 463298 2006-10-12 16:10:32Z henning $
- */
- public class Example2
- {
- public static ArrayList getNames()
- {
- ArrayList list = new ArrayList();
- list.add("ArrayList element 1" );
- list.add("ArrayList element 2" );
- list.add("ArrayList element 3" );
- list.add("ArrayList element 4" );
- return list;
- }
- public static void main( String args[] )
- {
- /* first, we init the runtime engine. Defaults are fine. */
- Properties p = new Properties();
- //设置输入输出编码类型。和这次说的解决的问题无关
- p.setProperty(Velocity.INPUT_ENCODING, "UTF-8" );
- p.setProperty(Velocity.OUTPUT_ENCODING, "UTF-8" );
- //这里加载类路径里的模板而不是文件系统路径里的模板
- p.setProperty("file.resource.loader.class" , "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader" );
- //也可以用下面方法指定一个绝对路径,不过这样要求你所有的模板都放在该路径下,是有局限的
- //p.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, "模板路径");
- try
- {
- Velocity.init(p);
- }
- catch (Exception e)
- {
- System.out.println("Problem initializing Velocity : " + e );
- return ;
- }
- /* lets make a Context and put data into it */
- VelocityContext context = new VelocityContext();
- context.put("name" , "Velocity" );
- context.put("project" , "阿帕奇" );
- context.put("list" , getNames());
- /* lets render a template */
- StringWriter w = new StringWriter();
- try
- {
- Velocity.mergeTemplate("example2.vm" , "UTF-8" , context, w );
- }
- catch (Exception e )
- {
- System.out.println("Problem merging template : " + e );
- }
- System.out.println(" template : " + w );
- /*
- * lets dynamically 'create' our template
- * and use the evaluate() method to render it
- */
- //这个例子也同时告诉我们可以先从文件系统读取一个文件到字符串,然后进行我们想要的操作
- String s = "We are using $project $name to render this." ;
- w = new StringWriter();
- try
- {
- Velocity.evaluate( context, w, "mystring" , s );
- }
- catch ( ParseErrorException pee )
- {
- /*
- * thrown if something is wrong with the
- * syntax of our template string
- */
- System.out.println("ParseErrorException : " + pee );
- }
- catch ( MethodInvocationException mee )
- {
- /*
- * thrown if a method of a reference
- * called by the template
- * throws an exception. That won't happen here
- * as we aren't calling any methods in this
- * example, but we have to catch them anyway
- */
- System.out.println("MethodInvocationException : " + mee );
- }
- catch ( Exception e )
- {
- System.out.println("Exception : " + e );
- }
- System.out.println(" string : " + w );
- ///////////////////////////////////////////////////////
- //其他方法: 1分别指定路径,此方法可以设定不同的路径 (也可是相对的。在eclipse下是工程目录)
- try {
- VelocityEngine velocityEngine = new VelocityEngine();
- Properties properties = new Properties();
- //也可以在这里指定绝对路径。当指定相对路径时, 在不同的环境下是有区别的。
- //比如把程序部署到tomcat以后,相对路径相对到哪里是个很恶心的事情。
- String basePath = "vm" ;
- //可设置绝对路径
- //String basePath = "F:/";
- properties.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, basePath);
- velocityEngine.init(properties);
- Template template = velocityEngine.getTemplate("example2.vm" );
- BufferedWriter writer = new BufferedWriter(
- new OutputStreamWriter(System.out));
- template.merge(context, writer);
- writer.flush();
- writer.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import java.io.BufferedWriter; import java.io.OutputStreamWriter; import java.io.StringWriter; import java.util.ArrayList; import java.util.Properties; import org.apache.velocity.Template; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; import org.apache.velocity.app.VelocityEngine; import org.apache.velocity.exception.MethodInvocationException; import org.apache.velocity.exception.ParseErrorException; /** * This class is a simple demonstration of how the Velocity Template Engine * can be used in a standalone application using the Velocity utility class. * * It demonstrates two of the 'helper' methods found in the org.apache.velocity.util.Velocity * class, mergeTemplate() and evaluate(). * * * @author <a href="mailto:geirm@optonline.net">Geir Magnusson Jr.</a> * @version $Id: Example2.java 463298 2006-10-12 16:10:32Z henning $ */ public class Example2 { public static ArrayList getNames() { ArrayList list = new ArrayList(); list.add("ArrayList element 1"); list.add("ArrayList element 2"); list.add("ArrayList element 3"); list.add("ArrayList element 4"); return list; } public static void main( String args[] ) { /* first, we init the runtime engine. Defaults are fine. */ Properties p = new Properties(); //设置输入输出编码类型。和这次说的解决的问题无关 p.setProperty(Velocity.INPUT_ENCODING, "UTF-8"); p.setProperty(Velocity.OUTPUT_ENCODING, "UTF-8"); //这里加载类路径里的模板而不是文件系统路径里的模板 p.setProperty("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); //也可以用下面方法指定一个绝对路径,不过这样要求你所有的模板都放在该路径下,是有局限的 //p.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, "模板路径"); try { Velocity.init(p); } catch(Exception e) { System.out.println("Problem initializing Velocity : " + e ); return; } /* lets make a Context and put data into it */ VelocityContext context = new VelocityContext(); context.put("name", "Velocity"); context.put("project", "阿帕奇"); context.put("list", getNames()); /* lets render a template */ StringWriter w = new StringWriter(); try { Velocity.mergeTemplate("example2.vm", "UTF-8", context, w ); } catch (Exception e ) { System.out.println("Problem merging template : " + e ); } System.out.println(" template : " + w ); /* * lets dynamically 'create' our template * and use the evaluate() method to render it */ //这个例子也同时告诉我们可以先从文件系统读取一个文件到字符串,然后进行我们想要的操作 String s = "We are using $project $name to render this."; w = new StringWriter(); try { Velocity.evaluate( context, w, "mystring", s ); } catch( ParseErrorException pee ) { /* * thrown if something is wrong with the * syntax of our template string */ System.out.println("ParseErrorException : " + pee ); } catch( MethodInvocationException mee ) { /* * thrown if a method of a reference * called by the template * throws an exception. That won't happen here * as we aren't calling any methods in this * example, but we have to catch them anyway */ System.out.println("MethodInvocationException : " + mee ); } catch( Exception e ) { System.out.println("Exception : " + e ); } System.out.println(" string : " + w ); /////////////////////////////////////////////////////// //其他方法: 1分别指定路径,此方法可以设定不同的路径 (也可是相对的。在eclipse下是工程目录) try { VelocityEngine velocityEngine = new VelocityEngine(); Properties properties = new Properties(); //也可以在这里指定绝对路径。当指定相对路径时, 在不同的环境下是有区别的。 //比如把程序部署到tomcat以后,相对路径相对到哪里是个很恶心的事情。 String basePath = "vm"; //可设置绝对路径 //String basePath = "F:/"; properties.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, basePath); velocityEngine.init(properties); Template template = velocityEngine.getTemplate("example2.vm"); BufferedWriter writer = new BufferedWriter( new OutputStreamWriter(System.out)); template.merge(context, writer); writer.flush(); writer.close(); } catch (Exception e) { e.printStackTrace(); } } }
# Properties p = new Properties();
# //设置输入输出编码类型。和这次说的解决的问题无关
# p.setProperty(Velocity.INPUT_ENCODING, "UTF-8");
# p.setProperty(Velocity.OUTPUT_ENCODING, "UTF-8");
# //这里加载类路径里的模板而不是文件系统路径里的模板
# p.setProperty("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
就这几个参数,花了半个小时才把类路径连上.多谢楼主了.
发表评论
-
Integer“==”和Integer“equals”
2013-09-01 12:37 1280以前有碰到Integer“==”和Integer“eq ... -
java枚举类型enum的使用
2013-08-07 09:57 8996分类: java2011-04-24 23:17 6 ... -
线上TOMCAT,JAVA参数配置
2013-06-08 11:57 1355export JAVA_HOME=/export/serve ... -
HttpUrlConnection不能设置Host
2013-06-05 18:01 2768调试了一天终于找到原因了,奶奶的!! 测试就报503错误, ... -
Java访问https接口实现
2013-03-05 22:06 4790用两种方式分别实现了,第一种是jdk原生的,代码稍微多点, ... -
深入理解HASHMAP
2013-01-06 11:48 1073Hashmap是一种非常常用的、应用广泛的数据类型,最近研究到 ... -
Commons-Validator验证框架2
2012-11-29 14:00 1428Commons-Validator 博客分类: java ... -
java concurrent 探秘
2012-08-06 16:44 897我们都知道,在JDK1.5 ... -
ReentrantLock与syncronized的不同
2012-08-06 14:22 1171ReentrantLock 一个可重入的互斥锁定 ... -
log4j 日志大小
2012-08-03 17:47 1923今天群里一个哥们问一个问题: 我想先控制每天日 ... -
Apache Commons 包含的开源的工具类介绍
2012-07-24 10:17 1263原文地址:http://blog.csdn.n ... -
JAVA工具类之Apache的Commons Lang和Beanutils
2012-07-24 10:09 1425Apache Commons包估计是Java中使用最广发的工具 ... -
批处理启动JAVA程序(多JAR包)
2012-06-16 11:01 2280JavaJVMF# . 直接给出代码吧,下面是我自己为一个端口 ... -
中高级技术人员面试
2012-08-06 14:23 1362struts,spring,hiberate知识点。实际上对于 ... -
IO深度解析
2011-11-04 15:49 1157http://www.ibm.com/developerwor ... -
线程局部存储Thread Local Storage-TLS(总结整理)
2011-10-27 18:18 1783在线程的学习中我们知道每个线程除了共享进程的资源外还拥有各 ... -
正确理解ThreadLocal
2011-10-27 18:17 894http://www.iteye.com/topic/1038 ... -
读源码的建议
2011-10-11 22:01 1378才在论坛不经意间,看到有关源码阅读的帖子。回想自己前几年,阅读 ... -
java synchronized详解
2011-09-02 13:53 922Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候 ... -
开发中的陷阱
2011-09-02 09:58 9311. 虚拟机对字符串的处理 虚拟机是将字符串直 ...
相关推荐
- **初始化**: Velocity 引擎加载配置,如模板路径、缓存策略等。 - **创建上下文**: 填充需要在模板中使用的数据。 - **合并模板**: 将上下文中的数据与模板结合,生成最终的 HTML 或其他格式的输出。 - **输出**: ...
Velocity模板的主要目标是将业务逻辑与显示逻辑分离,让开发者专注于内容的展示,而不用关心页面布局和设计。 Velocity的工作原理基于模板语言和Java对象的结合。在模板中,开发者可以使用特定的指令(如#set、#if...
在Spring Boot项目中,使用Velocity模板引擎可以自定义生成代码,如Mapper、Mapper.xml、Service、Controller等。Mapper是数据库操作层,通常配合MyBatis框架使用;Mapper.xml包含SQL语句;Service是业务逻辑层,...
本项目主要探讨的是如何将SpringBoot与Mybatis、Velocity模板引擎进行整合,以便更高效地展示和处理数据。 首先,让我们深入了解SpringBoot的核心特性。SpringBoot的设计理念是“约定优于配置”,它内置了Tomcat...
5. **使用Velocity模板**:创建Velocity模板文件(如`templates/email.vm`),然后在服务类中使用VelocityContext填充数据,并通过VelocityEngine渲染模板。 ```java // EmailService.java public void sendEmail...
5. **合并模板与数据**:使用`Velocity.mergeTemplate()`方法,传入模板文件路径和上下文,生成最终的邮件内容字符串。 6. **发送邮件**:将生成的邮件内容传递给邮件服务API,完成发送。 关于源码,Velocity的...
这包括设置模板路径、编码、资源加载器等配置项,确保Spring能够正确地找到和处理Velocity模板。 ```xml <bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer"> ...
Velocity模板语言(Velocity Template Language,简称VTL)是Velocity的核心,它提供了一种简单但功能强大的模板语言,允许用户通过模板文件引用Java对象属性,结合数据模型动态生成内容。 在本教程中,我们将介绍...
在Velocity模板中,开发者可以使用特定的指令(如#$或##)来插入Java代码片段,这些代码会被引擎解析并执行,然后将结果插入到模板的相应位置。这样,模板设计者可以专注于页面布局,而程序员则关注业务逻辑。 ...
Velocity 是一个开源的 Java 模板引擎,它允许开发者将静态页面内容与动态数据分离,使得开发者可以专注于业务逻辑,而设计师则可以专心于页面设计。Velocity1.4 是该引擎的一个版本,发布于较早时期,但其基本原理...
`VelocityWebEdit-1.0.8.zip`这个插件是针对Velocity模板的Eclipse扩展,它可以提供 Velocity模板的语法高亮、代码提示、代码格式化等功能,帮助开发者更好地管理和调试Velocity模板文件(`.vm`)。 Eclipse插件的...
这个插件提供了对Velocity模板语言(VTL)的语法高亮、代码提示、错误检查等功能,极大地提升了开发效率。 **一、安装与配置** 1. **下载与安装**: 可以从Eclipse Marketplace或官方站点下载Velocity插件。在...
** Velocity 模板引擎概述 ** Velocity 是一个开源的Java模板引擎,它允许开发者将HTML、XML或者其他格式的文档与应用程序逻辑分离。Velocity 提供了一种简单但强大的模板语言,使得开发者可以专注于页面布局和设计...
在Struts 1.x版本中,视图通常由JSP页面来实现,但也可以使用Velocity模板来替代,因为Velocity提供了更简洁的语法和更好的性能。 在集成Velocity之前,我们需要确保我们的环境已经配置了Struts 1.x和Velocity。这...
在实际使用中,开发者需要将这些JAR文件添加到项目的类路径中,然后可以通过创建VelocityContext对象,填充数据,最后使用Velocity Engine渲染模板。这整个过程是完全独立于具体的服务器环境的,使得Velocity成为一...
例如,你可以定义一个Velocity模板,其中包含固定的文字格式和占位符,然后用实际的数据替换这些占位符,生成最终的文档。 接下来,我们需要引入Itext库。Itext提供了丰富的API,可以用来创建PDF文档,设置字体、...
标题:Velocity模板技术 描述与知识点: Velocity模板技术是一种用于分离HTML、XML、PDF等文档的格式和数据的模板引擎。它广泛应用于Java Web开发中,尤其在MVC架构下,用于视图层的渲染。Velocity的核心优势在于...
这个文件提供了对Velocity模板语言(VTL)的支持,使得开发者能够用简单的文本格式定义动态内容,并在运行时用Java对象的数据填充这些模板。 其次,`velocity-tools.jar`是Velocity Tools项目的一部分,它提供了...
Velocity模板语言是一种标记语言,用于描述如何在模板中插入动态内容。VTL的语法简洁,主要包括以下几个关键概念: - `${}`:这是Velocity中的变量引用符号,用于插入Java对象的属性值。 - `#set()`:用于设置变量...