Action類
用來訪問業務邏輯類。當 ActionServlet 從容器接收到一個請求,它使用URI (或者路徑
“path”) 來決定那個Action 將用來處理請求。一個 Action 可以校驗輸入,并且訪問業務
層以從數據庫或其他數據服務中檢索信息。
ActionForm類
為校驗輸入或者使用輸入來更新數據庫, Action 需要知道什么值被提交上來。它并不是強
制每個Action 都要從請求中抓取這些值,而是由 ActionServlet 將輸入綁定到JavaBean中。
輸入 bean 就是Struts ActionForm 類的子類。ActionServlet 通過查找請求的路徑可以決定使
用哪個ActionForm , Action 也是通過同樣的方法選取的。ActionForm 擴展了
org.apache.struts.action.ActionForm 類
每個請求都必須以HTTP 響應進行應答。 通常,Struts Action 并不自行渲染響應信息,
而是將請求轉發到其他資源,比如JSP 頁面。Struts 提供一個ActionForward 類,用來將
一個頁面的路徑保存為邏輯名稱。當完成業務邏輯后,Action 選擇并向Servlet 返回一個
ActionForward。Servlet 然后使用保存在ActionForward 對象中的路徑來調用頁面完成響
應。
Struts 將這些細節都綁定在一個ActionMapping 對象中。每個ActionMapping 相對于一個
特定的路徑。當某個路徑被請求時,Servlet 就查詢ActionMapping 對象。ActionMapping
對象告訴servlet,哪些個Action,ActionForm,和 ActionForward 將要被本次請求使用。
所有這些細節,關于Action, ActionForm, ActionForward, ActionMapping,以及其
它一些東西,都在struts-config.xml 文件中定義。 ActionServlet 在啟動時讀取這個配置文
件,并創建一個配置對象數據庫
舉個例子來說,
頁面上如果有以下語句:
<html:form?action="/hello.do">
當submit此form時,控制器從配置文件中找<action-mappings>下path="/hello"?的<action>元素
然后根據此action元素的type屬性找要執行的action類文件
比如
<action-mappings>
????<action?path="hello"
????????????type="cn.com.mylu.Hello"
????????????name="Hellofrom"
????????????……
????</action>
其中 cn.com.mylu.Hellofrom?為ActionForm類javabean
???????????cn.com.mylu.Hello 為Action類
??? <form-bean name="Hellofrom" type="cn.com.mylu.Hellofrom">
??? </form-bean>
頁面hello.do----->?action元素的path屬性?------>?action元素的type屬性----->Hello.java---->Hello.java中的execute方法