小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Struts 與 Velocity 的集成1 - Coolingverse 專欄 - CS...

 nbtymm 2006-10-31
Struts Recipes 的合著者 George Franciscus 帶您一步步地把 Velocity 模板引擎集成進(jìn) Struts 應(yīng)用程序。結(jié)果是一個快速、靈活的 JSP 替代物,同時帶有希望從 Struts 得到的所有方便。

Java?? 服務(wù)器頁面(JSP)技術(shù)是如此普及,以至于人們忘記了在創(chuàng)建 Web 頁面時還有其他選擇。但是最近,有些開發(fā)人員已經(jīng)轉(zhuǎn)向模板引擎,以獲得在 JSP 中得不到的靈活性。雖然用 JSP 和模板引擎都可以把數(shù)據(jù)嵌入 HTML,但是每種技術(shù)都有自己的處理方式。Velocity 模板是一個特別流行的 JSP 替代品。Velocity 提供了平緩的學(xué)習(xí)曲線和巨大的易用性。開發(fā)人員喜歡它簡潔的語法,而且性能分析也證明它的性能超出 JSP。Velocity 也非常容易集成進(jìn) Struts 應(yīng)用程序。

在這篇文章中,我將介紹如何在 Struts 應(yīng)用程序中集成和使用 Velocity 模板引擎。我會首先提供一個公式,然后逐步展開它。生成的應(yīng)用程序組合了 Struts 和 Velocity —— 一個第一流的組合,可能會讓您懷疑自己對 JSP 的忠誠!

請參閱 下載 一節(jié),在開始之前下載這篇文章的源代碼,以及 Struts、Velocity 和 Velocity 工具包。請注意,本文假設(shè)您熟悉使用 Struts 框架進(jìn)行 MVC 編程。

關(guān)于模板引擎

在開始集成 Struts 和 Velocity 的簡單任務(wù)之前,讓我們先確保您理解模板引擎和它們在視圖生成中的角色。模板引擎作為整體概念,Velocity 作為具體實現(xiàn),它們的生命在 HTML 之外。Velocity 把數(shù)據(jù)合并到文本主體中不同的點上。文本可以是文字、電子郵件或 HTML。由于采用這種方式,Velocity 模板引擎有點兒像 Microsoft Word 的“郵件合并”特性。郵件合并允許您方便地把動態(tài)數(shù)據(jù)(例如姓名、地址和電話號碼)合并到信件中。在早期的日子里,組織用這項特性生成大型郵件列表并把它們送到郵局,導(dǎo)致垃圾郵件的產(chǎn)生!
    
Velocity 是什么?

Velocity 是一個基于 Java 的模板引擎,它提供了簡單的基于模板的語言,可以用類似腳本的方式引用對象。Velocity 促進(jìn)了分離團(tuán)隊成員之間的責(zé)任:允許 Web 設(shè)計人員專注于視圖(即頁面的觀感),而 Java 程序員專注于后端代碼。把 Java 代碼從頁面布局中分離出來,會讓 Web 應(yīng)用程序未來更易維護(hù)。當(dāng) Velocity 與 Sruts 這樣的 MVC 框架結(jié)合時,就成了 JSP 或 PHP 可行的替代。

在 Web 應(yīng)用程序中,Velocity 實現(xiàn)的目標(biāo)與 JSP 相同:可以用它在向 HttpServletResponse 的 OutputStream 發(fā)送之前生成要發(fā)送的 HTML。在 Struts 應(yīng)用程序中使用 Velocity 的一種方式是在 Struts 的 Action 內(nèi)部寫入響應(yīng),然后返回 null 的 ActionForward。雖然這種技術(shù)可行,但卻有嚴(yán)重的缺陷:無法使用 struts-config.xml 文件把響應(yīng)抽象出來。把視圖放在 Action 內(nèi)部,意味著如果想要修改響應(yīng),就必須修改 Action。

因為這種技術(shù)剝奪了 Struts 最好的一項特性(即從視圖中抽象出重點的能力),所以我更愿意把所有響應(yīng)指向一個 servlet,由它負(fù)責(zé)訪問 Velocity 模板,合并上下文的數(shù)據(jù),生成響應(yīng),然后再送回瀏覽器。稍后就會學(xué)到,Velocity 的設(shè)計者們已經(jīng)把這些步驟全都捆綁在了一起:您需要做的只是跟著我來看如何一步步地實現(xiàn)它們。如果您還沒有 訪問“下載”一節(jié),現(xiàn)在是訪問的時候了。


   


Velocity 的五步

把 Struts 與 Velocity 模板引擎組合起來很簡單,也很直接;實際上,只要用五步就可以實現(xiàn):

   1. 把 Velocity JAR 放在類路徑中。
   2. 修改 web.xml 文件讓它識別 Velocity servlet。
   3. 把 Velocity toolbox.xml 放在應(yīng)用程序的 WEB-INF 目錄下。
   4. 修改 struts-config,把它的視圖指向 Velocity 模板而不是 JSP。
   5. 為每個需要顯示的頁面創(chuàng)建 Velocity 模板。

我將用一個熟悉的搜索用例來演示 Struts 與 Velocity 的集成。在這個示例中,一個簡單的應(yīng)用程序允許用戶按照圖書的 ISBN 編號搜索圖書。應(yīng)用程序的結(jié)果頁面顯示與 ISBN 編號匹配的圖書。
   
放棄 Struts 標(biāo)記 —— 不!

現(xiàn)在,您可能會想,是不是需要放棄那些過去讓您節(jié)約了許多編碼時間的很好的 Struts 標(biāo)記。如果不使用 JSP,那么肯定沒有使用 Struts 的 JSP 標(biāo)記!幸運的是,您可以使用 Velocity 工具。Velocity 的 Struts 工具提供了所有您熟悉的 Struts 方便特性,但是添加了 Velocity 的靈活性。

第 1 步:把 Velocity JAR 放在 WEB-INF/lib 下

如果您還沒下載 Velocity,那么現(xiàn)在需要下載它。Velocity 本身是很棒的,但是它的工具包可以幫助您把工作做得更好更快。特別是 Struts 工具模擬了您以前熟悉的 Struts 標(biāo)記。請參閱 下載 一節(jié)下載 Velocity 模板引擎和 Velocity 工具。

請注意不同時候,需要的 jar 也會略有不同。在這里我不想列出一個 JAR 列表,只是想建議您訪問 Velocity 的主頁(請參閱 參考資料)并閱讀那里的安裝指南。一旦得到了需要的 JAR,只需把它們放在 WEB-INF\lib 下面即可。

第 2 步:修改 web.xml,讓它識別 Velocity 的 servlet

下一步是修改 Struts 的 web.xml 文件,讓它識別 Velocity 的 servlet 并把所有以 .vm 結(jié)尾的資源請求定向到 Velocity servlet,如清單 1 所示。

清單 1. 修改 web.xml,聲明 Velocity servlet

<servlet>
  <servlet-name>velocity</servlet-name> |(1)
  <servlet-class> |(2)
         org.apache.velocity.tools.view.servlet.VelocityViewServlet
  </servlet-class>                                           

  <init-param> |(3)
    <param-name>org.apache.velocity.toolbox</param-name>
    <param-value>/WEB-INF/toolbox.xml</param-value>     
 </init-param>                                                

 <load-on-startup>10</load-on-startup> |(4)
</servlet>

<!– Map .vm files to Velocity –>
<servlet-mapping> |(5)
  <servlet-name>velocity</servlet-name>
  <url-pattern>
.vm</url-pattern>     
</servlet-mapping>


讓我們來看看清單 1 中發(fā)生了什么:

    * (1)聲明了 Velocity servlet 并給了它一個 velocity 句柄。
    * (2)聲明了 Velocity servlet 的類名。

Velocity servlet 接受“toolbox”參數(shù)。toolbox 是聲明應(yīng)用程序的可用工具的位置。因此,在清單 1 中,我還做了以下工作:

    * (3)告訴 VelocityServlet 在哪里可以找到 toolbox 的配置。

    * (4)設(shè)置了 load-on-startup 標(biāo)記,確保在正確的時間裝入 Velocity servlet。任何大于或等于 0 的值都會迫使容器通過調(diào)用 servlet 的 init() 方法來裝入它。放在 load-on-startup 標(biāo)記體中的值決定了不同的 servlet 的 init 方法調(diào)用的次序。例如,0 在 1 之前調(diào)用,而 1 在 2 之前調(diào)用。缺少的標(biāo)記或負(fù)值允許 servlet 容器根據(jù)自己的選擇裝入 servlet。

    * (5)聲明了 servlet 映射,強(qiáng)迫所有用 .vm 結(jié)尾的資源請求定向到 Velocity servlet。請注意(5)中的<servlet-name> 必須與(1)中的<servlet-name> 匹配。交錯的聲明和映射會在日志中生成錯誤。

第 3 步:把 toolbox.xml 放在 WEB-INF 下

利用 Velocity,可以使用(或創(chuàng)建)包含許多工具的工具箱。用來登記類的工具箱中包含有用的函數(shù),常常會用到。幸運的是,Velocity 提供了許多預(yù)先構(gòu)建好的工具。還創(chuàng)建了許多 Struts 工具來模擬原始的 Struts 標(biāo)記。如果發(fā)現(xiàn)需要構(gòu)建自己的工具,也可以自由地構(gòu)建。在清單 2 中顯示的 toolbox.xml 可以在 Velocity 工具下載中找到。這個文件應(yīng)當(dāng)隨 Velocity JAR 一起放在 WEB-INF 下。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多