在 Struts 架構中,Controller 主要由 ActionServlet 擔任,但業務邏輯操作則由 Action、ActionMapping、ActionForward 協同完成。其中 Action 扮演真正業務邏輯實現者,ActionMapping 與 ActionForward 指定不同業務流程的執行方向。
應用程式的 Controller 部分專注於:接收客戶端請求(通常是瀏覽器用戶)、決定執行何種商業邏輯功能、將生成下一步用戶介面的責任委派給適當的 View 組件。在 Struts 中,Controller 基礎組件是 ActionServlet 類別的 Servlet。該 Servlet 透過一組映射(由 Java 介面 ActionMapping 描述)配置。每個映射定義一個與請求 URI 相匹配的路徑,以及一個 Action 類別(實作 Action 介面)的完整類名,負責執行預期商業邏輯,再將控制權分派給適當的 View 組件產生回應。
Struts 也支援擴充 ActionMapping 類別以包含標準屬性以外的額外屬性,允許保存應用專屬資訊同時享用框架其餘特性。此外,Struts 允許定義控制重導向的邏輯名,行為方法可請求「主選單」頁面而不需知道對應 JSP 實際檔名,極大分離控制邏輯(下一步做什麼)與顯示邏輯(頁面名稱)。圖 1 為 Struts Controller 組件示意圖。

Struts 包含一個實現「請求 URI 映射至 Action 類別」主要功能的 Servlet。我們與 Controller 相關的主要職責:
Action 類別(實作 Action 介面)。ActionMapping 類別(實作 ActionMapping 介面)。Action 介面定義單一必須實作的方法:
public ActionForward perform(ActionServlet servlet,
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException;
Action 類別目標:處理請求,返回標識 JSP 頁面的 ActionForward 物件,控制應重導向該 JSP 生成回應。Struts 架構對每個 Action 類別僅建立一個實例,服務所有用戶請求,故必須確保 Action 類別在多執行緒環境下正確運作。圖 2 顯示 execute() 方法如何被存取。

注意:自訂 Action 子類別必須覆寫 execute() 方法,因預設返回 null。
ValidatingActionForm),驗證 Form Bean 屬性。發現問題則儲存錯誤訊息鍵值至請求屬性,重導向回輸入表單修正。ActionForward 物件,基於新近更新的 Bean。通常透過接收的 ActionMapping 調用 findForward() 取得(邏輯名局部於映射),或在 Controller Servlet 上調用(全域邏輯名)。Action 實例服務所有請求,需編寫執行緒安全的程式碼,如同編寫 Servlet service() 方法。Action 類別僅使用區域變數而非實例變數。區域變數建立於各請求執行緒的堆疊,無共享風險。perform() 中捕獲所有這類例外,並記錄至應用日誌(含堆疊追蹤)。