Struts2的基本流程分析
來源:程序員人生 發(fā)布時間:2015-01-16 08:43:24 閱讀次數(shù):3268次
Struts2的基本流程分析
大致上,Struts2框架由3個部份組成,核心控制器StrutsPrepareAndExecuteFilter,業(yè)務(wù)控制器和用戶實(shí)現(xiàn)的業(yè)務(wù)邏輯
邏輯組件,而在這3個部份里,Struts2框架提供了核心控制器StrutsPrepareExecuteFilter,而用戶需要實(shí)現(xiàn)業(yè)務(wù)控制器和業(yè)務(wù)邏輯組件
核心控制器StrutsPrepareAndExecuteFilter
StrutsPrepareAndExecuteFilter控制器作為1個Filter運(yùn)行在Web利用中,它負(fù)責(zé)
攔截所有的用戶要求,當(dāng)用戶要求到達(dá)時,該Filter會過濾用戶要求,所有要求都會交給Struts框架處理
Struts2框架取得了用戶要求后,將根據(jù)要求的名字決定調(diào)用那個業(yè)務(wù)邏輯組件,例如:
對應(yīng)Login要求,Struts2調(diào)用調(diào)用名為Login的Action來處理該要求
Struts2利用中Action都被定義在struts.xml文件中,在該文件中定義Action時,定義該Action的name屬性和class屬性
其中name屬性決定該Action處理哪一個用戶要求,而class數(shù)據(jù)決定該Action的實(shí)現(xiàn)類
Struts2用于處理用戶的要求的Action實(shí)例,其實(shí)不是用戶實(shí)現(xiàn)的業(yè)務(wù)控制器,而Action代理
-由于用戶實(shí)現(xiàn)的業(yè)務(wù)控制器并沒有與Servlet API耦合,明顯沒法處理用戶要求
而Struts2框架提供了系列攔截器,該系列攔截器負(fù)責(zé)將HttpServletRequestIQ要求中的參數(shù)解析出來,傳入到Action中
并回調(diào)Action的execute方法來處理用戶要求
明顯,這是典型的AOP(面向切面編程)處理方式
用戶實(shí)現(xiàn)的Action類僅僅是Struts2的Action代理的代理目標(biāo),用戶實(shí)現(xiàn)的業(yè)務(wù)控制器(Action)則包括了對用戶要求的
處理,用戶的要求數(shù)據(jù)包括在HttpServletRequest對象,而用戶的Action類不必訪問HttpServletRequest對象,攔截器負(fù)責(zé)將HttpServletRequest
里的要求數(shù)據(jù)解析出來,并傳給業(yè)務(wù)邏輯組件Action實(shí)例
業(yè)務(wù)控制器組件就是用戶實(shí)現(xiàn)Action類的實(shí)例,Action類里通常包括1個execute方法,該方法返回1個字符串
-該字符串就是1個邏輯視圖名,當(dāng)業(yè)務(wù)控制器處理用戶要求后,根據(jù)處理結(jié)果不同,execute()方法返回不同的字符串-每一個字符串對應(yīng)1個視圖名
開發(fā)出系統(tǒng)所需要的業(yè)務(wù)控制器后,還需要配置Struts2的Action,即需要配置Action的以下3個部份的定義:
(1)Action所處理的URL
(2)Action組件所對應(yīng)的實(shí)現(xiàn)類
(3)Action返回的邏輯視圖和物理視圖資源之間的對應(yīng)關(guān)系
每一個Action都要處理1個用戶要求,而用戶要求總是包括指定的URL,當(dāng)StrutsPrepareAndExecutorFilter攔截到
用戶要求后,根據(jù)要求的URL和Action處理URL之間對應(yīng)關(guān)系來處理轉(zhuǎn)發(fā)
Struts2的模型組件
通常,MVC框架里的業(yè)務(wù)控制器會調(diào)用模型組件的方法來處理用戶要求,也就是說,業(yè)務(wù)邏輯控制器不會對用戶要求
進(jìn)行任何實(shí)際處理,用戶要求終究由模型組件負(fù)責(zé)處理,業(yè)務(wù)控制器只是中間負(fù)責(zé)調(diào)度的調(diào)度器,這也是稱Action為控制器的緣由
當(dāng)控制器需要獲得業(yè)務(wù)邏輯組件實(shí)例是,通常其實(shí)不會直接獲得業(yè)務(wù)邏輯組件實(shí)例,而是通過工廠模式來獲得邏輯組件實(shí)例,或利用其它IOC容器
(如Spring容器)來管理業(yè)務(wù)邏輯組件實(shí)例
Struts2的視圖組件(FreeMaker,Velocity和XSTL等)當(dāng)Struts2的控制器返回邏輯視圖名時,邏輯視圖并未與任何的視圖
技術(shù)管理,僅僅是返回返回1個字符串,該字符串作為邏輯視圖名
在Struts.xml文件中配置Action時,不但需要指定Action的name屬性和class屬性,還有為Action元素指定系列<result.../>子元素。每一個<result.../>子元素定義1個邏輯
視圖和物理視圖之間的映照,Struts2默許使用jsp作為視圖資源
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈
------分隔線----------------------------
------分隔線----------------------------