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

Struts 框架核心原理與 1.1 新特性深度解析:從 Model 2 到多模塊架構

     編輯:Java 相關知識

Struts 是基於 Model 2 實現的經典 MVC 框架,Model 2 是 MVC 在無狀態 HTTP 環境下的 Web 適配變體。本文系統梳理 Struts 核心執行流程、MVC 映射關係,並重點講解 Struts 1.1 引入的多模塊、動態 ActionForm、聲明式異常處理三大里程碑特性。

一、Struts MVC 架構與執行流程

圖 1 展示典型 Java MVC 與 J2EE 技術映射:

圖 1 MVC 與 J2EE 技術對應

Struts 具體實現(圖 2):

圖 2 Struts MVC 實現

七步執行流程

  1. 框架初始化:ActionServlet(總控制器)啟動時讀取 struts-config.xml,初始化各模塊 ModuleConfig,截獲所有 *.do 請求
  2. 客戶端發送 HTTP 請求:表單提交或 URL 調用
  3. 總控制器攔截並實例化 Form Bean:從 ActionConfig 找對應 Action,若有 ActionForm 則實例化、填充屬性、放入 request/session,可選調用 validate() 驗證,失敗則返回輸入頁
  4. 轉交具體 Action 處理:將請求與 Form Bean 傳給 Action.execute()
  5. Action 執行業務邏輯:調用 Service/DAO,完成業務操作
  6. 返回 ActionForward:封裝轉發目標(JSP 或另一 Action)
  7. 總控制器轉發至目標響應:通常為 JSP 頁面渲染結果

活動圖 3 更直觀描述中間過程:

圖 3 Struts 接受並返回響應的中間過程

二、Struts 1.1 三大核心新特性

1. 多模塊支援:解決大型團隊並行開發衝突

Struts 1.0 單一 struts-config.xml 導致多人修改衝突。1.1 提供兩級方案:

方案 A:多配置文件合併

<init-param>
  <param-name>config</param-name>
  <param-value>/WEB-INF/struts-config.xml, /WEB-INF/book-struts-config.xml</param-value>
</init-param>

優點:按模塊劃分文件,減少衝突。缺點:初始化時仍合併為一個 ModuleConfig,不同文件定義同名 <exception> 等會衝突。

方案 B:獨立模塊(推薦)

<init-param>
  <param-name>config</param-name>
  <param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
  <param-name>config/book</param-name>  <!-- 模塊前綴 /book -->
  <param-value>/WEB-INF/book-struts-config.xml</param-value>
</init-param>

每個模塊擁有獨立 ModuleConfig、命名空間,徹底隔離配置衝突。訪問 URL 如 /book/loginAction.do。

2. 動態 ActionForm (DynaActionForm):減少樣板代碼

傳統 ActionForm 需為每個表單寫 Java 類。DynaActionForm 僅在配置文件聲明屬性,框架動態創建實例(底層用 Map 存儲)。

<form-bean name="bookForm" type="org.apache.struts.action.DynaActionForm">
  <form-property name="bookId" type="java.lang.String"/>
  <form-property name="isbn" type="java.lang.String"/>
  <form-property name="bookName" type="java.lang.String"/>
  <form-property name="author" type="java.lang.String"/>
</form-bean>

使用時:String name = (String) form.get("bookName")。需校驗時改用 DynaValidatorForm,配合 validation.xml + validator-rules.xml 實現聲明式驗證。

3. 聲明式異常處理:拋棄硬編碼 try-catch

在 struts-config.xml 定義異常映射:

<global-exceptions>
  <exception key="sqlexception" type="java.sql.SQLException" path="/sqlFail.htm"/>
</global-exceptions>

Action 中直接 throws SQLException,框架自動捕獲並轉向 /sqlFail.htm。優點:異常處理集中化、可配置、Action 代碼專注業務邏輯。

三、總結

特性解決問題核心機制
多模塊大型團隊配置文件衝突獨立 ModuleConfig + URL 前綴隔離
DynaActionForm大量表單導致 ActionForm 類爆炸配置元數據 + Map 動態實例
聲明式異常Action 中重複 try-catch、異常頁面硬編碼全局異常映射表 + 框架自動攔截轉發

Struts 1.1 這三大特性標誌著框架從「小項目適用」邁向「企業級大型應用」的成熟階段,配合 JBuilder 2005 等 IDE 的可視化支持,極大提升了開發效率與代碼可維護性。

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