Velocity模板语言VTL
2019獨角獸企業(yè)重金招聘Python工程師標準>>>
Velocity是Apache軟件組織提供的一想開源源碼項目,可前往Apache Velocity Project下載。它是基于Java的模板引擎,主要用于簡化Web應用開發(fā)。網(wǎng)頁設計者可以通過Velocity模板語言定義模板,開發(fā)者編寫程序代碼設置上下文,Velocity引擎負責結合模板和上下文,以此生成動態(tài)網(wǎng)頁。很明顯,Velocity可將Java代碼從Web頁面中分離出來,是Web站點在長時間運行后仍然有很好的維護性。視圖VTL模板語言不用經(jīng)過JSP編譯器的編譯,VTL模板的解析是由Velocity引擎來完成的。特別需要注意的是,若擴展VelocityServlet,將被提示the type VelocityServlet is deprecated,如下圖所示:
。API文檔中寫道,This servlet has been replaced by VelocityViewServlet, available from the Velocity-Tools sub-project. ?VelocityViewServlet provides support for quick, clean MVC web development. VelocityServlet will be removed in a future version of Velocity.于是,我去擴展VelocityViewServlet,引用的時候,發(fā)現(xiàn)
,頓時感覺Velocity API文檔在逗我。我進入VelocityViewServlet源碼中發(fā)現(xiàn),原來注釋中有告訴我們,已經(jīng)被移動到org.apache.velocity.tools.view.VelocityViewServlet中,部分源碼如下圖所示:
Velocity實例1
???新建文件myvelocity.vm,具體內(nèi)容如下:?
##author:?DJM #set($jianming="king") Welcome?$djm?to?Velocity! Today?is?$date. djm?is?$jianming.?? ? ?創(chuàng)建簡單的類MyVelocity,代碼如下:?
package?com.jianming;import?java.io.StringWriter; import?java.util.Date;import?org.apache.velocity.Template; import?org.apache.velocity.VelocityContext; import?org.apache.velocity.app.VelocityEngine;public?class?MyVelocity?{public?static?void?main(String[]?args)?{//?初始化并取得Velocity引擎VelocityEngine?ve?=?new?VelocityEngine();ve.init();//?取得velocity的模版Template?template?=?ve.getTemplate("src/com/jianming/myvelocity.vm");//?取得velocity的上下文contextVelocityContext?context?=?new?VelocityContext();context.put("djm",?"DengJianming");context.put("date",?new?Date());StringWriter?sw?=?new?StringWriter();template.merge(context,?sw);System.out.println(sw.toString());} }運行之后的結果如下圖所示:
????????
Velocity實例2
??? 在WEB-INF目錄下創(chuàng)建屬性文件velocity.properties和vm目錄,并在vm目錄中創(chuàng)建模板文件myvelocity.vm和。
?? velocity.properties文件的內(nèi)容為:
resource.loader?=?webapp?? webapp.resource.loader.class?=?org.apache.velocity.tools.view.servlet.WebappLoader webapp.resource.loader.path=/WEB-INF/vm/?? input.encoding=utf-8 output.encoding=utf-8?? myvelocity.vm文件的內(nèi)容為:
##author:?DJM <html><head><title>$djm</title></head><body?bgcolor="#ffffff"><h2>$djm</h2><hr>#set($jianming="king")Welcome?$djm?to?Velocity!<hr>Today?is?<font?color="#E10300">$date.</font><hr>djm?is?$jianming.<hr></body> </html>????
?? 編寫MyVelocity類,源碼如下:
package?com.threeeyes.djm;import?java.util.Date;import?javax.servlet.http.HttpServletRequest; import?javax.servlet.http.HttpServletResponse;import?org.apache.velocity.Template; import?org.apache.velocity.context.Context; import?org.apache.velocity.tools.view.VelocityViewServlet;public?class?MyVelocity?extends?VelocityViewServlet?{private?static?final?long?serialVersionUID?=?8439995475770991915L;@Overrideprotected?Template?handleRequest(HttpServletRequest?request,HttpServletResponse?response,?Context?ctx)?{ctx.put("djm",?"ZhaoXue");ctx.put("date",?new?Date());return?getTemplate("myvelocity.vm");}@Overrideprotected?void?setContentType(HttpServletRequest?request,HttpServletResponse?response)?{response.setContentType("text/html;?charset=utf-8");}}? 在web.xml文件中添加如下配置:
<servlet><servlet-name>myVelocity</servlet-name><servlet-class>com.threeeyes.djm.MyVelocity</servlet-class><init-param><param-name>org.apache.velocity.properties</param-name><param-value>/WEB-INF/velocity.properties</param-value></init-param> </servlet> <servlet-mapping><servlet-name>myVelocity</servlet-name><url-pattern>/myVelocity</url-pattern> </servlet-mapping>部署到tomcat之后,運行程序顯示結果如下:
Velocity注釋
????????VTL中,單行注釋采用"##",對于多行注釋采用"#*"和"*#"符號。? ? ??
Velocity指令
????????#set指令
????????#set指令用來為引用變量或者引用屬性賦值,比如:????
????????#set($djm="dengjianming")
????? ? 賦值表達式的左邊必須是一個變量引用或者屬性引用,右邊可以是變量引用($djm)、字符串("zhaoxue")、屬性引用($MyWife.name)、方法引用($djm.merge($condition))、數(shù)字(200)、數(shù)組({"deng", "jian", "ming"})、簡單的算術表達式。
????????字面字符串
?????????當使用#set指令時,在雙引號中的字面字符串將被解析。在單引號中的字面字符串將不被解析。
????????#if指令
????? ? 當#if指令的IF條件為真時,Velocity將輸出#if代碼塊包含的文本,比如,
?????????#if($flag)
????????????????<h1>少說話,多生娃</h1>
???????? #end
????????當$flag是一個邏輯類型為true的變量或者$flag值為非空的情況下,if才為真。當$flag是一個邏輯類型為flase的變量或者$flag的值為null,if才為假。
????????在#if語句后可包含#elseif和#else項。
?
????????? ?
????????
????????
轉(zhuǎn)載于:https://my.oschina.net/dengjianming/blog/404446
總結
以上是生活随笔為你收集整理的Velocity模板语言VTL的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大数据时代的10个重大变化(长篇神文)
- 下一篇: 什么是 RPA?