Struts 1 採用經典 MVC 架構,其核心由五大組件構成,分別對應請求處理的關鍵環節:
name 一致org.apache.struts.action.ActionFormget/set 方法供框架自動填充validate() 實現伺服端校驗reset() 在表單重用前重置狀態框架利用 BeanUtils 轉換器實現字串到基本類型的自動轉換,初始化於 ActionServlet.initOther():
ConvertUtils.register(new BigDecimalConverter(null), BigDecimal.class); ConvertUtils.register(new BigIntegerConverter(null), BigInteger.class); ConvertUtils.register(new BooleanConverter(null), Boolean.class); ConvertUtils.register(new ByteConverter(null), Byte.class); ConvertUtils.register(new CharacterConverter(null), Character.class); ConvertUtils.register(new DoubleConverter(null), Double.class); ConvertUtils.register(new FloatConverter(null), Float.class); ConvertUtils.register(new IntegerConverter(null), Integer.class); ConvertUtils.register(new LongConverter(null), Long.class); ConvertUtils.register(new ShortConverter(null), Short.class);
所有轉換器實現 Converter 介面:
public Object convert(Class type, Object value);
以 BooleanConverter 為例,支援 yes/y/true/on/1 → true、no/n/false/off/0 → false 等多種字串表示。若內建類型不足,可自訂轉換器(詳見《自定義轉換器》)。
透過 struts-config.xml 宣告式定義:
<form-beans>
<form-bean name="dynaForm" type="org.apache.struts.action.DynaActionForm">
<form-property name="username" type="java.lang.String" />
<form-property name="age" type="java.lang.Integer" />
</form-bean>
</form-beans>
頁面取值語法:${dynaForm.map.username}、${dynaForm.map.age}。
mapping.findForward() 為請求轉發redirect="true":<forward name="login" path="/login.jsp" redirect="true"/>將 JSP 放置於 /WEB-INF/ 目錄下,可防止用戶通過 URL 直接訪問,強制經過 Action 控制器。
配置文件啟動即載入記憶體,運行期不可修改。若必須動態跳轉,僅能在 Action 中硬編碼:
// 方式一:直接重導向
response.sendRedirect(request.getContextPath() + "/login.jsp");
return null;
// 方式二:動態構建路徑
ActionForward af = new ActionForward();
af.setPath("/" + page + ".jsp");
return af;
缺點:破壞配置集中管理優勢,降低擴展性與維護性。
核心職責:獲取參數 → 調用 Model → 返回轉向。
<forward>,但執行流程不同(不會提前 return)捕獲 404 請求,統一導向錯誤頁:<action forward="/unknown.jsp" unknown="true"></action>
簡化配置:直接指定輸入頁,失敗時自動返回,省去 <forward name="input"> 標籤。


Struts 1 核心組件各司其職,通過配置文件實現鬆耦合協作。國際化、異常處理、標籤庫等實用特性屬於進階應用範疇,不在本文討論範圍。