Struts 基本工作流程


StrutsMVC / Model 2 的實現方式中,擔任Front Controller角色的是org.apache.struts.action.ActionServlet,它繼承自 javax.servlet.http.HttpServlet,使用ActionServlet,在web.xml中配置相關的組態,就如同配置一般的Servlet一樣,您也可以配置一些相關的初始參數給ActionServlet使用。

在MVC/Model 2的架構中,理想上客戶端不會直接要求資源或指定請求的JSP頁面,所有客戶的請求都必須發送至Controller,由Controller決定該轉發給哪一個物件進行處理、決定該由哪一個View頁面進行顯示與回應。

在Struts中,擔任Front Controller的是ActionServlet,所有的請求都發送給ActionServlet,對於 ActionServlet來說,doGet()會調用doPost(),所以無論請求是GET或POST在行為上都是相同的。ActionServlet藉由組態檔struts- config.xml知 道如何分配物件來處理請求,這包括了org.apache.struts.action.ActionMapping、 org.apache.struts.action.ActionForm、org.apache.struts.action.Action等物件的分 配,struts-config.xml是整個Struts運作的重心。

ActionServlet會將處理的控制權暫時交給Action物件,在Action中,您可以藉由一些資料傳輸物件(Data Transfer Object)、輔助類別(Helper Class)等Model來完成商務請求,Struts使用JSP/Servlet的setAttribute()和 getAttribute()方法來與View進行溝通。Action應當傳回ActionForward物件給ActionServlet,之後 ActionServlet根據 ActionForward中的資訊來進行forward或include View的動作,由View抽取Model資料並顯示處理的結果。

Struts的View部份可以是靜態網頁、JSP網頁、Struts自訂標籤,Struts自訂標籤可以與Struts的一些物件及資源檔案合作使用,也配合使用其它自訂標籤,像是JSTL、JSF等。

Struts 1.1後新增org.apache.struts.action.RequestProcessor類 別,有關於使用者請求的物件分配等動作已經大部份交由RequestProcessor來處理,下圖是ActionServlet接收到請求之後的一些主 要動作,在之後的各主題說明中,您可以藉由這張圖您將可以瞭解struts-config.xml的組態設定意義,以及Struts運作的方式:
Struts 工作流程