velocity-1.7學習筆記

Velocity是由Apache軟件組織提供的一項開放源碼項目,它是一個基於Java的模板引擎。
經過Velocity模板語言(Velocity Template Language,VTL)定義模板(Template),而且在模板中不包含任何Java程序代碼。
Java開發人員編寫程序代碼來設置上下文(Context),它包含了用於填充模板的數據。
Velocity引擎可以把模板和上下文合併起來,生成相關內容。
Velocity是一種後臺代碼和前臺展現分離的一種設計。html

velocity由如下幾部分組成:前端

(1)指定runtime.log對應的日誌文件(可選),Velocity.init()中使用;
(2)建立模板文件。默認以.vm結尾(模板的內容也能夠寫在代碼中),由生成org.apache.velocity.Template對象的org.apache.velocity.app.Velocity.getTemplate(templateFile)使用; 
      Tips:模板文件要放在項目根目錄下,不然不能正常加載
(3)模板中須要使用的動態數據。存放在org.apache.velocity.VelocityContext對象中,VelocityContext中使用map存放數據;
(4)輸出最終生成的內容,javaapp和javaweb中不一樣java

java app中web

使用org.apache.velocity.Template.merge(...,context.., writer),這個方法有多個重載方法.其中writer是實現writer接口的io對象apache

            /*
             *  Now have the template engine process your template using the
             *  data placed into the context.  Think of it as a  'merge'
             *  of the template and the data to produce the output stream.
             */瀏覽器

javaweb中app

訪問servlet返回org.apache.velocity.Template對象,便可在瀏覽器中展現(能夠認爲是一個前端頁面,內容瀏覽器傳動解析)ide

 

其它:
使用log4j來輸出velocity的日誌:ui

import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.runtime.RuntimeConstants;
import org.apache.velocity.runtime.log.Log4JLogChute;
import org.apache.log4j.Logger;
import org.apache.log4j.BasicConfigurator;

/**
 *  Simple example class to show how to use an existing Log4j Logger
 *  as the Velocity logging target.
 */
public class Log4jLoggerExample
{
    public static String LOGGER_NAME = "velexample";

    public static void main( String args[] )
        throws Exception
    {
        /*
         *  configure log4j to log to console
         */
        BasicConfigurator.configure();

        Logger log = Logger.getLogger(LOGGER_NAME);

        log.info("Hello from Log4jLoggerExample - ready to start velocity");

        /*
         *  now create a new VelocityEngine instance, and
         *  configure it to use the logger
         */
        VelocityEngine ve = new VelocityEngine();

        ve.setProperty(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM_CLASS,
                       "org.apache.velocity.runtime.log.Log4JLogChute");

        ve.setProperty(Log4JLogChute.RUNTIME_LOG_LOG4J_LOGGER, LOGGER_NAME);

        ve.init();

        log.info("this should follow the initialization output from velocity");
    }
}
View Code

 

Velocity模板使用的賦值及流程控制語法:
VTL:
註釋:
單行註釋的前導符爲「##」;多行註釋則採用「#*」和「*#」符號

引用:
在VTL中有3種類型的引用:變量、屬性和方法
變量引用的簡略標記是由一個前導「$」字符後跟一個VTL標識符「Identifier」組成的。一個VTL標識符必須以一個字母開始(a...z或A...Z),剩下的字符將由如下類型的字符組成:
a.字母(a...z,A...Z)
b.數字(0...9)
c.連字符("-")
d.下劃線("_")
給變量賦值有兩種方法,
經過java代碼給Context賦值,而後由Velocity引擎將Context與Template結合;
經過#set指令給變量賦值;

正式引用符(Formal Reference Notation):示例 ${purchaseMoney}this

正式引用符多用在引用變量和普通文件直接鄰近的地方

當Velocity遇到一個未賦值的引用時,會直接輸出這個引用的名字。若是但願在沒有賦值時顯示空白,則能夠使用安靜引用符(Quiet Reference Notation)繞過Velocity的常規行爲,以達到但願的效果。安靜引符的前導字符爲「$!變量名」

 

1.變量定義

變量名的有效字符集:

$ [ ! ][ { ][ a..zA..Z ][ a..zA..Z0..9-_ ][ } ]

Examples:

  • 通常方式: $mud-Slinger_9
  • 靜態(輸出原始字面): $!mud-Slinger_9
  • 正規格式: ${mud-Slinger_9}

http://www.cnblogs.com/netcorner/archive/2008/07/11/2912125.html



Velocity中加載vm文件的三種方式

 
velocitypropertiespath
Velocity中加載vm文件的三種方式:
  
方式一:加載classpath目錄下的vm文件
Properties p =  new  Properties();
p.put( "file.resource.loader.class" ,
"org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader" );
Velocity.init(p);
...
Velocity.getTemplate(templateFile);
  
  
方式二:根據絕對路徑加載,vm文件置於硬盤某分區中,如:d: //tree.vm
Properties p =  new  Properties();
p.setProperty(VelocityEngine.FILE_RESOURCE_LOADER_PATH,  "d://" );
Velocity.init(p);
...
Velocity.getTemplate( "tree.vm" );
  
  
方式三:使用文本文件,如:velocity.properties,配置以下:
#encoding
input.encoding=UTF- 8
output.encoding=UTF- 8
contentType=text/html;charset=UTF- 8
不要指定loader.
 
  
再利用以下方式進行加載
Properties p =  new  Properties();
p.load( this .getClass().getResourceAsStream( "/velocity.properties" ));
Velocity.init(p);
...
Velocity.getTemplate(templateFile);
 
package  com.study.volicity;
 
import  java.io.IOException;
import  java.io.StringWriter;
import  java.util.Properties;
 
import  org.apache.velocity.app.Velocity;
import  org.apache.velocity.Template;
import  org.apache.velocity.VelocityContext;
 
public  class  Test {
     
 
     public  static  void  main(String args[])  throws  IOException {
 
         Properties pros =  new  Properties();
         pros.load(Test. class .getClassLoader().getResourceAsStream( "velocity.properties" ));
         Velocity.init(pros);
         VelocityContext context =  new  VelocityContext();
 
         context.put( "name" "Velocity" );
         context.put( "project" "Jakarta" );
 
         /* lets render a template 相對項目路徑 */
         Template template = Velocity.getTemplate( "/view/header.vm" );
 
         StringWriter writer =  new  StringWriter();
 
         /* lets make our own string to render */
         template.merge(context, writer);
         System.out.println(writer);
     }
 
}
 
http://www.cnblogs.com/c-abc/p/4829084.html
 

 

package velocity;

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

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.Properties;

/**
 * Created by 10159705 on 16-3-28.
 */
public class VelocityDemo {

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


        VelocityContext context = new VelocityContext();
        context.put("name", "VName");
        context.put("project", "JakProject");

        String path = VelocityDemo.class.getResource("/velocity/").getPath();//example2.vm
        System.out.println(path);
        Properties p = new Properties();
        p.setProperty(VelocityEngine.FILE_RESOURCE_LOADER_PATH, path);
        Velocity.init(p);


        Template template = Velocity.getTemplate("example2.xml", "GBK");
        Writer writer = new BufferedWriter(new FileWriter("result.xml"));
        template.merge(context, writer);
        writer.flush();
        writer.close();

    }
}

example2.xml

<?xml version="1.0" encoding="GB2312"?><root>Hello from ${name} in the $!project project.</root>
相關文章
相關標籤/搜索