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

Struts 框架深度剖析:MVC Model 2 實作與標籤庫實戰

     編輯:Java 相關知識

從單一 JSP 到 MVC 的演進

早期 JSP 常將資料存取、業務邏輯、流程控制與 HTML 混雜在單一頁面,導致強耦合、難測試、難維護。Struts 作為 MVC Model 2 的開源實作,透過 ActionServlet (Controller)、ActionForm (表單狀態)、Action (業務包裝) 三大核心類別,配合 struts-config.xml 集中管理流程,實現關注點分離。

核心架構圖解

Client Browser
    │ HTTP Request
    ▼
ActionServlet (Front Controller)
    │ 依 struts-config.xml 映射
    ├──→ ActionForm (自動填入表單資料、驗證)
    │
    └──→ Action (業務邏輯薄包裝)
           │ 呼叫 Business Layer (EJB/POJO/Service)
           ▼
       ActionForward (決定下一個視圖)
           │
           ▼
       JSP View (僅含 Struts 標籤、EL、JSTL)

關鍵類別職責

類別角色關鍵特性
ActionServletCommand 模式實作,唯一前端控制器啟動時載入 struts-config.xml,將請求分派給對應 Action
ActionForm表單資料載體 (Request/Session Scope)自動對應 request.getParameter(),提供 validate() 鉤子
ActionAdapter 模式,包裝實際業務邏輯execute() 回傳 ActionForward,不應包含業務細節
ActionMapping單一請求映射資訊容器包含 path、type、name、input、forwards 等屬性

Struts 標籤庫優勢

  • HTML 標籤:<html:form> 自動產生 action、focus、JavaScript 驗證腳本。
  • Bean/Logic 標籤:<bean:write>、<logic:iterate> 替代 Scriptlet。
  • 訊息外部化:<bean:message key="..."/> 支援國際化 (i18n)。
  • 錯誤顯示:<html:errors/> 自動渲染 ActionErrors。

實戰重構範例:郵件列表註冊

原始 join.jsp (50 行,含 Java 程式碼)

重構後 joinMVC.jsp (19 行,零 Java 程式碼)

<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<html:form action="/join" focus="email">
  <html:text property="email" size="30" maxlength="30"/>
  <html:submit property="submit" value="Submit"/>
</html:form>
<html:errors/>

配置片段 struts-config.xml

<action path="/join"
        name="joinForm"
        type="web.mailinglist.JoinAction"
        scope="request"
        input="/joinMVC.jsp"
        validate="true">
  <forward name="success" path="/welcome.html"/>
</action>

優缺點權衡與現代視角

優點缺點/限制
標準化 MVC、集中式流程控制、豐富標籤庫、開源社群框架本身複雜度高、學習曲線陡峭、早期版本變動大
關注點分離、頁面設計師與開發者並行作業僅適用 Web 層、Action 為類而非介面、客戶端驗證/工作流支援較弱

現代建議:新專案優先考慮 Spring MVC、Spring Boot 或 Jakarta EE (JSF, JAX-RS)。Struts 1.x 已停止維護,僅供維護舊系統參考。

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