熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

五步解釋Struts處理請求的過程

2013-11-23 20:16:14  來源: Java開源技術 
    Struts的核心控制組件是ActionServlet它是orgapachestrutsactionActionServlet類型的Servlet
   
    他繼承javaxServletHttpHttpServlet並實現了init()doGet()/doPost()destroy()等Servlet生命周期所用到的方法還添加了一個process()它本身不復雜但它會調用其他的復雜方法
   
    和spring框架有一樣web容器在啟動的時候先是初始化webxml中配置的ActionServletActionServlet再加載配置文件(配置文件寫明了不同的請求的不同的ActionMapping)
   
    其它接受客戶端請求的作出響應的過程如下
   
        查找servlet並找到相應的action
   
    Servlet容器在webxml文件中尋找urlpattern屬性為*do的<servletmapping>元素
   
    Servlet容器根據<servletmapping>元素的name屬性在webxml文件中找到相應的servlet
   
        查找相應的action
   
    Servlet根據浏覽器是post還是get請求調用doPost()doGet()方法在其中調用ActionServlet的process()方法
   
    Process()獲取RequestProcessor對象調用RequestProcessor對象的process()方法
   
    RequestProcessor對象的Process()方法讀取strutsconfigxml在其中查找<action>子元素查找的條件是用戶請求的URI與action元素的path屬性值一樣找到後確定name屬性根據name找到<formbean>元素再根據action元素的name匹配值找到相應的ActionForm bean
   
        Actionform重設賦值驗證
   
    創建新的ActionFormc對象
   
    保存ActionForm對象
   
    保存為用戶請求(request)或會話(session)的屬性Actionform的作用域由ActionMapping配置中的scope屬性值來決定名稱為配置文件中的ActionMapping中的Attributte決定
   
    調用ActinForm的reset()方法初始化ActionForm
   
    調用reset方法的目的是為了對ActionForm中的值進行復位操作通常情況要覆蓋reset()方法把ActionForm的值恢復為默認值
   
    調用ActionForm bean的setter方法為AtionForm賦值
   
    驗證
   
    如果validate屬性為trueActionServlet會調用form對象的validate方法進行表達驗證此方法返回ActionErros對象裡面包含ActionMessage對象封裝了錯誤消息通過標記庫的errors標記可以將這裡返回的錯誤信息顯示在頁面上Validate()沒有返回任何異常那麼就會繼承進行下面的處理
   
    用struts的Validator驗證組件比較好用需求加兩個文件validationxmlvalidatorrulesxml這個組件的使用我會在下一次說明
   
       action進行真正的業務處理
   
    ActionServlet查找這個XXaction實例是否存在不存在就創建一個實例然後調用他的excute方法進行業務處理
   
                返回forward轉到客戶端
   
    最後調用mappingfindForward(abc)方法從ActionMapping元素中查找name為abc的forward元素然後返回這個forward元素對應的頁面其實就是查找ActionMapping本身的HashMap
   
    到此對一個請求的處理完畢裡面貫穿了struts的運行過程
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28213.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.