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

Struts 遷移至 Struts 2 完整指南:架構差異與核心概念解析

     編輯:Java 相關知識

由資深技術顧問 Ian Roughley 撰寫,本系列文章將透過一個實際的 Struts 應用遷移案例,深入淺出地展示 Struts 2 的核心特性與優勢。Roughley 擁有超過十年的架構設計與敏捷開發經驗,專注於務實且結果導向的技術方案。

Struts 2 核心架構演進

Struts 1.x 於 2001 年問世,確立了前端控制器與 MVC 模式在 Java Web 開發的標準地位。隨著 WebWork 框架(2002 年發布)引入攔截器鏈、依賴注入等創新機制,Struts 社群在 2005 年決定將 Struts Ti 與 WebWork 合併,正式推出 Struts 2(原稱 Struts Action Framework 2.0)。值得注意的是,Struts 1.x 與 WebWork 並未停止維護,兩者仍持續修復錯誤與增強功能。

請求處理流程:六步驟解析

Struts 2 仍採用前端控制器模式,但引入了 Pull-MVC 架構——視圖層直接從 Action 實例拉取資料,無需像 Struts 1 那樣將資料放入 request/session scope。完整請求週期包含六個階段:

  1. 配置匹配:框架根據請求 URL 解析攔截器鏈、Action 類別與結果配置
  2. 攔截器前置處理:請求依序通過攔截器(如參數注入、驗證、檔案上傳等橫切關注點)
  3. Action 執行:建立新的 Action 實例,調用指定方法(預設 execute(),可配置)
  4. 結果渲染:根據 Action 返回的字串結果(如 "success")匹配對應的 Result 類型(JSP、FreeMarker、JSON 等)
  5. 攔截器後置處理:請求反向通過攔截器鏈,執行清理或額外邏輯
  6. 響應返回:控制權交還 Servlet 容器,輸出 HTML 或執行重導向

Struts 2 請求處理流程圖

關鍵配置差異:從 Servlet 到 Filter

Struts 1 在 web.xml 中配置 ActionServlet,而 Struts 2 改用 FilterDispatcher(Struts 2.5+ 為 StrutsPrepareAndExecuteFilter):

<filter>
  <filter-name>struts2</filter-name>
  <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

預設 Action 副檔名為 .action(可在 struts.properties 修改),與 Struts 1 的 .do 不衝突,支援新舊系統共存漸進式遷移。

Action 設計革命:POJO 與依賴注入

Struts 1 Action 必須繼承基類、實作執行緒安全的 execute()、透過參數取得 Servlet API。Struts 2 Action 則是純 POJO:

public class UserAction {
    private UserService userService;  // 依賴注入
    private HttpServletRequest request; // 透過 ServletRequestAware 注入
    
    public String execute() {
        // 業務邏輯
        return "success";
    }
    
    public void setUserService(UserService userService) { this.userService = userService; }
    public void setServletRequest(HttpServletRequest request) { this.request = request; }
}

優勢顯而易見:

  • 每請求一實例,天然執行緒安全
  • 不依賴框架 API,單元測試極簡單
  • 支援多方法映射(@Action 或 XML 配置)
  • 結果以字串或 Action.SUCCESS 常數返回

攔截器機制:取代 RequestProcessor

Struts 2 以攔截器堆疊取代 Struts 1 的 RequestProcessor 鏈。預設堆疊 defaultStack 包含參數準備、模型驅動、驗證、工作流、檔案上傳等 20+ 攔截器,可依需求組合或自訂。

總結與後續展望

掌握 Struts 2 的 Pull-MVC 架構、Filter 配置、POJO Action 與攔截器機制,即具備遷移既有應用的核心知識。下一篇將實戰示範 Action 遷移細節、struts.xml 配置技巧、UI 標籤庫與主題客製化,助你平滑升級至現代化 Web 框架。

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