一個用戶的請求是通ActionServlet來處理和轉發(fā)的。那么,ActionServlet如何決定把用戶請求轉發(fā)給哪個Action對象呢?這就需要一些描述用戶請求路徑和Action衍射關系的配置信息了。在
Struts中,這些配置映射信息都存儲在特定的XML文件
Struts- config.xml中。在該配置文件中,每一個Action的映射信息都通過一個<Action>元素來配置。
這些配置信息在系統(tǒng)啟動的時候被讀入內存,供
Struts在運行期間使用。在內存中,每一個<action>元素都對應一個org.apache.
struts.action.ActionMapping類的實例。
對于采用
Struts框架的web應用,在web應用啟動時就會加載并初始化ActionServlet,ActionServlet從
struts- config.xml文件中讀取配置信息,把它們存放到各個配置對象中,例如Action的映射信息存放在ActionMapping對象中。
當ActionServlet接收到一個客戶請求時,將執(zhí)行如下流程:
1.檢索和用戶請求相匹配的ActionMapping實例,如果不存在,就返回用戶請求路徑無效信息。
2.如ActionForm實例不存在,就創(chuàng)建一個ActionForm對象,把客戶提交的表單數據保存到ActionForm對象中。
3.根據配置信息決定是否需要表單驗證。如果需要驗證,就調用ActionForm的Validate()方法。
4.如果ActionForm的Validate()方法返回null或返回一個不包含ActionMessage的ActionErrors對象,就表示表單驗證成功。
5.ActionServlet根據ActionMapping實例包含的映射信息決定將請求轉發(fā)給哪個Action。如果相應的Action實例不存在,就先創(chuàng)建這個實例,然后調用Action的execute()方法。
6.Action的execute()方法返回一個ActionForward對象,ActionServlet再把客戶請求轉發(fā)給ActionForward對象指向的JSP組件。
7.ActionForward對象指向的JSP組件生成動態(tài)網頁,返回給客戶。