`
kodak_zhou
  • 浏览: 136744 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

(转)velocity模板路径

阅读更多
遇到的velocity加载模板时的路径问题。

于是查阅资料解决。最后综合velocity自己带的例子的example1和example2,改写了一个例子。怎样解决的在例子的注释中已经说的很明确。对于初学velocity的同志来说,这个例子可以是你参照学习的良好实例

Java代码 
/*
* 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();
        }
    }
}
分享到:
评论

相关推荐

    velocity模板路径

    **Velocity模板路径** Velocity是Apache软件基金会的一个开源项目,它是一个强大的模板引擎,常用于Java应用中的视图层,如Web应用、邮件服务等。Velocity通过简洁易读的模板语言,使得开发者可以将HTML页面与业务...

    Velocity模板解析

    - 可以通过VelocityConfigurer类配置Velocity引擎,比如设置模板路径、编码格式、缓存策略等。 - `Velocity.init()`初始化引擎,`Velocity.evaluate()`或`Velocity.mergeTemplate()`用于处理模板并生成输出。 4. ...

    Velocity模板使用指南中文版

    - **初始化**: Velocity 引擎加载配置,如模板路径、缓存策略等。 - **创建上下文**: 填充需要在模板中使用的数据。 - **合并模板**: 将上下文中的数据与模板结合,生成最终的 HTML 或其他格式的输出。 - **输出**: ...

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

    2. 配置Velocity,如设置模板路径、初始化参数等。 3. 在Spring Boot的配置类中,创建Velocity视图解析器,并注册到Spring容器中。 4. 在控制器中,创建ModelAndView对象,填充数据,然后指定Velocity模板文件名作为...

    SpringBoot集成Mybatis,velocity模板

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

    SpringBoot Velocity 代码生成模板

    集成Velocity到Spring Boot项目中,通常需要在配置文件(`application.properties`或`application.yml`)中添加Velocity的相关配置,如模板路径、缓存设置等。同时,还需要在代码中创建Velocity的上下文对象,并注入...

    velocity实现邮件模板定制

    5. **合并模板与数据**:使用`Velocity.mergeTemplate()`方法,传入模板文件路径和上下文,生成最终的邮件内容字符串。 6. **发送邮件**:将生成的邮件内容传递给邮件服务API,完成发送。 关于源码,Velocity的...

    Velocity模板邮件发送例子(Spring框架)(可通用,支持多扩展)

    这包括设置模板路径、编码、资源加载器等配置项,确保Spring能够正确地找到和处理Velocity模板。 ```xml &lt;bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer"&gt; ...

    Velocity模板引擎 v2.2.0.zip

    在Velocity模板中,开发者可以使用特定的指令(如#$或##)来插入Java代码片段,这些代码会被引擎解析并执行,然后将结果插入到模板的相应位置。这样,模板设计者可以专注于页面布局,而程序员则关注业务逻辑。 ...

    Velocity模板技术

    标题:Velocity模板技术 描述与知识点: Velocity模板技术是一种用于分离HTML、XML、PDF等文档的格式和数据的模板引擎。它广泛应用于Java Web开发中,尤其在MVC架构下,用于视图层的渲染。Velocity的核心优势在于...

    Java Velocity模板引擎,简单字符串生成

    Java Velocity模板引擎是一种基于Apache软件基金会的开源项目,用于生成动态内容。它是Java应用程序中用于创建HTML、XML、电子邮件等静态或动态文档的强大的模板语言和库。Velocity旨在将内容展示与业务逻辑分离,使...

    Velocity用户手册 中文版

    ** Velocity 模板引擎概述 ** Velocity 是一个开源的Java模板引擎,它允许开发者将HTML、XML或者其他格式的文档与应用程序逻辑分离。Velocity 提供了一种简单但强大的模板语言,使得开发者可以专注于页面布局和设计...

    velocity模板访问

    在J2EE应用开发中, Velocity模板通常被打包在JAR文件中以便于部署。然而,默认情况下,Velocity会从操作系统的文件系统中读取模板文件,采用`FileResourceLoader`作为资源加载器。 为了使Velocity能够从类路径...

    velocity入门使用教程

    Velocity模板语言(Velocity Template Language,简称VTL)是Velocity的核心,它提供了一种简单但功能强大的模板语言,允许用户通过模板文件引用Java对象属性,结合数据模型动态生成内容。 在本教程中,我们将介绍...

    velocity文档(Velocity1.4java开发指南中文版,Velocity1.4模板使用指南中文版中文版)

    Velocity 是一个开源的 Java 模板引擎,它允许开发者将静态页面内容与动态数据分离,使得开发者可以专注于业务逻辑,而设计师则可以专心于页面设计。Velocity1.4 是该引擎的一个版本,发布于较早时期,但其基本原理...

    velocity(eclipse插件)

    这个插件提供了对Velocity模板语言(VTL)的语法高亮、代码提示、错误检查等功能,极大地提升了开发效率。 **一、安装与配置** 1. **下载与安装**: 可以从Eclipse Marketplace或官方站点下载Velocity插件。在...

    92.Spring Boot使用模板velocity【从零开始学Spring Boot】

    在`application.properties`或`application.yml`中,可以设置Velocity的相关属性,如模板路径、编码等: ```properties # application.properties 示例 spring.velocity.properties.resource.loader=class ...

    模板引擎 Velocity

    你可以配置 VelocityEngine 来指定模板路径、缓存策略等。 4. **`Parser`**:解析模板文件,生成 AST。解析过程包括词法分析和语法分析。 5. **`RuntimeServices`**:提供运行时的配置和服务,如日志、资源管理等...

    struts2Velocity.zip_velocity

    可以通过`&lt;velocity&gt;`标签在Struts2配置文件中自定义模板路径。 3. **Velocity模板语法**:Velocity模板语言是一种非侵入性的脚本语言,其语法简洁。例如,`$variable`用于引用Java对象,`#if`, `#else`, `#end`...

Global site tag (gtag.js) - Google Analytics