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

Struts 1.x 快速入門實戰:核心組件、配置詳解與優缺點深度評析

     編輯:Java 相關知識

Struts 1.x 作為經典 MVC 框架,雖已退出歷史舞台,但其設計思想 (Front Controller、ActionForm、Action、struts-config.xml) 深刻影響後世框架。本文以用戶註冊為例,完整演示 Struts 1.x 開發流程、核心配置解析、優缺點評析與實施經驗。

環境搭建

  1. 下載 Struts 1.1/1.2/1.3 Release 版 ZIP
  2. 解壓,將 `webapps/*.war` 複製至 Tomcat `webapps/`,重啟驗證
  3. 專案建立:複製 `struts-example/WEB-INF` 至新專案,清空 `src`、`classes`、`struts-config.xml`

核心組件開發

1. JSP 頁面 (使用 Taglib)


<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>

用戶註冊



登錄名:
密碼:
Email:

2. Form Bean (ActionForm)


package org.cjea.struts.example;

import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.*;

public class RegUserForm extends ActionForm {
    private String logname;
    private String password;
    private String email;
    
    // Getter/Setter
    public String getLogname() { return logname; }
    public void setLogname(String logname) { this.logname = logname; }
    public String getPassword() { return password; }
    public void setPassword(String password) { this.password = password; }
    public String getEmail() { return email; }
    public void setEmail(String email) { this.email = email; }
    
    // 重置 (可選)
    public void reset(ActionMapping mapping, HttpServletRequest request) {
        logname = password = email = null;
    }
    
    // 校驗 (可選,配合 Validator)
    public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
        ActionErrors errors = new ActionErrors();
        if (logname == null || logname.trim().isEmpty()) {
            errors.add("logname", new ActionMessage("error.logname.required"));
        }
        return errors;
    }
}

3. Action (控制器)


package org.cjea.struts.example;

import javax.servlet.http.*;
import org.apache.struts.action.*;

public class RegUserAction extends Action {
    public ActionForward execute(ActionMapping mapping, ActionForm form,
                                 HttpServletRequest request, HttpServletResponse response) {
        RegUserForm userForm = (RegUserForm) form;
        String logname = userForm.getLogname();
        String password = userForm.getPassword();
        String email = userForm.getEmail();
        
        // 業務邏輯 (應委派給 Service)
        boolean success = userService.register(logname, password, email);
        
        return mapping.findForward(success ? "success" : "failure");
    }
}

4. 核心配置 struts-config.xml



    
    
        
    
    
    
    
        
            
            
        
    
    
    

5. web.xml 關鍵配置



    action
    org.apache.struts.action.ActionServlet
    
        config
        /WEB-INF/struts-config.xml
    
    1


    action
    *.do

架構演變:Servlet → Struts 三層拆分

傳統 ServletStruts 拆分
單一 Servlet 處理導航、參數獲取、業務邏輯ActionServlet (導航) + FormBean (參數封裝) + Action (業務控制)
硬編碼轉發/重定向struts-config.xml 聲明式導航
手工 request.getParameter()ActionForm 自動填充、類型轉換、校驗

優缺點深度評析

優點

  • 開源、成熟、社群龐大:大量實戰案例、第三方擴展
  • 聲明式導航:`struts-config.xml` 集中管理頁面流向,維護性極佳
  • Taglib 豐富:HTML、Bean、Logic、Tiles、Template 標籤庫,提升 JSP 開發效率
  • 國際化、校驗框架內建:`Validator`、`MessageResources` 降低樣板代碼
  • Tiles 模板框架:頁面組合、佈局復用、動態組裝

缺點

  • 學習曲線陡峭:Taglib、Validator、Tiles、ActionForm 生命週期、模組化配置
  • ActionForm 與業務對象重複:導致大量屬性複製代碼 (後來 DTO/VO 模式緩解)
  • 單 ActionServlet 瓶頸:所有請求經單一入口,擴展性受限
  • 配置文件膨脹:大型項目 `struts-config.xml` 達數萬行,模組化管理複雜
  • 非侵入性差:繼承 `ActionForm`/`Action`,難以單元測試、遷移成本高
  • JSP 強耦合:難以支援前端分離、REST API、現代前端框架

實施經驗總結

  1. 專人維護 struts-config.xml:模組化拆分、合併衝突解決
  2. 團隊技能評估:無經驗團隊緊迫項目慎用,預留 2-3 週學習期
  3. Taglib 取捨:核心 HTML/Bean 標籤必學;Logic/Tiles 視項目複雜度決定
  4. 適用專案規模:中大型項目優勢明顯 (導航管理、國際化、模板);小型項目輕量框架更合適
  5. 遷移策略:Struts 1.x → Struts 2 / Spring MVC / Spring Boot,保留 Service/DAO 層,重寫 Web 層

總結

Struts 1.x 確立了 Java Web MVC 標準化範式:Front Controller + 聲明式導航 + 表單封裝校驗 + 標籤庫。雖技術棧老舊,但其架構思想在 Spring MVC、Struts 2、JSF、甚至前端路由中延續。理解 Struts 1.x 有助於掌握 MVC 本質、框架演進脈絡、遺留系統維護與遷移決策。

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