Struts2架構流程

【Struts2】 Action實現。 interceptor實現。 Filter工做原理。 html

 

使用 攔截器來處理請求。web

業務邏輯控制器與 Servlet API分離。數據庫

 

============================================================================================================= 編程

 

HttpServletRequest - ActionMapper - FilterDispatcher - ActionProxyFactory -  ActionProxy (Configuration Manager - struts.xml) - Action Invocation - Interceptors - Action - Result - Template(JSP) - Interceptors - HttpServletResponse瀏覽器

 

 

 

=============================================================================================================app

 

Struts2:運行順序圖》框架

 

 

=============================================================================================================jsp

【請求響應流程】spa

 Controller、ActionProxy、ActionMapping、Configuration Manager、ActionInvocation、Inerceptor、Action、Result等。設計

 

1)  客戶端(Client)向Action發用一個請求(Request

2)  Container經過web.xml映射請求,並得到控制器(Controller)的名字

(3)  容器(Container)調用控制器(StrutsPrepareAndExecuteFilterFilterDispatcher

        在Struts2.1之前調用FilterDispatcherStruts2.1之後調用StrutsPrepareAndExecuteFilter

4)  控制器(Controller)經過ActionMapper得到Action的信息

5)  控制器(Controller)調用ActionProxy

6)  ActionProxy讀取struts.xml文件獲取actioninterceptor stack的信息。

7)  ActionProxyrequest請求傳遞給ActionInvocation

8)  ActionInvocation依次調用actioninterceptor

9)  根據action的配置信息,產生result

10) Result信息返回給ActionInvocation

11)產生一個HttpServletResponse響應

12)產生的響應行爲發送給客服端。

 

=============================================================================================================

【Struts1的缺點】

1)支持的表現層技術單一

2Servlet API嚴重耦合,這點能夠從ActionExecute的方法聲明裏面就能夠看的出來

3)代碼依賴Struts1 API,有侵入性,這點能夠從寫Action類和FormBean的時候看的出來,Action必須實現StrutsAction類。

 

 

Struts1是使用ActionServlet作爲其中心處理器,Struts2則使用一個攔截器(FilterDispatcher作爲其中心處理器,這樣作的一個好處就是將Action類和Servlet API進行了分離。

 

 

Struts 2框架自己大體能夠分爲3個部分:核心控制器FilterDispatcher、業務控制器Action和用戶實現的企業業務邏輯組件

 

優勢】

第一:在軟件設計上不依賴與Servlet APIservlet沒有太多的耦合度,struts2的設計是無侵入式的設計struts1是侵入式設計。

第二:Struts2提供了攔截器的功能,利用攔截器進行AOP編程(面向切面編程),實現權限驗證等功能。

第三: struts2也提供了類型轉換的功能,對特殊的需求進行轉換。若是咱們要對一樣的功能進行轉換,咱們必須在底層實現對beanutil的註冊。

第四:struts2支撐多種表現層的技術如jspfreemarker

第五:struts2能夠對指定的方法和全部的方法進行校驗。

第六:提供了全局範圍,包範圍和action範圍的資源國際化的實現。

 

=============================================================================================================

【請求細節處理

1、客戶端初始化一個指向Servlet容器(例如Tomcat)的請求;

2、這個請求通過一系列的過濾器(Filter)(這些過濾器中有一個叫作ActionContextCleanUp的可選過濾器,這個過濾器對於Struts2和其餘框架的集成頗有幫助,例如:SiteMesh Plugin);

三、接着FilterDispatcher被調用,FilterDispatcher詢問ActionMapper來決定這個請求是否須要調用某個Action

4、若是ActionMapper決定須要調用某個ActionFilterDispatcher把請求的處理交給ActionProxy

5ActionProxy經過Configuration Manager詢問框架的配置文件,找到須要調用的Action類;

六、ActionProxy建立一個ActionInvocation的實例

7ActionInvocation實例使用命名模式來調用,在調用Action的過程先後,涉及到相關攔截器(Intercepter)的調用。

8、一旦Action執行完畢,ActionInvocation負責根據struts.xml中的配置找到對應的返回結果。返回結果一般是(但不老是,也多是另外的一個Action鏈)一個須要被表示的JSP或者FreeMarker的模版。在表示的過程當中可使用Struts2框架中繼承的標籤。在這個過程當中須要涉及到ActionMapper

=============================================================================================================

【處理流程】不詳細

一、加載類(FilterDispatcher)

二、讀取配置(struts配置文件中的Action)

 三、派發請求(客戶端發送請求)

四、調用Action(FilterDispatcher從struts配置文件中讀取與之相對應的Action )

五、啓用攔截器(WebWork攔截器鏈自動對請求應用通用功能,如驗證)

六、處理業務(回調Action的execute()方法)

七、返回響應(經過execute方法將信息返回到FilterDispatcher)

八、查找響應(FilterDispatcher根據配置查找響應的是什麼信息如:SUCCESS、ERROR,將跳轉到哪一個jsp頁面)

   九、響應用戶(jsp--->客戶瀏覽器端顯示)

  十、struts2標籤庫(相比struts1的標籤庫,struts2是大大增強了,對數據的操做功能很強大)

=============================================================================================================

 

struts2經過攔截器來處理用戶的請求,從而容許用戶的業務邏輯控制器和Servlet分離。

處理流程】較老版本的過程

1.瀏覽器發送請求例如/muweb/login.action,report/es.pdf等

2.核心控制器FilgerDispatcher根據請求調用對應的action。中心處理器根據struts.xml文件查找對應的處理請求的Action類。

3.WebWork的攔截器鏈自動對請求應用通用功能,例如:WorkFlow、Validation等功能

4.若是Struts.xml文件中配置Method參數,則調用Method參數對應的Action類中的Method方法,不然調用通用的Execute方法來處理用戶請求。

        回調action的execute的方法,該方法先獲取參數,而後執行數據的操做,既能夠把數據保存到數據庫中也能夠把數據從數據中提取出來,同時在出來以後返回一個string類型的值。

5.Action中execute的方法處理結果信息將輸出到html中或者是文檔,咱們主要經過execute方法處理後的返回參數來調用。

=============================================================================================================

相關文章
相關標籤/搜索