struts核心運行機制

Struts中的C層功能:

1、  接受客戶端請求

2、  調用M層模型組件執行相應的業務邏輯。

3、  獲取M層業務邏輯的處理結果

4、  根據處理結果選擇合適的視圖呈現給客戶端。

C層核心控制組件是:ActionServlet,它是org.apache.struts.action.ActionServlet類型的Servlet

他繼承javax.Servlet.Http.HttpServlet,並實現了init(),doGet()/doPost(),destroy()Servlet生命週期所用到的方法。還添加了一個process(),它本身不復雜,但它會調用其他的複雜方法。

ActionServlet接收到來自Servlet容器的客戶請求時,他的處理步驟:

1、  根據瀏覽器是post還是get請求調用doPost()doGet()方法,在其中調用ActionServletprocess()方法。

2、  Process()獲取RequestProcessor對象-à調用RequestProcessor對象的process()方法

3、  Process()讀取struts-config.xml,在其中查找<action>子元素,查找的條件是:用戶請求的URIaction元素的path屬性值一樣,找到後確定name屬性,根據name找到<form-bean>元素,再根據action元素的name匹配值找到相應的ActionForm bean

4、  調用ActionForm beansetter方法填充FormBean的屬性,然後調用FormBeanvalidate()方法,對錶單數據的有效性進行驗證。

5、  RequestProcessorprocess()方法根據3中找到的<action>中的type屬性尋找Action bean對象(有則使用,無則創建),然後將FormBean對象,封裝的請求對象等信息發給找到的Action對象,Action bean調用自己的execute()方法處理。

6、  Action beanexecute()方法執行完璧後,返回一個ActionForward對象,又回到RequestProcessor對象的process()方法,process方法將根據ActionForward請求重新定向到指定的頁面。

流程:

1、客戶請求req.do

ActionServlet>process()>RequestProcessor.process()>struts-config.xml>

                                                        <action>>path=/req

                                                        <action>>name><form-bean>>setXXX()

                                                        <action>>type>獲得Action>execute()

>execute()返回ActionForward()

              

RequstProcessor類時struts控制器的真正的請求處理者。它定義了多個processXXX()方法完成具體的處理工作。如果要擴展ActionServlet類,可以從RequstProcessor繼承,實現自己的控制邏輯。其中,它提供一個processPreprocess()方法用於在子類中被重寫,加入定製的預處理共功能。

Struts中的ActionForm有表單數據是使用

ActionForm bean 的聲明和使用在struts-config.xml中是分開的。這樣一個bean可以處理多個頁面不同的請求表單信息。

聲明:<form-bean>

使用:<action name=”formbean”>

定義ActionForm bean後,必須在struts-config.xml中聲明。之後,再指明ActionForm bean被處理的請求之間的對應關係,一個蘿蔔一個坑,(當然,這個請求是含有表單信息的請求)。即事先約定好在那種情況下使用某個特定的ActionForm bean,這種約定是在配置文件中給出的。類似這樣的:

<action-mappings>

<action path=”/login” type="com.fzxy.LoginAction" name="formBean1" scope="request" input="/login.jsp" />

<action path="/regist" forward="/regist.jsp"/>

</action-mappings>

這個<action-mappings>元素給出各種可能的客戶端請求與處理方式之間的對應關係,一個<action>對一種請求URI的處理辦法。

<action>元素的屬性:

path:客戶請求的頁面URI

type:處理請求的Action對象的類型,包括包名

name:用於自動接收path請求表單信息的ActionForm bean的名字,該名字在<form-bean>中聲明。

scopeActionForm bean的適用範圍,通常爲requestsession

虛線代表第一次請求,實線代表第二次請求當範圍時:

request,只在當前請求和響應有效,請求由一個組件轉發到另一個組件是,該對象一直有效。當服務器返回響應結果給客戶時,ActionForm bean被銷燬。圖中範圍爲request時,form對象將覆蓋第一次請求及響應週期內的4個組件,4個組件共用一個ActionForm對象。當瀏覽器發出第二個請求時,將重新創建一個新的ActionForm對象。

session時,兩次請求只要在一個會話中,這些組件始終共用一個ActionForm對象。

 

input:處理請求出錯時轉向的頁面

 

轉自:http://hi.baidu.com/baozi52/blog/item/98c928088c135531e8248877.html

發佈了14 篇原創文章 · 獲贊 4 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章