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

Struts 框架核心架構解析:MVC 模式在 J2EE 中的經典落地

     編輯:Java 程式設計入門

Struts 定位:J2EE 時代的 MVC 先驅

Struts 是 Apache Jakarta 項目組的開源框架,基於 MVC 設計模式,將「顯示邏輯」與「業務邏輯」徹底分離。憑藉 ActionServlet 前端控制器、ActionForm 表單數據封裝、Action 業務處理、struts-config.xml 集中配置等核心組件,Struts 成為早期 J2EE Web 開發的事實標準,深刻影響了後續 Spring MVC、WebWork 等框架設計。

架構三層詳解

模型層 —— 業務與數據的封裝

  • ActionForm:表單數據載體,對應 JSP 表單字段,提供 validate() 客戶端/服務端校驗,reset() 初始化。大型應用建議僅作數據傳輸(DTO),業務邏輯下沉至 Service/EJB。
  • 業務組件:Action 調用的 POJO/EJB/Spring Bean,封裝具體業務流程(如 CheckoutService、OrderDAO)。Struts 不強制持久化技術,兼容 JDBC、Hibernate、iBATIS、JPA 等。

視圖層 —— 頁面渲染與標籤庫

  • JSP + JSTL/EL:主流視圖技術,配合 Struts 標籤庫(html、bean、logic、nested、tiles)實現表單綁定、國際化、邏輯控制、佈局複用。
  • 擴展視圖技術:Velocity、FreeMarker、XSLT、JSF 等均可通過 ViewResolver 機制整合。

控制器層 —— 請求分發核心

  • ActionServlet:唯一前端控制器,啟動時加載 struts-config.xml,將請求路徑映射至 ActionMapping。
  • ActionMapping:封裝路徑、Action 類、ActionForm 名稱、作用域、驗證開關、轉發規則(ActionForward)。
  • Action:業務處理入口,execute() 方法接收 ActionForm、請求、響應,返回 ActionForward 指定下一視圖。
  • RequestProcessor:處理請求生命周期(填充 Form、驗證、實例化 Action、調用 execute、轉發),可子類化定制。

工作流程:請求到響應的完整鏈路

  1. 用戶提交請求 /login.do。
  2. ActionServlet 接收,查找 ActionMapping(path=/login)。
  3. 創建/獲取 ActionForm(name=loginForm, scope=request),自動填充請求參數。
  4. 調用 ActionForm.validate(),失敗則按 input 屬性返回錯誤頁。
  5. 實例化 Action(type=com.app.LoginAction),調用 execute()。
  6. Action 委託 Service 處理業務,根據結果返回 ActionForward(name=success/failure)。
  7. ActionServlet 根據 ActionForward 轉發(forward)或重定向(redirect)至目標 JSP/URL。
  8. 視圖渲染響應返回瀏覽器。

核心配置文件:struts-config.xml

<struts-config>
    <form-beans>
        <form-bean name="loginForm" type="com.app.form.LoginForm"/>
    </form-beans>

    <action-mappings>
        <action path="/login"
                type="com.app.action.LoginAction"
                name="loginForm"
                scope="request"
                validate="true"
                input="/login.jsp">
            <forward name="success" path="/welcome.jsp"/>
            <forward name="failure" path="/login.jsp"/>
        </action>
    </action-mappings>

    <message-resources parameter="ApplicationResources"/> <!-- 國際化 -->
    <plug-in className="org.apache.struts.tiles.TilesPlugin"/> <!-- Tiles 佈局 -->
</struts-config>

Struts 1.x 關鍵組件關係圖

Struts 核心組件關係

圖:ActionServlet、ActionForm、Action 交互關係

優缺點與歷史定位

優點缺點
成熟穩定、文檔豐富、社區龐大ActionForm 強耦合 Servlet API,難以單元測試
標籤庫豐富、國際化、Tiles 佈局強大配置文件繁瑣,大型項目維護困難
請求處理流程可定制(RequestProcessor)非 IoC 容器,依賴查找而非依賴注入
與 J2EE 生態(EJB、JTA、JAAS)無縫整合單線程 Action 實例需開發者自行保證線程安全

總結

Struts 將 MVC 模式在 Servlet/JSP 基礎上工程化、標準化,其「前端控制器 + 配置驅動 + 標籤庫」架構思想至今仍是現代 Web 框架(Spring MVC、Struts2、JSF)的基因來源。雖然 Struts 1.x 已進入維護模式,但研讀其源碼與設計哲學,對理解 Web 框架本質、掌握 MVC 精髓仍具極高價值。

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