WebWork/JSP/Velocity建立登入頁面 |
作者:Erik Swenson,陳姣姣 翻譯 發文時間:2003.06.26 20:32:48 |
|
概述 WebWork是一個開放原始碼Web應用程式框架。目的在於簡化Web應用開發。這一欄目介紹了WebWork,並且解釋了使用WebWork和兩個不同的視圖技術,JavaServerPages(JSP)和Velocity,進行的登入網頁的建立過程。 Web應用程式和開發是複雜和費時的。但是,你能使用一個架構處理普通的Web應用程式開發工作單位,從而簡化該過程。幾種開放原始碼Web應用程式架構能做這個而且做得更多。最好的一個是WebWork,一個來自於開放原始碼項目的OpenSymphony組的Web應用程式架構。 WebWork最大的優勢是它的簡單和靈活。WebWork有一個小型的API。該API允許開發人員立即啟動和運行。WebWork提供許多屬性和靈活的綜合效能,包括:使用不同的視圖技術,如JavaServerPages(JSP)、Velocity、可擴充性單語言轉換說明(XSLT)、和JasperReports,的功能。 注意:本文是在WebWork 1.3.0發布的備選本2的基礎之上的。為了運行提供的例子,你需要建立一個檔案夾在你的應用程式伺服器的webapps目錄下,將例子複製到新檔案夾中,並且從WebWork分布上複製需要的jar檔案到WEB-INF/lib目錄下。從Resources下載WebWork和本文所需的原始碼。 Action 在WebWork中最重要的特徵之一就是Action介面。WebWork Action提供在頁面(或者視圖)和企業邏輯之間的映射,從而控制一個Web應用程式的流程。在WebWork中,表單提交到一個Action URI(同一資源標記符);URI映射到一個相應的Action;執行該Action;這樣使用者前進到了恰當的視圖。 接下來的類,LoginAction,是一個在基於Web的應用程式中處理登入表單的WebWork Action的例子。LoginAction由擴充ActionSupport而來,一個提供錯誤處理、視圖映射和許多其它的有用的功能的基類: |
import webwork.action.*;public class LoginAction extends ActionSupport{ private String userName; private String password; public String getPassword() { return password; } public String getUserName() { return userName; } public void setPassword(String password) { this.password = password; } public void setUserName(String userName) { this.userName = userName; } public String doExecute() { return SUCCESS; } public void doValidation() { if (userName == null || userName.length() < 1) addError("UserName", "Please enter username."); if (password == null || password.length() < 1) addError("Password", "Please enter password."); }} |
LoginAction包含兩個JavaBean屬性,password 和username. WebWork將從這些屬性中取出資料,將你所需要的資料放進到你的視圖中;並可以自動的解釋任何參數,送到Action中設定屬性值。
LoginAction使用兩個來自ActionSupport的函數:doValidation()和doExecute()。doValidation()函數驗證參數的合法性,並且由doExecute()函數帶動使用者向前到恰當的視圖。doExecute()函數返回一個字串,如果處理成功的話,該字串為常量SUCCESS;有問題的話,該字串為常量INPUT,將使用者送回到INPUT視圖,並且在LoginAction中的doValidation()函數調用addError,表示出現了一個非法參數問題並將使用者返回到INPUT視圖。
視圖映射
WebWork ACION用兩種方法映射到視圖:通過一個Action.xml檔案或者一個views.properties檔案。每個ACION應該有一個INPUT視圖和一個SUCCESS視圖。接下來的Action.xml檔案定義了兩個actions:loginJSP和loginVelocity。兩個動作都使用LoginAction類,如果LoginAction返回SUCCESS的話,則帶使用者前進到success.html。如果LoginAction返回INPUT,動作帶使用者前進到相應的INPUT視圖,該動作要麼是login.jsp,要麼是login.vm:
<actions> <action name="LoginAction" alias="loginJSP"> <view name="input">login.jsp</view> <view name="success">success.html</view> </action> <action name="LoginAction" alias="loginVelocity"> <view name="input">login.vm</view> <view name="success">success.html</view> </action></actions> |
視圖
WebWork為許多不同視圖技術提供支援,最通用的使JSP和Velocity。下面的頁是兩個登入頁例子——一個用JSP建立,另一個用Velocity建立。每頁包含一個帶有提交給一個WebWork動作的使用者名稱和密碼欄位的表單。
login.jsp頁使用WebWork標記庫,建立和迭代了兩個欄位,並且通過收集錯誤重複迭代。webwork:textfield和webwork:password標記建立了文本和密碼域,並且webwork:iterator標記重複迭代任何從LoginAction返回的錯誤。webwork:property標記設定了username、password和errors屬性:
<%@ taglib uri="webwork" prefix="webwork" %><html> <head> <title>WebWork JSP Example</title> </head> <body> <form action="loginJSP.action" method="post"> <webwork:property> <webwork:textfield label="'Name'" name="'userName'"/> <webwork:password label="'Password'" name="'password'"/> </webwork:property> <input type="submit" value="Submit"/> </form> <webwork:iterator value="errors"> <br><webwork:property/> </webwork:iterator> </body></html> |
login.vm頁使用Velocity臨時語言增加域並且迭代所有錯誤。在Velocity中,$符號表示一個引用;!符號告訴Velocity如果引用為空白的話,什麼都不顯示;#符號表示一個指令。在接下來的例子中,$!userName和$!password訪問LoginAction的userName和password屬性;# foreach指令通過errors屬性迴圈:
<html> <head> <title>WebWork Velocity Example</title> </head> <body> <form action="loginVelocity.action" method="post"> <input type="text" name="userName" value="$!userName"/> <input type="text" name="password" value="$!password"/> <input type="submit" value="Submit"/> </form> #foreach ($error in $errors)<br>$error #end </body></html><B>馬上行動</b> |
WebWork是一個簡單的、靈活的、強大的開放原始碼Web應用程式架構。本文介紹了基本的WebWork功能。訪問OpenSympony網站瞭解更多的指示,並且下載更新的WebWork版本。當你下載完了以後,進入到Jakarta網站看一看Velocity,一個簡單的、快速開放原始碼臨時引擎,它可是你的網頁中JSP的備選項。
【關於作者】
Erik Swenson是Open Source Software Solutions的顧問和創始人。他精通使用開放原始碼軟體和組件進行Java開發,而且,他開發了JasperEdit和OpenReports開放原始碼項目。