熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

Struts與Velocity集成 五個步驟替代JSP

2013-11-23 20:03:48  來源: Java開源技術 

  Struts Recipes 的合著者 George Franciscus 帶您一步步地把 Velocity 模板引擎集成進 Struts 應用程序結果是一個快速靈活的 JSP 替代物同時帶有希望從 Struts 得到的所有方便
  
  Java? 服務器頁面(JSP)技術是如此普及以至於人們忘記了在創建 Web 頁面時還有其他選擇但是最近有些開發人員已經轉向模板引擎以獲得在 JSP 中得不到的靈活性雖然用 JSP 和模板引擎都可以把數據嵌入 HTML但是每種技術都有自己的處理方式Velocity 模板是一個特別流行的 JSP 替代品Velocity 提供了平緩的學習曲線和巨大的易用性開發人員喜歡它簡潔的語法而且性能分析也證明它的性能超出 JSPVelocity 也非常容易集成進 Struts 應用程序
  
  在這篇文章中我將介紹如何在 Struts 應用程序中集成和使用 Velocity 模板引擎我會首先提供一個公式然後逐步展開它生成的應用程序組合了 Struts 和 Velocity ?? 一個第一流的組合可能會讓您懷疑自己對 JSP 的忠誠!
  
  在開始之前下載這篇文章的源代碼以及 StrutsVelocity 和 Velocity 工具包請注意本文假設您熟悉使用 Struts 框架進行 MVC 編程
  
  關於模板引擎
  
  在開始集成 Struts 和 Velocity 的簡單任務之前讓我們先確保您理解模板引擎和它們在視圖生成中的角色模板引擎作為整體概念Velocity 作為具體實現它們的生命在 HTML 之外Velocity 把數據合並到文本主體中不同的點上文本可以是文字電子郵件或 HTML由於采用這種方式Velocity 模板引擎有點兒像 Microsoft Word 的郵件合並特性郵件合並允許您方便地把動態數據(例如姓名地址和電話號碼)合並到信件中在早期的日子裡組織用這項特性生成大型郵件列表並把它們送到郵局導致垃圾郵件的產生!
  
  Velocity 是什麼?
  
  Velocity 是一個基於 Java 的模板引擎它提供了簡單的基於模板的語言可以用類似腳本的方式引用對象Velocity 促進了分離團隊成員之間的責任允許 Web 設計人員專注於視圖(即頁面的觀感)而 Java 程序員專注於後端代碼把 Java 代碼從頁面布局中分離出來會讓 Web 應用程序未來更易維護當 Velocity 與 Sruts 這樣的 MVC 框架結合時就成了 JSP 或 PHP 可行的替代
  
  在 Web 應用程序中Velocity 實現的目標與 JSP 相同可以用它在向 HttpServletResponse 的 OutputStream 發送之前生成要發送的 HTML在 Struts 應用程序中使用 Velocity 的一種方式是在 Struts 的 Action 內部寫入響應然後返回 null 的 ActionForward雖然這種技術可行但卻有嚴重的缺陷無法使用 strutsconfigxml 文件把響應抽象出來把視圖放在 Action 內部意味著如果想要修改響應就必須修改 Action
  
  因為這種技術剝奪了 Struts 最好的一項特性(即從視圖中抽象出重點的能力)所以我更願意把所有響應指向一個 servlet由它負責訪問 Velocity 模板合並上下文的數據生成響應然後再送回浏覽器稍後就會學到Velocity 的設計者們已經把這些步驟全都捆綁在了一起您需要做的只是跟著我來看如何一步步地實現它們如果您還沒有 訪問下載一節現在是訪問的時候了
  
  Velocity 的五步
  
  把 Struts 與 Velocity 模板引擎組合起來很簡單也很直接實際上只要用五步就可以實現
  
    把 Velocity JAR 放在類路徑中
  
    修改 webxml 文件讓它識別 Velocity servlet
  
    把 Velocity toolboxxml 放在應用程序的 WEBINF 目錄下
  
    修改 strutsconfig把它的視圖指向 Velocity 模板而不是 JSP
  
    為每個需要顯示的頁面創建 Velocity 模板
  
  我將用一個熟悉的搜索用例來演示 Struts 與 Velocity 的集成在這個示例中一個簡單的應用程序允許用戶按照圖書的 ISBN 編號搜索圖書應用程序的結果頁面顯示與 ISBN 編號匹配的圖書
  
  第 把 Velocity JAR 放在 WEBINF/lib 下
  
  放棄 Struts 標記 ?? 不!
  
  現在您可能會想是不是需要放棄那些過去讓您節約了許多編碼時間的很好的 Struts 標記如果不使用 JSP那麼肯定沒有使用 Struts 的 JSP 標記!幸運的是您可以使用 Velocity 工具Velocity 的 Struts 工具提供了所有您熟悉的 Struts 方便特性但是添加了 Velocity 的靈活性
  
  如果您還沒下載 Velocity那麼現在需要下載它Velocity 本身是很棒的但是它的工具包可以幫助您把工作做得更好更快特別是 Struts 工具模擬了您以前熟悉的 Struts 標記請參閱 下載 一節下載 Velocity 模板引擎和 Velocity 工具
  
  請注意不同時候需要的 jar 也會略有不同在這裡我不想列出一個 JAR 列表只是想建議您訪問 Velocity 的主頁(請參閱 參考資料)並閱讀那裡的安裝指南一旦得到了需要的 JAR只需把它們放在 WEBINF\lib 下面即可
  
  第 修改 webxml讓它識別 Velocity 的 servlet
  
  下一步是修改 Struts 的 webxml 文件讓它識別 Velocity 的 servlet 並把所有以 vm 結尾的資源請求定向到 Velocity servlet如清單 所示
  
  清單 修改 webxml聲明 Velocity servlet
  
  <servlet>
  <servletname>velocity</servletname> |()
  <servletclass> |()
  orgapachevelocitytoolsviewservletVelocityViewServlet
  </servletclass>
  
  <initparam> |()
  <paramname>orgapachevelocitytoolbox</paramname>
  <paramvalue>/WEBINFtoolboxxml</paramvalue>
  </initparam>
  
  <loadonstartup></loadonstartup> |()
  </servlet>
  
  <! Map *vm files to Velocity >
  <servletmapping> |()
  <servletname>velocity</servletname>
  <urlpattern>*vm</urlpattern>
  </servletmapping>
  
  讓我們來看看清單 中發生了什麼
  
  ()聲明了 Velocity servlet 並給了它一個 velocity 句柄
  
  ()聲明了 Velocity servlet 的類名
  
  Velocity servlet 接受toolbox參數toolbox 是聲明應用程序的可用工具的位置因此在清單 我還做了以下工作
  
  ()告訴 VelocityServlet 在哪裡可以找到 toolbox 的配置
  
  ()設置了 loadonstartup 標記確保在正確的時間裝入 Velocity servlet任何大於或等於 的值都會迫使容器通過調用 servlet 的 init() 方法來裝入它放在 loadonstartup 標記體中的值決定了不同的 servlet 的 init 方法調用的次序例如 之前調用 之前調用缺少的標記或負值允許 servlet 容器根據自己的選擇裝入 servlet
  
  ()聲明了 servlet 映射強迫所有用 vm 結尾的資源請求定向到 Velocity servlet請注意()中的<servletname> 必須與()中的<servletname> 匹配交錯的聲明和映射會在日志中生成錯誤
  
  第 把 toolboxxml 放在 WEBINF 下
  
  利用 Velocity可以使用(或創建)包含許多工具的工具箱用來登記類的工具箱中包含有用的函數常常會用到幸運的是Velocity 提供了許多預先構建好的工具還創建了許多 Struts 工具來模擬原始的 Struts 標記如果發現需要構建自己的工具也可以自由地構建在清單 中顯示的 toolboxxml 可以在 Velocity 工具下載中找到這個文件應當隨 Velocity JAR 一起放在 WEBINF 下
  
  清單 toolboxxml
  
  <?xml version=?>
  <toolbox>
  <tool>
  <key>link</key>
  <scope>request</scope>
  <class>
  orgapachevelocitytoolsstrutsStrutsLinkTool
  </class>
  </tool>
  <tool>
  <key>msg</key>
  <scope>request</scope>
  <class>
  orgapachevelocitytoolsstrutsMessageTool
  </class>
  </tool>
  <tool>
  <key>errors</key>
  <scope>request</scope>
  <class>
  orgapachevelocitytoolsstrutsErrorsTool
  </class>
  </tool>
  <tool>
  <key>form</key>
  <scope>request</scope>
  <class>
  orgapachevelocitytoolsstrutsFormTool
  </class>
  </tool>
  <tool>
  <key>tiles</key>
  <scope>request</scope>
  <class>
  orgapachevelocitytoolsstrutsTilesTool
  </class>
  </tool>
  <tool>
  <key>validator</key>
  <scope>request</scope>
  <class>
  orgapachevelocitytoolsstrutsValidatorTool
  </class>
  </tool>
  </toolbox>
  
  第 修改 strutsconfig
  
  下一步是修改 strutsconfigxml指向 Velocity 視圖而不是 JSP新的配置文件如清單 所示
  
  清單 針對 Velocity 視圖修改後的 strutsconfigxml

From:http://tw.wingwit.com/Article/program/Java/ky/201311/27885.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.