更新時(shí)間:2022-05-19 來(lái)源:黑馬程序員 瀏覽量:
為了更好地學(xué)習(xí)Struts2框架,下面分析一下Struts2的基本執(zhí)行流程,如下圖所示。
Struts2的執(zhí)行流程圖
Struts2的流程圖中,一個(gè)請(qǐng)求在Struts2框架中的處理可以分為以下幾個(gè)步驟:
(1)客戶端瀏覽器發(fā)送一個(gè)請(qǐng)求(HttpServletRequest)。
(2)程序會(huì)調(diào)用StrutsPrepareAndExecuteFilter,然后詢問ActionMapper這個(gè)請(qǐng)求是否需要調(diào)用某個(gè)Action。
(3)如果ActionMapper決定需要調(diào)用某個(gè)Action,StrutsPrepareAndExecuteFilter會(huì)把請(qǐng)求的處理交給ActionProxy。
(4)ActionProxy通過配置管理器(Configuration Manager)從配置文件(struts.xml)中讀取框架的配置信息,從而找到需要調(diào)用的Action類。
(5)ActionProxy會(huì)創(chuàng)建一個(gè)ActionInvocation的實(shí)例。
(6)ActionInvocation使用命名模式來(lái)調(diào)用Action,在調(diào)用Action前,會(huì)依次調(diào)用所有配置的攔截器(Intercepter1、Intercepter2、…)。
(7)一旦Action執(zhí)行完,返回結(jié)果字符串,ActionInvocation就會(huì)負(fù)責(zé)查找結(jié)果字符串。對(duì)應(yīng)的Result,然后執(zhí)行這個(gè)Result。通常情況下Result會(huì)調(diào)用一些模板(JSP等)來(lái)呈現(xiàn)頁(yè)面。
(8)產(chǎn)生的Result信息返回給ActionInvocation,此過程中攔截器會(huì)被再次執(zhí)行(順序與Action執(zhí)行之前相反)。
(9)產(chǎn)生一個(gè)HttpServletResponse的響應(yīng)行為,通過StrutsPrepareAndExecuteFilter反饋給客戶端。