Struts 雖好地實踐了 MVC,但 View 層仍依賴 Taglib,前端設計師若不懂 Struts 標簽,協作開發極其痛苦。Velocity 作為純模板引擎,專注 Model 與 View 的橋梁,讓模板僅包含簡單的 VTL(Velocity Template Language),徹底剝離 Java 代碼,極大降低前後端耦合。
.vm 文件,類 HTML,含 VTL 指令($variable、#if、#foreach…)VelocityContext,攜帶 Java 對象數據VelocityEngine,合併模板與 Context 輸出結果hellovelocity.vmWelcome $name to Javayou.com!
today is $date.
VelocityEngine ve = new VelocityEngine();
ve.init();
Template t = ve.getTemplate("hellovelocity.vm");
VelocityContext context = new VelocityContext();
context.put("name", "Liang");
context.put("date", new Date().toString());
StringWriter writer = new StringWriter();
t.merge(context, writer);
System.out.println(writer.toString());
Welcome Liang to Javayou.com!
today is Tue Dec 14 19:26:37 CST 2004.
#set( $iAmVariable = "good!" )
$iAmVariable // 輸出 good!
#set( $admin = "admin" )
#set( $user = "user" )
#if( $admin == $user )
Welcome admin!
#else
Welcome user!
#end
#foreach( $product in $list )
$product
#end
#foreach( $key in $hashVariable.keySet() )
$key 's value: $hashVariable.get($key)
#end
$student.No // 相當於 student.getNo() 或 student.get("No")
$student.Address // 相當於 student.getAddress() 或 student.get("Address")
#foreach( $element in $list )
#foreach( $element in $list )
This is $element. $velocityCount
#end
-- outer --
This is $element. $velocityCount
#end
$velocityCount 從 1 起算,可在 Velocity.properties 改為 0 起算。
| 模式 | View 層技術 | Java 代碼滲入 | 前後端協作 | 性能 |
|---|---|---|---|---|
| JSP + JavaBean | JSP | 大量 | 困難 | 基準 |
| Struts (Servlet + JSP) | JSP + Taglib | 少量 | 需懂 Taglib | 稍低 |
| Servlet + JavaBean + Velocity | .vm | 零 | 極簡 | 略高 |
getTemplate(template, encoding),但實際項目推薦用 MessageTool($text.get('key'))Velocity 以極簡的 VTL 實現徹底的關注點分離,是「Servlet + JavaBean + Velocity」模式的核心。對追求前後端並行開發、維護性與性能的項目,它是 JSP/Taglib 的優秀替代者。