WebWork初體驗
WebWork初體驗WebWork作為一個實現了IOC的輕量級Web Application work一直備受開發者的青睞。
跟其他的Web應用一樣,我們首先要建立一個標準的WEB-INF目錄(所謂標準就是目錄下面包含lib和classes子目錄以及Web.xml文件),接著在WEB-INF/lib下面放上WebWork所需要的.jar文件并在WEB-INF目錄下建立Web.xml文件[2]。在完成了這些千篇一律的工作之后,我仔細的看了一下Web.xml中內容,它里面只定義了一個servlet:webwork,其對應的class為com.opensymphony.webwork.dispatcher.ServletDispatcher,然后由webwork這個servlet去處理所有.action的請求。看到這里,我暗自竊喜,這跟我熟悉的WAF框架是十分類似的,只不過MainServlet變成了ServletDispatcher,.do的請求變成了.action而已。
??????? 接下來,就是到classes目錄下建立xwork.xml文件,這個文件跟WAF中的mappings.xml很相似,因為對.action的處理都是在這里被定義的,而WAF中關于.do的處理則定義在mapping.xml中。但是也有一些我并不清楚的東西,如package和Interceptor。在classes目錄下還要建立一個validator.xml文件,但是這個并不是必需的。做好了這些準備工作之后,就真正開始WebWork的體驗之旅了。
?????? ?1、建立一個index.jsp(以下為主要部分):














????????需要注意的地方就是form的action屬性的寫法了;
??????? 2、在xwork.xml中增加相應的處理action的節點




????????這里需要注意的是action節點中name的值要與index.jsp中定義的action的名字要嚴格匹配,對于大小
/SPAN>寫是敏感的。在action節點中還包含了 ????????在代碼中,你會發現有兩個繼承變量ERROR與SUCCESS。這兩個變量是定義在Action這個接口的,而ActionSupport則實現了Action接口。在接口Action的代碼中,我們可以看到ERROR = "error"、SUCCESS = "success"。我們可以發現這兩個變量的值與xwork.xml中result子節點中的name的值是相匹配。除此之外,在代碼中,我也找不到了原來在開發中經常要用到的一個API:getParameter。事實上,將表單中數據析取出來的工作是由webwork這個唯一定義的servlet去完成的,而這個類會調用Login類中set的方法將用戶輸入的數據賦給Login類的屬性:loginId和loginPassword。在這里,我們也要跟前面index.jsp中的包含的標簽聯系起來。當數據被dispatch回index.jsp的時候,在index.jsp頁面render的過程中是調用了get的方法去獲取相應的數據的。
??????? 3、實現類Login的代碼:package?fantasysoft.webwork;
import?com.opensymphony.xwork.ActionSupport;
public?class?Login?extends?ActionSupport
{
????private?String?loginId;
????private?String?loginPassword;
????public?String?getLoginPassword()?
{
????????return?loginPassword;
????}
????public?void?setLoginPassword(String?loginPassword)?
{
????????this.loginPassword?=?loginPassword;
????}
????public?String?getLoginId()?
{
????????return?loginId;
????}
????public?void?setLoginId(String?loginId)?
{
????????this.loginId?=?loginId;
????}
????public?String?execute()?throws?Exception
{?????????????
????????if?(!checkUserId())?return?ERROR;? // checkUserId is the method that will be implemented
????????????else?return?SUCCESS;
????}
}
??????? 最后,我們可以總結一下,整個Web應用程序的處理流程了:
??????? 首先,當用戶提交了表單(form)至Login.action后,由web.xml中定義的唯一的一個servlet:webwork去處理這個請求。webwork會以action的name:Login到xwork.xml中尋找相應的處理action的類,于是就找到了fantasysoft.webwork包中的Login類,由Login類中的execute方法來處理提交的form的數據了;
????????然后,根據execute方法的返回值,再到xwork.xml中對應的action節點中去找匹配的result子節點;
??????? 最后,根據result子節點的定義,將處理結果分發(dispatch)或者重定向(redirect)至下一個頁面[3]。
????????