struts1的工作原理:
在網上找了兩張圖,讓我們來看一下
1、struts1體系結構:
客戶端發送請求(Http Request),被struts1的核心控件器ActionServlet接收,ActionServlet根據 struts-config.xml裏的映射關係找到對就的Action,若找不到就返回500錯誤到JSP頁面。若有就在
Action裏的 excute()方法裏執行相應的邏輯操作,比如調用Model層的方法,然後通過ActionForw
ard,跳轉到對應的JSP頁面。
2、struts1流程圖:
struts1的幾個核心組件是值得我們注意的:
1 、ActionServlet(核心控制器)。
2、RequestProcessor類(處理異常的核心組件)。
3、ActionForm(接收頁面中傳過的數據)。
4、Action(是控制器,主要是從ActionForm中接收頁面傳進來的數據,然後進行邏輯
處理)。
5、ActionForward(頁面跳轉,跳轉到jsp組件)。
6、ActionMapping(配置每個Action所對應的映射關係)。
現在我們來說一下struts1執行form提交的流程吧!
1、ActionServlet是在web.xml中配置的一個自動啓動項。當web服務器啓動時,也就同時實例化了ActionServlet類,ActionServlet會去初始化struts-config.xml的配置信息,並將其加載到內存中,並會
去實例化action-bean,action-form等對象。
2、當ActionServlet接收到來自客戶端的請求時,就會去檢索和去請求相匹配ActionMapping實例,如果沒有找到則返回500錯誤.
3、如果找到了就檢查對應的ActionForm實例是否存在,
a、如果存在,先把該實例相關數據reset清空一下,然後就把用戶提交的表單數據填充到ActionForm實例中.
b、如果不存在,就創建一個ActionForm對象,再把用戶提交的表單數據填棄到ActionForm實例中
4、接着,再根據配置,看看是否要對錶單進行驗證(validate),如果需要驗證,則調用ActionForm的validate()方法對錶單進行驗證.
a、如果驗證沒通過,則返回錯誤信息。
b、如果不需要驗證,或者需要驗證但validate方法返回null或者是返回一個不包含ActionMessage的ActionErrors對象的話,表明驗證成功。則繼續下一步
5、ActionServlet根據ActionMapping實例所包含的映射信息決定將請求發送給哪個Action,如果對應的Action實例不存在,則創建該Action的實例,然後調用該Action的execute()方法
6、執行完Action實例的execute()方法後,該方法會返回一個ActionForward對象
7、ActionServlet再把客戶端發過來的請求,轉發給ActionForward對象所指向的JSP組件
8、ActionForward所指向的JSP組件再生成動態網頁,送回給客戶端。