一、通過順序圖剖析sturts執行流程.
由上圖可以struts1.x對請求的處理過程:
1、默認情況下,*.do請求都將交給struts框架處理,首先會由控制器ActionServlet攔截請求,在處理請求前會做一些初始化的工作,然後再轉交給請求處理器RequestProcessor處理.
2、RequestProcessor根分析請求url,在配置文件struts-config.xml中找到相對應的ActionForm,實例化ActionForm並根據類的反射填充ActionForm,將表單元素值封裝成一個ActionForm對象.
3、對ActionForm對象每個成員屬性進行校驗,校驗失敗將直接返回<action />的input屬性所指定的頁面。如果校驗成功就往下執行.
4、RequestProcessor實例化Action並調用Action的execute方法。對於某一些action可能還會進行業務邏輯校驗。
5、業務邏輯校驗通過後,返回一個ActionForward對象並轉發到該對象指定的一個成功頁面。
二、RequestProcessor的處理過程
RequestProcessor是處理請求的核心類,處理請求步驟如下 :
1、調用processPath()方法, 確定選擇將要處理的動作的路徑,如:/login.do,就會取出/login字符串,賦值給變量path.
2、調用processMapping()方法,根據path路徑,在配置文件struts-config.xml找到與之對應的action映射,並返回一個ActionMapping的對象,該類封裝了<action />裏的屬性值的方法,如validate、scope等屬性的值.
3、調用processActionForm()方法,根據ActionMapping的對象新建一個Form Bean 或從請求會話中檢索Form Bean。
4、調用processPopulate()方法,填充與請求關聯的Form Bean (即把表單元素的數據封裝成一個ActionForm對象).
5、調用processValidate()方法,校驗form bean數據是否合法.
6、調用processActionCreate()方法,實例化當前ActionMapping關聯的類的實例.
7、調用processActionPerform()方法,內部將調用action的execute() 方法,執行完後將返回ActionForward對象所指定的頁面.