圖2.1 struts2.0體系架構圖
針對上節體系架構圖,下面分步說明執行流程
ø 客戶端初始化乙個指向
servlet
容器(例如
tomcat
)的請求;
ø 這個請求經過一系列的過濾器(
filter
)(這些過濾器中有乙個叫做
actioncontextcleanup
的可選過濾器,這個過濾器對於
struts2
和其他框架的整合很有幫助,例如:
sitemesh plugin);
注:從struts2.1.3
後就不需要配置
actioncontextcleanup
過濾器了,該過濾器的作用是清空值棧等,但
struts
會留下自己
session
和attribute等
ø 接著
呼叫struts
的strutsprepareandexecutefilter
過濾器,strutsprepareandexecutefilter
詢問來決定這個請求是否需要呼叫某個
action;
備註:早期
struts
用filterdispatcher
過濾器,現在普遍都用
strutsprepareandexecutefilter
。就名字而言,
prepare
與execute
前者表示準備
說指filterinit
方法即配置匯入;後者表示進行過濾指
dofilter方法即
request
請求**給對應
action
去處理
ø 如果
決定需要呼叫某個
action
,strutsprepareandexecutefilter
把請求的處理交給
actionproxy;
ø actionproxy
通過configuration manager
詢問框架的配置檔案,找到需要呼叫的
action類;
ø actionproxy
建立乙個
actioninvocation
的例項。
ø actioninvocation
例項使用命名模式來呼叫,在呼叫
action
的過程前後,涉及到相關***(
intercepter
)的呼叫。
ø 一旦action
執行完畢,
actioninvocation
負責根據
struts.xml
中的配置找到對應的返回結果。返回結果通常是(但不總是,也可能是另外的乙個
action
鏈)乙個需要被表示的
jsp或者
freemarker
的模版。在表示的過程中可以使用
struts2
框架中繼承的標籤。在這個過程中需要涉及到。
官方文件:
參考:參考:
一篇基本總結《struts技術內幕》的部落格:
(1) 客戶端(client)向action髮用乙個請求(request)
(2) container通過web.xml對映請求,並獲得控制器(controller)的名字
(3) 容器(container)呼叫控制器(strutsprepareandexecutefilter或filterdispatcher)。在struts2.1以前呼叫filterdispatcher,struts2.1以後呼叫strutsprepareandexecutefilter
(5) 控制器(controller)呼叫actionproxy
(6) actionproxy讀取struts.xml檔案獲取action和interceptor stack的資訊。
(7) actionproxy把request請求傳遞給actioninvocation
(8) actioninvocation依次呼叫action和interceptor
(9) 根據action的配置資訊,產生result
(10) result資訊返回給actioninvocation
(11) 產生乙個httpservletresponse響應
(12) 產生的響應行為傳送給客服端。
struts2工作流程
1 客戶端傳送請求 2 請求先通過actioncontextcleanup filterdispatcher 6 actionproxy建立乙個actioninvocation的例項 7 actioninvocation呼叫真正的action,當然這涉及到相關 的呼叫 8 action執行完畢,ac...
struts2工作流程
1.客戶端發出乙個httpservletrequest請求,這個請求經過一系列的過濾器filter 如actioncontextcleanup等 這些過濾器最終會呼叫filterdispatcher類 現在是strutsprepareexcutefilter 的serviceaction方法,fil...
struts2的工作流程
struts2並不是乙個陌生的web框架,它是以webwork的設計思想為核心,吸收struts1的優點,可以說 struts2是struts1和webwork結合的產物。struts2 的工作原理圖 乙個請求在struts2框架中的處理分為以下幾個步驟 1.客戶端發出乙個指向servlet容器的請...