WAF是WEB APPLICATION FRAMWORK的簡(jiǎn)稱,是SUN藍(lán)皮書例子程序中提出的應(yīng)用框架。它實(shí)現(xiàn)了MVC和其他良好的設(shè)計(jì)模式。
開發(fā)人員編寫的兩個(gè)xml配置文件定義了WAF的運(yùn)作參數(shù)。Screendefinition.xml定義了一系列的屏幕(screen)。Mapping.xml則定義了某個(gè)動(dòng)作之后應(yīng)該顯示的屏幕,但沒有指定屏幕到哪里拿數(shù)據(jù)。
用戶發(fā)出一個(gè)HTTP請(qǐng)求(*.screen),由TemplateSERVLET屏幕前端控制組件接收,它提取請(qǐng)求信息,設(shè)置request對(duì)象CurrentScreen屬性,再把請(qǐng)求發(fā)到模版JSP。模版JSP收到請(qǐng)求后,JSP中的Template標(biāo)簽察看這個(gè)當(dāng)前屏幕,并從屏幕定義文件(Screendefinition.xml)中獲取這個(gè)屏幕的具體參數(shù),再生成html返回給客戶。
假設(shè)返回給客戶的html中包括了html表單,用戶在輸入一定數(shù)據(jù)之后提交,發(fā)出一個(gè)HTTP請(qǐng)求(*.do)。這個(gè)請(qǐng)求被MainSERVLET接收,它提取請(qǐng)求信息,察看動(dòng)作映射文件(mapping.xml),設(shè)置處理這個(gè)請(qǐng)求的動(dòng)作對(duì)象(HTTPAction對(duì)象),交給requestprosessor對(duì)象處理。Requestprosessor對(duì)象調(diào)用動(dòng)作對(duì)象完成任務(wù),如果需要進(jìn)一步處理,requestprosessor對(duì)象會(huì)調(diào)用WEBclientcontroler對(duì)象的事件處理機(jī)制。MainSERVLET在處理完請(qǐng)求之后,從屏幕流管理對(duì)象那里得到下一個(gè)屏幕,并把請(qǐng)求傳給這個(gè)屏幕的JSP文件。
值得一提的是WEBclientcontroler事件處理機(jī)制最終把HTTP請(qǐng)求的數(shù)據(jù)傳到了EJBAction對(duì)象那里處理。這樣HTTPAction對(duì)象和EJBAction對(duì)象形成了兩級(jí)處理機(jī)制,前一級(jí)與request對(duì)象緊密相關(guān),把數(shù)據(jù)封裝起來形成一個(gè)Event對(duì)象,再傳給了EJBAction對(duì)象,后者與Request對(duì)象無關(guān)。
這個(gè)方式可以形成一個(gè)session級(jí)別的數(shù)據(jù)處理機(jī)制。下圖顯示了這個(gè)方法。HTTPAction1對(duì)象處理一個(gè)請(qǐng)求,并把數(shù)據(jù)放到一個(gè)狀態(tài)SessionBean內(nèi),HTTPAction2也如此,當(dāng)HTTPAction3接收到HTTP請(qǐng)求之后,把控制傳給EJBAction, 后者獲取狀態(tài)SessionBean數(shù)據(jù),處理請(qǐng)求,成功后清控狀態(tài)SessionBean的內(nèi)容。這個(gè)機(jī)制非常適應(yīng)多個(gè)輸入頁(yè)面才能滿足一個(gè)業(yè)務(wù)的輸入數(shù)據(jù)的情況(比如購(gòu)物車)。