struts1的工作原理

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組件再生成動態網頁,送回給客戶端。

轉載於:https://www.cnblogs.com/feifeihu/archive/2012/08/15/2639697.html