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

5.2 Struts2的體系結(jié)構(gòu)

Struts2的核心體系結(jié)構(gòu)如圖5.1所示。用戶在Struts2框架下只需編寫自己的Action類來處理邏輯、編寫JSP頁面(或者其他方式)來展示用戶界面和在struts.xml中配置映射關(guān)系就可以完成基本的業(yè)務(wù)流程。

1)一個初始的請求被發(fā)送到Servlet容器(如Tomcat或其他JSP服務(wù)器),這個請求經(jīng)過一個標準的Filter鏈,其中包括(可選的)ActionContextCleanUp Filter,如果要在應(yīng)用程序中整合其他的技術(shù)如SiteMesh,可能會需要使用其他的Filter。

2)請求經(jīng)過FilterDispatcher,在它里面ActionMapper會判斷這個請求是否需要調(diào)用Action。如果ActionMapper決定應(yīng)該調(diào)用一個Action,F(xiàn)ilterDispatcher就把請求委托給ActionProxy。

3)ActionProxy通過Struts2的配置文件管理器讀取struts.xml文件里的配置信息。

4)創(chuàng)建一個實現(xiàn)了命令模式的ActionInvocation。這一過程包括在調(diào)用action本身之前調(diào)用所有的interceptor(before()方法)。

5)一旦action方法返回,ActionInvocation就要查找struts.xml文件中這個action的結(jié)果碼(結(jié)果碼是一個字符串如“INPUT”、“SUCCESS”等)所對應(yīng)的result。

圖5.1 Struts2結(jié)構(gòu)圖

6)執(zhí)行這個result。通常情況下result會調(diào)用JSP或FreeMarker模板來呈現(xiàn)頁面,result也可以是一個action鏈去交付給另外的action繼續(xù)處理。當呈現(xiàn)頁面時,在模板中可以使用Struts2提供的一些標簽。

7)interceptor被再次執(zhí)行(順序和開始相反,調(diào)用after方法)。

8)請求被返回給web.xml中配置的其他Filter。如果已經(jīng)設(shè)置了ActionContextCleanUp Filter,那么FilterDispatcher就不會清理ThreadLocal中的ActionContext信息。如果沒有設(shè)置ActionContextCleanUp Filter,F(xiàn)ilterDispatcher會清理掉所有的ThreadLocal。

主站蜘蛛池模板: 邹平县| 遂宁市| 略阳县| 凌源市| 新乡市| 将乐县| 浙江省| 田林县| 全南县| 丰县| 三门县| 灯塔市| 南宫市| 施甸县| 长宁县| 肥城市| 定襄县| 随州市| 斗六市| 武夷山市| 乌兰察布市| 阿合奇县| 五华县| 孝义市| 中方县| 清水县| 无极县| 怀化市| 漳浦县| 伊川县| 耿马| 介休市| 慈利县| 富民县| 卓尼县| 武山县| 湾仔区| 噶尔县| 连州市| 同江市| 望江县|