http://velocity.apache.org/
簡單來說就是通過html文件定義模板,模板中含有操作語句和變量定義,然後通過java程序對模板中的參數進行修改。
【轉載】
使用Velocity作爲頁面顯示層是常見的,作爲模版形式出現,可能用的不一定多,至少現在我只用過幾次,下面也是以前找到的一篇文章,舉例說明了Velocity作爲模版的用法,還是很實用的!
通常,Velocity模板的文件後綴是“.vm”。下面我們要創建一個hellovelocity.vm模板文件,雖然很簡單,但足以證明 Velocity模板引擎是否正確安裝(其實就是定義好engin並import org.apache相關的源文件),也足以顯示出Velocity模板分離內容及其表現方式的一般過程。把下面這行代碼加入 hellovelocity.vm模板。
Hello $name, this is Velocity working!
保存hellovelocity.vm模板,然後再新建一個HelloVelocity.java文件,這兩個文件最好放入同一目錄下。下面是HelloVelocity.java的代碼,它顯示了在Java程序中調用Velocity模板引擎的一般過程。
(例1)
import java.io.StringWriter;
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 {
/* 首先創建一個模板引擎的實例,並予以初始化 */
VelocityEngine engine = new VelocityEngine();
engine.init();
/* 接着,獲得一個模板 */
Template template = engine.getTemplate( "hellovelocity.vm" );
/* 創建上下文,填充數據 */
VelocityContext context = new VelocityContext();
context.put("name", "World");
/* 現在,把模板和數據合併,輸出到StringWriter */
StringWriter writer = new StringWriter();
template.merge( context, writer );
/* 顯示結果 */
System.out.println( writer.toString() );
}
}
準備好兩個文件後,編譯Java文件並運行。如果一切順利的話,你可以看到下面的輸出:
Hello World, this is Velocity working!
(例2)
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
public class HelloVelocity {
public static void main(String[] args) throws Exception {
Velocity.init();
VelocityContext context = new VelocityContext();
//string
context.put("name", "dreamhead");
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
Template template = Velocity.getTemplate("hello.vm");
template.merge(context, writer);
writer.flush();
writer.close();
}
}
我們可以把模板理解爲一個劇本,劇本設定了劇情和角色,比如上面的劇情就是對一個角色——name說“Hello”。鑑於name是一個角色,爲了 不與劇本中的內容混雜,我們編寫的時候需要加上一個“$”,以示區分。再好的劇本也需要表演出來,換句話說,角色要人來扮演,這些人共同按照劇本完成劇 情。在上面的例子中,最終扮演name角色的是“dreamhead”這個字符串,它完成劇情規定的任務,結果就是“Hello,dreamhead”。
在這個過程中,我們——程序員是導演,拿來劇本,找來演員,規定各自的角色,一起看看我們如何完成這個指導過程吧!
在一切就緒之前,我們先要做一些準備性的工作:
Velocity.init();
然後是分配角色,不過,爲了防止死無對證,我們需要記錄分配結果,這是VelocityContext的強項:
VelocityContext context = new VelocityContext();
開始分配角色了,"dreamhead"扮演的角色是name:
context.put("name", "dreamhead");
人員就位,準備開始拍攝了!怎麼拍呢?當然是用攝影機拍,最終存放在膠片上了,準備膠片:
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
沒有劇本我拿拍什麼啊?劇本、劇本……
Template template = Velocity.getTemplate("hello.vm");
對了,演員要看一下劇本的:
template.merge(context, writer);
各部門準備,action!
writer.flush();
cut!
writer.close();
一個緊張而忙碌的拍攝過程就這樣完成了,雖然從拍攝的過程來看,我們顯得手忙腳亂,但結果還是比較理想的,因爲我們熟悉的“Hello”出現在了我 們的面前。模板的威力就在於,相同的劇本可以由不同的演員進行自己的詮釋。也許嘗試用自己的名字重新演繹Hello的傳說,你就能體會到這一點了。