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