Structs結(jié)構(gòu)
Structs框架結(jié)構(gòu)采用MVC設(shè)計模式瞻佛,同時包含客戶端(client),請求以及業(yè)務(wù)邏輯處理(Business Logic),而MVC模式主要由模型(Model)疮绷、視圖(View)和控制器(controller)三部分組成丰刊。
1.客戶端(Client)
一方面可以通過瀏覽器發(fā)送Http請求恋博,另一方面把Http響應(yīng)的消息在瀏覽器上展示出來粹懒。
2.控制器(Controller)
包括ActionServlet類和RequestProcessor類增热。ActionServlet是MVC實現(xiàn)的控制器部分,是整個框架的核心滔驾,它用來接收用戶的請求谒麦,根據(jù)用戶的請求從模型中獲取用戶所需的數(shù)據(jù),然后選擇合適的視圖來響應(yīng)用戶的請求哆致。
請求的處理通過RequestProcessor類來實現(xiàn)绕德。
3.業(yè)務(wù)邏輯(Business Logic)
Servlet在接收請求后會根據(jù)配置文件中對應(yīng)的關(guān)系,把請求轉(zhuǎn)給指定的Action類來處理摊阀,Action采用適配器設(shè)計模式耻蛇,只是對業(yè)務(wù)進行包裝,真正的業(yè)務(wù)邏輯是由EJB的session bean或普通的Java類來實現(xiàn)胞此。
4.模型(Model)
模型分為兩個部分:
1.系統(tǒng)的內(nèi)部狀態(tài)臣咖。通常由一組Actionform Bean表示,ActionForm封裝了Http請求的數(shù)據(jù)的類和對象豌鹤,它是一個抽象類亡哄,每一個輸入表單表示它的一個子類,配置文件structs-config.xml中保存了Http的請求表單與具體的ActionForm類的映射關(guān)系布疙。
2.可以改變的操作(業(yè)務(wù)邏輯)蚊惯。
5.視圖(View)
就是一個Jsp文件愿卸,沒有業(yè)務(wù)邏輯的處理,也不保存系統(tǒng)的狀態(tài)信息截型,通過一系列標簽把數(shù)據(jù)以瀏覽器能識別的方式展現(xiàn)出來趴荸。
標簽有:Bean Tags、Html tags等等等宦焦。
Structs工作流程
在Structs框架中发钝,控制器主要是ActionServlet,但是對業(yè)務(wù)邏輯處理的操作主要由Action波闹、ActionMapping酝豪、ActionForward等組件協(xié)調(diào)完成,Action是控制邏輯的實現(xiàn)者精堕,ActionMapping和ActionForward指定了不同業(yè)務(wù)邏輯或流程的運行方向孵淘。
在使用structs框架的web應(yīng)用啟動時,會初始化ActionServlet歹篓,并從structs-config.xml配置文件中讀取配置信息瘫证,并把他們存放到ActionMappings對象中,當(dāng)ActionServlet接收到一個請求時庄撮,會執(zhí)行如下流程:
1.檢索和用戶請求匹配的ActionMapping實例背捌,如果不存在,就返回用戶請求路徑無效的信息洞斯。
2.如果ActionForm不存在毡庆,就創(chuàng)建一個ActionForm對象,把客戶提交的表單數(shù)據(jù)保存到ActionForm對象中巡扇。
3.根據(jù)配置信息決定是否需要表單驗證扭仁。如果需要,就調(diào)用ActionForm的validate().
4.如果ActionForm的validate()返回的是null或返回一個不包含ActionMessage的ActionErrors對象厅翔,則說明表單驗證成功。
如果返回是一個或多個ActionMessage的ActionErrors對象搀突,則表面驗證失敗刀闷,此時,ActionServlet將直接把請求轉(zhuǎn)發(fā)給包含客戶提交表單的JSP組件仰迁,在這種情況下甸昏,不會再創(chuàng)建Action對象并調(diào)用excute()。
5.Actionservlet根據(jù)ActionMapping實例包含的映射信息決定將請求轉(zhuǎn)發(fā)給哪個Action徐许。如果對應(yīng)的Action對象不存在施蜜,就創(chuàng)建一個實例,然后調(diào)用Action的excute()雌隅。
6.Action的excute()返回的是一個ActionForward對象翻默,ActionServlet再把客戶請求轉(zhuǎn)發(fā)給ActionForward對象指向的JSP文件缸沃。
7.ActionForward對象指向的JSP組件生成動態(tài)頁面,返回給客戶修械。