看Struts2技術內幕,對於書中提出的問題,參考其他前輩的文章所寫

1.Struts2和Struts1.x有什麼區別?

Struts1.x的核心控制器是ActionServlet。

Struts1.x組成部分是Action、ActionForm、ActionForward。ActionForm必須實現ActionForm的基類。

Struts1.x工作流程:

由ActionForm和JavaBean組成,其中ActionForm用來封裝用戶的請求參數,封裝成ActionForm對象,該對象被ActionServlet轉發給Action,Action通過ActionForm裏的

請求參數處理用戶請求。

當ActionServlet接收到一個客戶請求時,將執行如下流程:
(1) 檢索和用戶請求匹配的ActionMapping實例,如果不存在,就返回用戶請求路徑無效的信息。
(2) 如果ActionForm實例不存在,就創建一個ActionForm對象,把客戶提交的表單數據保存到ActionForm對象中。
(3) 根據配置信息決定是否需要表單驗證。如果需要驗證,就調用ActionForm的validate()方法。
(4) 如果ActionForm的validate()方法返回null返回一個不包含ActionMessage的ActionErrors對象,就表示表單驗證成功。
(5) ActionServlet根據ActionMapping實例包含的映射信息決定將請求轉發給哪個Action。如果相應的Action實例不存在,就先創建這個實例,然後調用Action的execute()方法。
(6) Action的execute()方法返回一個ActionForward對象,ActionServlet再把客戶請求轉發給ActionForward對象指向的JSP組件。
(7) ActionForward對象指向的JSP組件生成動態網頁,返回給客戶。 

Struts2的核心控制器是FilterDispatcher。

Struts2提供了提供了系列攔截器,該系列攔截器負責將HttpServletRequest請求中的請求參數解析出來,傳入到Action中,並回調Action的execute方法來處理用戶請求。顯然,上面的處理過程是典型的AOP(面向切面編程)處理方式

Struts2的工作流程:

核心控制器FilterDispatcher是struts2的基礎,包含了框架內部的控制流程和處理機制。業務控制器Action和業務處理邏輯需要用戶自己實現。此外,還需要寫配置文件供核心控制器使用。

具體流程:客戶端提交一個httpServletRequest請求,請求被提供到一系列的過濾器(如:ActionContextCleanUp、 其他過濾器SiteMesh、FilterDispatcher等)中。具體ActionContextCleanUp的作用(ActionContextCleanUp的作用),注意這裏是有順序的,先ActionContextCleanUp,再SiteMesh、最後FilterDispatcher。FilterDispatcher是Struts2的核心。FilterDispatcher詢問ActionMepper是否調用某個Action來處理這個HttpServletRequest請求,如果Actionmepper決定調用,FilterDispatcher則將請求處理交給ActionProxy。ActionProxy通過配置文件(struts.xml)找到相應的Action。ActionProxy創建一個ActionInvocation類,同時ActionInvocation通過調用模式調用Action,在此之前還會根據配置加載Action相關的Interceptor(攔截器).

具體區別 參考Struts1.x和Struts2區別文章


2.Struts2的兩條邏輯主線?

1. Struts2初始化:init執行方法驅動

只在web應用啓動時執行一次,init方法執行失敗會導致整個web應用初始化失敗。

主要內容:

1).框架元素的初始化工作,這一初始化工作包含了很多框架內置對象的創建和緩存。

2).控制框架運行的必要條件

這條主線貫穿struts2對其內置對象的創建和緩存的過程,將struts2身爲一個框架的運行環境完整的構建出來。這條主線的運行,也爲之後http請求主線的運行提供了必備的

環境需求


2.Struts2處理Http請求:doFilter方法執行驅動

本主線包含了Struts2處理http請求,進行必要的數據處理和處理數據返回的全過程,如果請求滿足web.xml中的配置的url-parttern將會發生,並且有doFilter方法執行。

Struts2對http請求的處理包含兩個階段

1).http請求的預處理,這個階段程序依賴於web容器,請時時刻刻於容器打交道。針對每個http請求進行預處理,準備必要的數據環境。

2).xwork執行業務邏輯,將http請求中的數據封裝成java對象,並由xwork負責執行所有具體的業務邏輯,程序在這個階段不依賴於web容器,完全由xwork框架執行。


3.Struts2中的配置元素可以分爲哪兩大類?

1.容器配置元素

2.關係映射元素


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章