首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Struts1 核心組件詳解(三):五大核心類職責與協作

     編輯:Java 相關知識

Struts 1 採用經典 MVC 架構,其核心由五大組件構成,分別對應請求處理的關鍵環節:

  • ActionServlet:前端控制器,統籌請求分發
  • ActionForm:表單數據封裝與驗證
  • ActionMapping:請求路徑到業務邏輯的映射配置
  • Action:業務邏輯控制器
  • ActionForward:結果視圖導向

ActionForm:表單數據的守門人

基本約定

  • 屬性名必須與表單欄位 name 一致
  • 需繼承 org.apache.struts.action.ActionForm
  • 提供 get/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 等多種字串表示。若內建類型不足,可自訂轉換器(詳見《自定義轉換器》)。

DynaActionForm:零程式碼表單

透過 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}。

ActionForward:視圖導向的藝術

轉發 vs 重導向

  • 預設 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;

缺點:破壞配置集中管理優勢,降低擴展性與維護性。

Action:業務邏輯中樞

核心職責:獲取參數 → 調用 Model → 返回轉向。

常用子類

  • ForwardAction:等同配置 <forward>,但執行流程不同(不會提前 return)
  • DispatchAction:單一 Action 類處理多個邏輯方法(詳見《詳解 DispatchAction》)

ActionMapping 進階屬性

unknown="true"

捕獲 404 請求,統一導向錯誤頁:<action forward="/unknown.jsp" unknown="true"></action>

input 屬性

簡化配置:直接指定輸入頁,失敗時自動返回,省去 <forward name="input"> 標籤。

input屬性配置示例

input屬性跳轉流程

總結

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

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved