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

Struts 1.x 框架實戰:登錄功能實現與 ActionForm 表單處理器深度解析

     編輯:Java 相關知識

Struts 1.x 登錄模塊完整實現步驟

Apache Struts 1.x 是早期 Java Web 開發的經典 MVC 框架。雖然已停止維護,但理解其核心機制有助於掌握現代框架(如 Spring MVC)的設計思想。本文通過一個完整的用戶登錄案例,詳細拆解 Struts 的配置流程、核心組件協作及表單處理器 ActionForm 的進階用法。

1. 環境準備與 JAR 包導入

創建 Java Web 項目,將 Struts 1.2.9 lib 目錄下的所有 JAR 包複製到項目的 WEB-INF/lib 目錄下。

2. 核心控制器配置

在 web.xml 中配置 ActionServlet 作為前端控制器,攔截所有 *.do 請求。

<servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
        <param-name>config</param-name>
        <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <init-param>
        <param-name>debug</param-name>
        <param-value>2</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

3. 表單數據封裝

創建 LoginActionForm 繼承 ActionForm,屬性對應 JSP 表單字段,提供 Getter/Setter。

public class LoginActionForm extends ActionForm {
    private String username;
    private String password;
    // Getter/Setter 方法省略...
    
    // 可選:覆寫 validate() 實現服務端校驗
    @Override
    public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
        ActionErrors errors = new ActionErrors();
        if (username == null || username.trim().isEmpty()) {
            errors.add("username", new ActionMessage("error.username.required"));
        }
        return errors;
    }
}

4. 業務邏輯控制器

LoginAction 繼承 Action,覆寫 execute 方法,處理業務邏輯並返回轉向。

public class LoginAction extends Action {
    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
                                 HttpServletRequest request, HttpServletResponse response) {
        LoginActionForm loginForm = (LoginActionForm) form;
        String username = loginForm.getUsername();
        String password = loginForm.getPassword();

        UserManager userManager = new UserManager();
        try {
            userManager.login(username, password); // 業務邏輯驗證
            request.setAttribute("username", username);
            return mapping.findForward("success"); // 跳轉成功頁
        } catch (UserNotFoundException e) {
            request.setAttribute("msg", "用戶不存在: " + username);
        } catch (PasswordErrorException e) {
            request.setAttribute("msg", "密碼錯誤");
        }
        return mapping.findForward("error"); // 跳轉失敗頁
    }
}

5. 核心配置文件

struts-config.xml 將 Action、FormBean、Forward 關聯起來。

<struts-config>
    <form-beans>
        <form-bean name="loginForm" type="com.example.struts.LoginActionForm"/>
    </form-beans>
    <action-mappings>
        <action path="/login" 
              type="com.example.struts.LoginAction" 
              name="loginForm" 
              scope="request"
              validate="true"
              input="/login.jsp">
            <forward name="success" path="/login_success.jsp"/>
            <forward name="error" path="/login_error.jsp"/>
        </action>
    </action-mappings>
</struts-config>

6. 視圖層實現

使用 Struts HTML 標簽庫綁定表單數據。login.jsp、login_success.jsp、login_error.jsp。


深度解析:ActionForm 表單處理器

靜態 ActionForm vs 動態 ActionForm

  • 靜態 ActionForm:為每個表單編寫一個 Java 類,類型安全,IDE 支持好,但類數量多,維護成本高。
  • 動態 ActionForm (DynaActionForm):在 struts-config.xml 中聲明屬性,無需編寫 Java 類,靈活適合頻繁變動的表單,但失去編譯期類型檢查。

DynaActionForm 配置示例

<form-beans>
    <form-bean name="dynaForm" type="org.apache.struts.action.DynaActionForm">
        <form-property name="username" type="java.lang.String" />
        <form-property name="age" type="java.lang.Integer"/>
    </form-bean>
</form-beans>

在 Action 中使用:

DynaActionForm dynaForm = (DynaActionForm) form;
String username = (String) dynaForm.get("username");
Integer age = (Integer) dynaForm.get("age");

ActionForm 設計最佳實踐

  1. 每個表單對應一個 ActionForm(或共用邏輯相同的 Form)。
  2. 屬性名必須與 JSP 表單 name 屬性完全一致。
  3. 必須提供無參構造函數及標準 Getter/Setter。
  4. 利用 validate() 方法實現服務端數據校驗,失敗時自動返回 input 指定頁面並回顯數據。

總結

Struts 1.x 通過 ActionServlet 統一入口,配合 struts-config.xml 解耦請求映射、表單封裝、業務邏輯與視圖轉向。ActionForm 作為表單數據的載體,極大簡化了 request.getParameter 的繁瑣操作,並內建驗證與數據回顯機制,是早期 MVC 模式在 Java Web 中的經典落地。

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