官术网_书友最值得收藏!

2.2 Struts 2工作流程結(jié)構(gòu)

前面簡(jiǎn)要介紹了從Struts 1和WebWork到Struts 2的發(fā)展過(guò)程,下面簡(jiǎn)單介紹Struts 2的工作流程結(jié)構(gòu)。

Struts 2的工作流程結(jié)構(gòu)圖如圖2.3所示。

圖2.3 Struts 2的工作流程結(jié)構(gòu)圖

該流程圖概括了Struts 2的整個(gè)工作過(guò)程,從發(fā)出請(qǐng)求直至最終生成響應(yīng)并返回給客戶端一個(gè)頁(yè)面的全部過(guò)程。下面分步講解整個(gè)流程的工作情況。

(1)客戶端提交一個(gè)(HttpServletRequest)請(qǐng)求。

(2)請(qǐng)求被提交到一系列(主要是3層)的過(guò)濾器(Filter),如(ActionContextCleanUp、其他過(guò)濾器(SiteMesh等)、FilterDispatcher)。注意:這里是有順序的,先是ActionContext CleanUp,再是其他過(guò)濾器(SiteMesh等),最后到FilterDispatcher。

(3)FilterDispatcher接收到請(qǐng)求后,詢問(wèn)ActionMapper是否需要調(diào)用某個(gè)Action來(lái)處理這個(gè)(HttpServletRequest)請(qǐng)求,如果ActionMapper決定需要調(diào)用某個(gè)Action,F(xiàn)ilterDispatcher則把請(qǐng)求的處理交給ActionProxy。

(4)ActionProxy通過(guò)Configuration Manager(struts.xml)詢問(wèn)框架的配置文件,找到需要調(diào)用的Action類(lèi)(該Action類(lèi)一般是程序員自定義的處理請(qǐng)求的類(lèi))。

(5)ActionProxy創(chuàng)建一個(gè)ActionInvocation實(shí)例,同時(shí)ActionInvocation通過(guò)代理模式調(diào)用Action。但在調(diào)用之前,ActionInvocation會(huì)根據(jù)配置加載Action相關(guān)的所有Interceptor(攔截器)。

(6)一旦Action執(zhí)行完畢,ActionInvocation負(fù)責(zé)根據(jù)struts.xml中的配置找到對(duì)應(yīng)的返回結(jié)果result。然后根據(jù)結(jié)果返回對(duì)應(yīng)的視圖呈現(xiàn)給客戶端(JSP、FreeMarker等)。

在項(xiàng)目中應(yīng)用Struts 2框架其實(shí)和傳統(tǒng)的JSP+JavaBean+Servlet開(kāi)發(fā)項(xiàng)目差不多,只是用Struts 2代替了Servlet部分做控制器,然后在JSP中應(yīng)用一些Struts 2提供的標(biāo)簽。Struts 2有效地把它們整合在一起,從而增強(qiáng)了規(guī)范性。

主站蜘蛛池模板: 新和县| 昆山市| 永胜县| 武城县| 正宁县| 静宁县| 潮州市| 松溪县| 宁安市| 庆城县| 香港| 黎城县| 嘉黎县| 文山县| 临猗县| 韶山市| 华坪县| 高尔夫| 墨竹工卡县| 临泉县| 宁安市| 灵宝市| 高雄县| 海口市| 织金县| 台东市| 陕西省| 岐山县| 诸城市| 绥阳县| 北辰区| 鸡泽县| 资阳市| 龙南县| 隆化县| 仁化县| 金堂县| 齐齐哈尔市| 轮台县| 收藏| 中宁县|