在這篇ASP.NET 中Session 實(shí)現(xiàn)原理淺析[2] 狀態(tài)管理器Blog中,Flier老大向大家推薦了Java中幾種Cache的實(shí)現(xiàn),于是我就按圖索驥,首先是找到OSCache的老家:OpenSymphony。哇,這里的資源真多啊,簡(jiǎn)直就是一個(gè)寶藏。為什么原來(lái)就沒(méi)有發(fā)現(xiàn)呢?感謝Flier老大了!
需要注意的地方就是form的action屬性的寫法了; 這里需要注意的是action節(jié)點(diǎn)中name的值要與index.jsp中定義的action的名字要嚴(yán)格匹配,對(duì)于大小
在OpenSymphony的主頁(yè)上,我看到了兩個(gè)讓我覺(jué)得很親切的項(xiàng)目:WebWork和Quarts。WebWork作為一個(gè)實(shí)現(xiàn)了IOC的輕量級(jí)Web Application Framework一直備受開(kāi)發(fā)者的青睞;而Quarts更是在異步信息處理上大展拳腳了??吹搅死吓笥眩揖椭缓脮簳r(shí)將新歡OSCache擺一邊,找出我很久沒(méi)有聯(lián)系的老貓(Tomcat)去跟WebWork聊嗑了。
做好了一切的準(zhǔn)備工作之后[1],我嘗試著做一個(gè)登陸注冊(cè)的功能,以體驗(yàn)一下WebWork。跟其他的Web應(yīng)用一樣,我們首先要建立一個(gè)標(biāo)準(zhǔn)的WEB-INF目錄(所謂標(biāo)準(zhǔn)就是目錄下面包含lib和classes子目錄以及Web.xml文件),接著在WEB-INF/lib下面放上WebWork所需要的.jar文件并在WEB-INF目錄下建立Web.xml文件[2]。在完成了這些千篇一律的工作之后,我仔細(xì)的看了一下Web.xml中內(nèi)容,它里面只定義了一個(gè)servlet:webwork,其對(duì)應(yīng)的class為com.opensymphony.webwork.dispatcher.ServletDispatcher,然后由webwork這個(gè)servlet去處理所有.action的請(qǐng)求??吹竭@里,我暗自竊喜,這跟我熟悉的WAF框架是十分類似的,只不過(guò)MainServlet變成了ServletDispatcher,.do的請(qǐng)求變成了.action而已。
接下來(lái),就是到classes目錄下建立xwork.xml文件,這個(gè)文件跟WAF中的mappings.xml很相似,因?yàn)閷?duì).action的處理都是在這里被定義的,而WAF中關(guān)于.do的處理則定義在mapping.xml中。但是也有一些我并不清楚的東西,如package和Interceptor。在classes目錄下還要建立一個(gè)validator.xml文件,但是這個(gè)并不是必需的。做好了這些準(zhǔn)備工作之后,就真正開(kāi)始WebWork的體驗(yàn)之旅了。
1、建立一個(gè)index.jsp(以下為主要部分):
2、在xwork.xml中增加相應(yīng)的處理action的節(jié)點(diǎn)
3、實(shí)現(xiàn)類Login的代碼:
最后,我們可以總結(jié)一下,整個(gè)Web應(yīng)用程序的處理流程了:
首先,當(dāng)用戶提交了表單(form)至Login.action后,由web.xml中定義的唯一的一個(gè)servlet:webwork去處理這個(gè)請(qǐng)求。webwork會(huì)以action的name:Login到xwork.xml中尋找相應(yīng)的處理action的類,于是就找到了fantasysoft.webwork包中的Login類,由Login類中的execute方法來(lái)處理提交的form的數(shù)據(jù)了;
然后,根據(jù)execute方法的返回值,再到xwork.xml中對(duì)應(yīng)的action節(jié)點(diǎn)中去找匹配的result子節(jié)點(diǎn);
最后,根據(jù)result子節(jié)點(diǎn)的定義,將處理結(jié)果分發(fā)(dispatch)或者重定向(redirect)至下一個(gè)頁(yè)面[3]。
[1] 準(zhǔn)備工作可以參考 WebWork Getting Started;
[2] web.xml文件的具體內(nèi)容,可以參考 WebWork Tutorial Lesson 2 ;
[3] 對(duì)于result的Type的更多介紹,可以參考 WebWork Tutorial Lesson 3
聯(lián)系客服