- JavaWeb從入門到精通(視頻實戰(zhàn)版)
- 常倬林等編著
- 507字
- 2018-12-31 19:36:02
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。
- Java程序設(shè)計(慕課版)
- LabVIEW Graphical Programming Cookbook
- Processing互動編程藝術(shù)
- The DevOps 2.4 Toolkit
- PHP+MySQL網(wǎng)站開發(fā)項目式教程
- Advanced Oracle PL/SQL Developer's Guide(Second Edition)
- C++新經(jīng)典
- Extreme C
- Visual Basic 6.0程序設(shè)計實驗教程
- PHP與MySQL權(quán)威指南
- 大學計算機基礎(chǔ)實訓教程
- Sitecore Cookbook for Developers
- Java程序設(shè)計教程
- Java程序設(shè)計入門(第2版)
- Python趣味創(chuàng)意編程