Velocity -- Java Web 開發新技術
關鍵字:Java, JSP, Servlet, template, 模板, Apache, Jakarta, Velocity
讀者要求:瞭解 Java Servlet 基本概念
Velocity 是一個基於 Java 的通用模板工具,來自於 jakarta.apache.org 。 Apache 開發的目的是替代 JSP/Struts。
JSP 是 Sun 開發的 Web 應用程式開發技術,與 PHP, ASP 具有類似功能。但是 JSP 存在著很多問題,使得它難以推廣, 請參照 The Problems with JSP by Jason Hunter 。Velocity 主要是用在 Java servlet 中。
Template 技術最早在 PHP 中作為附加工具包引入。目的是為瞭解決 PHP 中 常見的 PHP 代碼和 HTML 程式碼混在一起,難以閱讀、難以編寫、難以修改的問題。其實這種問題在 JSP/ASP 中也存在。ASP 因為文法簡單,引入了 VB Script (VBA 最早設計的目的是達到每個 Office 使用者都能學會,因而超級易學,VB Script 與 VBA 文法類似) ,使得幾乎每個一個會 Java script 的人都能學會。同時會 ASP 和 HTML 的人很多,但是同時會 PHP 和 HTML 的人很少,同時會 JSP 和 HTML 的人更少。PHP 中引入 Template 將 HTML 和 PHP 代碼分成不同的檔案,會 PHP 的只改 PHP 檔案,會 HTML 的只改 HTML 檔案,分工明確,因而工作效率大大增強,程式也更容易寫。使用 Velocity, java 代碼與 HTML 程式碼分成不同的檔案,不用學習 JSP 文法。作為 MVC 的應用技術之一,Velocity 遠比 JSP/Struts 在Model 與 View 代碼的分離更為成功。
PHP 的 Template 介紹請參考我的文章 使用PHP4中的 IntegratedTemplate類實現HTML和PHP代碼分離,使用PHP4中的 IntegratedTemplate類實現BLOCK功能 。
Velocity 可以用來產生動態網頁,SQL,PostScript 檔案和其它可以從模板轉換過來的文字檔。我曾經用它來產生 Email 發送感謝函。發給不同使用者的 Email 的不同之處在於開始的使用者名稱。用 Velocity 處理這件事很容易。首先用 Dreamweaver 編寫一封 HTML 格式的 Email.
Dear $UserName,
....
然後在 Java 代碼中將上面的變數進行替換,發送出去。程式寫好後,Email 還可以用 Dreamweaver 隨意修改而不用改動 Java 代碼。
Velocity 用在 servlet 中樣本如下:
1) login.htm
| ? |
? |
? |
| ? |
form name="FormLogin" method="post" action="/login">
| |
Welcome!! |
|
| |
|
|
|
| |
Login account: |
input name="TextfieldAccount" type="text" id="TextfieldAccount"> |
|
| |
Password: |
input name="TextfieldPassword" type="text" id="TextfieldPassword"> |
|
| |
|
> |
|
|
? |
| ? |
? |
? |
2)自 VelocityServlet 繼承,寫一個子類 login.java
| ? |
? |
? |
| ? |
import javax.servlet.http.*;import org.apache.velocity.*;import org.apache.velocity.context.*;import org.apache.velocity.servlet.*;public class Login extends VelocityServlet { protected Template handleRequest( HttpServletRequest request, HttpServletResponse response, Context context) throws Exception { boolean checkSuccess = false; //check //... String account = request.getParameter("TextfieldAccount"); String password = request.getParameter("TextfieldPassword"); checkSuccess = checkLoginPassword(account,password); Template template = null; try { if (checkSuccess) { template = getTemplate("Success.htm"); context.put("UserName",getLoginUserName());//replace $UserName in html file } else { template = getTemplate("Fail.htm"); context.put("UserName",getLoginUserName());//replace $UserName in html file } } catch (Exception e) { e.printStackTrace(); } return template; } private boolean checkLoginPassword(String account, String password){ //do something to check //.... return true; } private String getLoginUserName(){ return "Test by Jack"; }} |
? |
| ? |
? |
? |
3) Success.htm
| ? |
? |
? |
| ? |
Congratulation!! You are logined as $UserName!! |
? |
| ? |
? |
? |
3) Fail.htm
| ? |
? |
? |
| ? |
Error!! Fail to login as $UserName!! |
? |
| ? |
? |
? |
基本上來說, Success.htm 和 Fail.htm 都可以用 Dreamweaver 隨意排版,不用擔心 Java 代碼的問題。比起 JSP 檔案很多地方無法用 Dreamweaver 排版,只能手工修改 HTML code,Velocity 把我們帶入了一個全新的世界。一個只用標準 Java 寫 Web 程式,用標準 HTML 寫展示層,沒有 tag, 沒有自訂文法的清晰代碼世界。
並且現在沒有用任何令人討厭的 tag. JSP tag 讓很多人感到莫名其妙, Java 程式員看著覺得奇怪, 網頁程式員看著也覺得奇怪。沒有幾個人能夠精通它,並且沒有幾個工具能夠檢查 tag 語法錯誤,如果你那個地方寫錯了,沒有工具查錯是很令人噁心的事。
用了 Velocity, 所有這些煩惱都沒有了。放棄設計糟糕的 JSP/Struts 吧。
作者Blog:http://blog.csdn.net/jacklondon/相關文章
| 我與 Joshua Bloch 的 email 討論(emails between Joshua Bloch and me) |
| C++ 中的 Singleton 實現 |
| Velocity 的應用樣本 |
| Velocity -- Java Web 開發新技術 |
| Java 的JDBC 資料庫連接池實現方法 |