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

基於 Struts 框架的 MVC Web 應用開發實戰指南

     編輯:Java 相關知識

Model-View-Controller (MVC) 模式早已成為 Web 應用架構的標準。Apache Struts 作為最早、最成熟的 Java MVC 框架,提供高度可配置、可擴展的組件模型,讓開發者專注於業務邏輯而非基礎設施代碼。本文從 MVC 理論出發,通過手寫簡易框架對比,深度解析 Struts 核心組件與最佳實踐。

MVC 演進:從 Model 1 到 Model 2

  • Model 1 (JSP/Servlet 單層):業務邏輯與展示混雜,維護困難,頻繁重編譯。
  • Model 2 (JSP + Servlet 分工):Servlet 作為 Controller 處理請求、控制流轉、調用 Model (JavaBean/EJB);JSP 作為 View 渲染結果。這正是 MVC 在 Web 風味的實踐。

核心三層交互流程

MVC/Model2 架構圖

圖 1:Model 2 / MVC 架構

  1. 用戶提交請求 → Controller (Servlet) 接收
  2. Controller 實例化 Model (JavaBean),執行業務邏輯
  3. Controller 選擇下一個 View (JSP),轉發請求
  4. View 讀取 Model 數據,渲染響應
  5. 用戶在 View 交互,再次提交請求,循環往複

手寫簡易 MVC 框架:登錄示例

View 層

  • login.jsp:輸入用戶名/密碼,表單提交到 Controller,攜帶 action=login 參數
  • welcome.jsp:從 Session 讀取 UserBean,顯示歡迎信息

Controller 層

  • ControllerServlet:根據 action 參數分發到對應 Action 類
  • Action 接口:execute(Request, Response) : String 返回下一頁路徑
  • LoginAction:驗證用戶,創建 UserBean 放入 Session,返回 /welcome.jsp

Model 層

  • UserBean:簡單 JavaBean,封裝用戶屬性,無持久化邏輯

Struts 框架:現成的 MVC 基礎設施

Struts 1.1 (2001) 成為 Apache Jakarta 項目,廣泛應用於電信、電商等領域。其核心優勢:

  • 內置 ActionServlet 作為前端控制器,統一請求分發
  • 聲明式配置 struts-config.xml 管理 Action 映射、表單驗證、頁面流轉
  • 豐富標籤庫 (html, bean, logic) 簡化 JSP 開發,支持國際化、表單自動綁定、錯誤顯示
  • ActionForm 作為表單數據載體,自動填充、驗證,屬 Controller 組件而非 Model

View 層:Struts 標籤庫實戰

<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<html:html>
  <body>
    <html:errors/>
    <html:form action="/logon">
      <html:text property="username"/>
      <html:password property="password"/>
      <html:submit/>
    </html:form>
  </body>
</html:html>

無 Scriptlet 混雜,表單自動綁定 ActionForm,<html:errors> 自動顯示驗證錯誤。

Controller 層:Action 與 ActionForm

// ActionForm:表單數據載體,僅含 getter/setter
public class LoginForm extends ActionForm {
    private String username, password;
    // getter/setter...
}

// Action:業務處理入口
public class LoginAction extends Action {
    public ActionForward execute(ActionMapping mapping, ActionForm form,
                                 HttpServletRequest req, HttpServletResponse res) {
        LoginForm f = (LoginForm) form;
        if ("sam".equalsIgnoreCase(f.getUsername()) && "password".equals(f.getPassword())) {
            return mapping.findForward("success");  // 對應 struts-config.xml 定義
        }
        return mapping.findForward("failure");
    }

    // 表單驗證(可選)
    public ActionErrors validate(ActionMapping mapping, HttpServletRequest req) {
        ActionErrors errors = new ActionErrors();
        if (getUsername() == null || getUsername().length() == 0)
            errors.add("name", new ActionError("error.name.required"));
        return errors;
    }
}

Model 層:技術無關的領域對象

Struts 不綁定 Model 實現技術,可用 EJB、Hibernate、JDO、簡單 JavaBean。建議 Model 與 ActionForm 分離,便於復用。

聲明式配置:struts-config.xml 核心

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

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

  <message-resources parameter="ApplicationResources"/>  <!-- 國際化資源 -->
</struts-config>

完整示例:Struts 實現登錄功能

登錄頁 (login.jsp)

<html:form action="/ProcessLogin">
  <html:errors/>
  <html:text property="username"/>
  <html:password property="password"/>
  <html:submit/>
</html:form>

歡迎頁 (welcome.jsp)

<bean:write name="loginForm" property="username"/>

配置文件關鍵點

  • validate="true" 啟用 ActionForm.validate()
  • input="/Login.do" 驗證失敗返回頁面
  • <message-resources> 綁定屬性文件,錯誤碼如 error.name.required 映射到具體文本

運行效果

登錄頁

歡迎頁

錯誤頁

總結與展望

Struts 將 MVC 模式工程化、標準化,通過配置而非代碼控制流程,大幅提升開發效率與可維護性。雖然後續 Spring MVC、Struts 2 等框架更先進,但理解 Struts 1.x 的核心設計(前端控制器、ActionForm、聲明式配置)對掌握現代 Web 框架本質極有幫助。

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