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

JPetStore 基於 Struts+Spring+iBATIS 用戶模塊深度分析

     編輯:Java 相關知識

專案背景

JPetStore 是 Spring 官方示例項目,展示 Struts 1.x + Spring + iBATIS 輕量級 J2EE 架構。本文聚焦用戶管理模塊(登錄、註冊、編輯賬號),剖析 ActionForm 設計、Action 流程、Spring 整合要點。

Struts 配置核心片段

Form Bean 定義

<form-beans>
    <!-- 登錄專用 -->
    <form-bean name="accountForm" type="org.springframework.samples.jpetstore.web.struts.AccountActionForm"/>
    <!-- 註冊/編輯專用 -->
    <form-bean name="workingAccountForm" type="org.springframework.samples.jpetstore.web.struts.AccountActionForm"/>
    <form-bean name="cartForm" type="..."/>
    <form-bean name="emptyForm" type="..."/>
    <form-bean name="workingOrderForm" type="..."/>
</form-beans>

同一 AccountActionForm 定義兩個實例,分離登錄與註冊/編輯的會話狀態,避免數據污染。

Action 映射流程

  1. 登錄:
    <action path="/shop/signonForm" type="...DoNothingAction" validate="false">
        <forward name="success" path="/WEB-INF/jsp/struts/SignonForm.jsp"/>
    </action>
    <action path="/shop/signon" type="...SignonAction" name="accountForm" scope="session" validate="false">
        <forward name="success" path="/shop/index.do"/>
    </action>
    

    DoNothingAction 直接轉發至登錄頁;SignonAction 處理提交,成功重定向首頁。

  2. 新用戶註冊:
    <action path="/shop/newAccountForm" type="...NewAccountFormAction" name="workingAccountForm" scope="session" validate="false">
        <forward name="success" path="/WEB-INF/jsp/struts/NewAccountForm.jsp"/>
    </action>
    <action path="/shop/newAccount" type="...NewAccountAction" name="workingAccountForm" scope="session" validate="true" input="/WEB-INF/jsp/struts/NewAccountForm.jsp">
        <forward name="success" path="/shop/index.do"/>
    </action>
    

    NewAccountFormAction 在 execute 中初始化 FormBean 放入 Session;NewAccountAction 開啟驗證,失敗自動返回輸入頁。

  3. 編輯賬號:
    <action path="/shop/editAccountForm" type="...EditAccountFormAction" name="workingAccountForm" scope="session" validate="false">
        <forward name="success" path="/WEB-INF/jsp/struts/EditAccountForm.jsp"/>
    </action>
    <action path="/shop/editAccount" type="...EditAccountAction" name="workingAccountForm" scope="session" validate="true" input="/WEB-INF/jsp/struts/EditAccountForm.jsp">
        <forward name="success" path="/shop/index.do"/>
    </action>
    

基礎架構類設計亮點

BaseActionForm:統一驗證框架

繼承 ActionForm,封裝通用字段校驗邏輯,子類僅需覆寫 validate() 即可複用。

BaseAction:Spring 整合關鍵

public class BaseAction extends Action {
    protected PetStoreFacade petStore; // 業務門面接口

    @Override
    public void setServlet(ActionServlet servlet) {
        super.setServlet(servlet);
        if (servlet != null) {
            ServletContext ctx = servlet.getServletContext();
            WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(ctx);
            this.petStore = (PetStoreFacade) wac.getBean("petStore");
        }
    }
}

所有 Action 繼承 BaseAction,自動從 Spring 容器獲取業務 Bean petStore,實現 Web 層與 Service 層解耦。

設計模式總結

  • 模板方法:BaseAction.setServlet() 統一初始化 Spring 上下文。
  • 門面模式:PetStoreFacade 聚合多個 Service,為 Web 層提供粗粒度接口。
  • 會話隔離:同一 Form 類定義多個 Bean 實例,分離不同業務流程的狀態。
  • 驗證分離:validate="true/false" 控制是否觸發 FormBean 驗證,配合 input 屬性實現錯誤頁自動回顯。

現代化遷移建議

  1. Struts 1.x → Spring MVC / Struts 2:Action 變為 POJO,無需繼承基類,支援 REST 風格 URL。
  2. iBATIS → MyBatis:介面映射、動態 SQL、插件機制更強大。
  3. XML 配置 → Java Config / Spring Boot 自動配置:消除大量 XML,約定優於配置。
  4. Session Form → 無狀態 REST + JWT:提升擴展性與集群部署能力。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved