C:(controller)控制器 M:(model)模型處理 V:(view)視圖
Struts 2 的運行過程:
核心控制器是FilterDispatcher會過濾所有的請求,如果請求以 action結(jié)尾,該請求會轉(zhuǎn)入框架處理。當框架獲取*action請求后,根據(jù)*action的前半部分決定調(diào)用哪個業(yè)務(wù)邏輯組件。最后根據(jù)業(yè)務(wù)邏輯組件的處理信息決定轉(zhuǎn)發(fā)到哪個視圖;
Struts2有三部分組成:核心控制器是FilterDispatcher,業(yè)務(wù)控制器和業(yè)務(wù)邏輯組件組件,其中核心控制器FilterDispatcher由Struts2提供,而業(yè)務(wù)邏輯控制器和業(yè)務(wù)邏輯組件要用戶自己實現(xiàn)。
核心控制器FilterDispatcher:負責攔截所有用戶的請求,如果用戶的請求以action結(jié)尾,該請求就會轉(zhuǎn)入Struts2框架處理。
業(yè)務(wù)控制器組件:實現(xiàn)Action類的實例(或者繼承了ActionSupport的實例),該類經(jīng)常能夠返回一個字符串(邏輯視圖<result>的execute方法,用來實現(xiàn)業(yè)務(wù)控制)。
業(yè)務(wù)邏輯組件:一般由javaBean或者EJB實現(xiàn);
注意: 在Struts2中處理用戶請求的并不是業(yè)務(wù)邏輯,而是Action代理:過程是這樣的,在Struts2框架中有一系列的攔截器,這些攔截器將HttpServletRequest請求中的參數(shù)分析出來,傳入Action中,并回調(diào)execute()方法來處理用戶請求。
當 所有的請求被攔截器攔截時:執(zhí)行流程
1,F(xiàn)ilterDispatcher會將所有的請求轉(zhuǎn)發(fā)給 ActionProxy(Action代理),Action代理會根據(jù)配置文件struts.xml決定轉(zhuǎn)發(fā)給那個Action;
2,在請求轉(zhuǎn)發(fā)給Action的過程中,會經(jīng)過一系列攔截器,這些攔截器負責將請求解析并轉(zhuǎn)發(fā)給相應(yīng)的Action。
3,經(jīng)過相應(yīng)的Action的 execute()方法處理,會得到一個 視圖名的結(jié)果集,根據(jù)結(jié)果結(jié)合相應(yīng)的模版產(chǎn)生相應(yīng)的輸出流。
4,輸出流也可以經(jīng)過一些列的攔截器后,傳給瀏覽器。