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

JBuilder 2005 Struts 遷移實戰:以 Action 控制器替換 switch.jsp 並新增圖書管理模塊

     編輯:Java 程式設計入門

前言:從「大雜燴」JSP 走向分層架構

早期 Servlet/JSP 專題中,switch.jsp 兼任表單接收、數據庫查詢、頁面轉發,邏輯耦合嚴重。本文記錄在 JBuilder 2005 中引入 Struts 框架,將 switch.jsp 重構為 Action 控制器,並新增圖書管理模塊的完整遷移過程。

一、switch.jsp 重構:Action 接管控制邏輯

1. 原始 switch.jsp 職責過重

  • 接收 login.jsp 表單數據
  • 查詢 T_USER 表驗證用戶
  • 根據結果轉發至 welcome.jsp/fail.jsp/error.jsp

2. Struts 分層映射

3. 關鍵配置片段

<!-- struts-config.xml -->
<form-bean name="loginForm" type="bookstore.form.LoginActionForm"/>

<action path="/login" 
        type="bookstore.action.LoginAction"
        name="loginForm"
        scope="request"
        validate="true"
        input="/login.jsp">
    <forward name="success" path="/welcome.jsp"/>
    <forward name="fail" path="/fail.jsp"/>
    <forward name="error" path="/error.jsp"/>
</action>

二、新增圖書管理模塊:可視化設計器全程演示

1. 數據庫表結構

CREATE TABLE T_BOOK (
    BOOK_ID     VARCHAR2(10) NOT NULL PRIMARY KEY,
    ISBN        VARCHAR2(20) NOT NULL,
    BOOK_NAME   VARCHAR2(50) NOT NULL,
    AUTHOR      VARCHAR2(50),
    CREATE_DATE CHAR(8)
);

約束:BOOK_ID 唯一,ISBN/BOOK_NAME 非空 → 直接映射為 ActionForm 驗證規則。

2. Struts 流程圖(Action Designer 可視化)

bookAdd.jsp (頁面)
    │
    ▼
bookActionForm (表單數據綁定 + 自動驗證)
    │
    ▼
/bookInsertAction (業務控制器)
    │
    ├─ 成功 → insertSuccess.htm
    └─ 失敗 → 錯誤頁面

3. 核心組件代碼骨架

bookAdd.jsp(Struts 標籤庫 + 國際化)

<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<html:form action="/bookInsertAction">
    <html:text property="isbn"/>
    <html:text property="bookName"/>
    <html:text property="author"/>
    <html:submit value="<bean:message key='btn.add'/>"/>
</html:form>

BookActionForm(驗證邏輯)

public class BookActionForm extends ActionForm {
    private String isbn, bookName, author;
    // getter/setter 省略

    @Override
    public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
        ActionErrors errors = new ActionErrors();
        if (isbn == null || isbn.trim().length() == 0) {
            errors.add("isbn", new ActionMessage("error.isbn.required"));
        }
        if (bookName == null || bookName.trim().length() == 0) {
            errors.add("bookName", new ActionMessage("error.bookName.required"));
        }
        return errors;
    }
}

BookInsertAction(業務處理)

public class BookInsertAction extends Action {
    public ActionForward execute(ActionMapping mapping, ActionForm form,
                                 HttpServletRequest request, HttpServletResponse response) {
        BookActionForm bookForm = (BookActionForm) form;
        // 1. 構建領域對象
        Book book = new Book();
        book.setIsbn(bookForm.getIsbn());
        book.setBookName(bookForm.getBookName());
        book.setAuthor(bookForm.getAuthor());
        book.setCreateDate(new SimpleDateFormat("yyyyMMdd").format(new Date()));
        
        // 2. 調用 Service/DAO 持久化
        BookService service = ServiceLocator.getBookService();
        try {
            service.insertBook(book);
            return mapping.findForward("success");
        } catch (DuplicateKeyException e) {
            // 主鍵衝突處理
            return mapping.findForward("duplicate");
        } catch (Exception e) {
            log.error("Insert book failed", e);
            return mapping.findForward("error");
        }
    }
}

三、項目初始化步驟

  1. File → New Project → bookStore + Web Module webModule
  2. 覆蓋原 Servlet 專題代碼至新工程
  3. SQL Plus 執行 T_BOOK 建表腳本
  4. 將必要 JAR(Struts、JDBC 驅動等)加入 Library

四、遷移收益對比

原職責Struts 組件實現類
接收表單數據ActionFormLoginActionForm
業務驗證/查詢ActionLoginAction.execute()
多出口轉發ActionForwardmapping.findForward("success/fail/error")
維度switch.jsp 時代Struts 重構後
職責分離JSP 混雜 Java 代碼、SQL、轉發ActionForm/Action/Forward 清晰分層
表單驗證手寫 JS + 服務端 if-elseActionForm.validate() 集中聲明
國際化硬編碼字符串ResourceBundle + bean:message
異常處理try-catch 分散Action 全局異常映射
可測試性需啟動容器Action 可單元測試 (Mock request/response)

五、結語

通過 JBuilder 2005 的 Struts 可視化設計器,我們完成了從「頁面中心」到「控制器中心」的架構躍遷。ActionForm 封裝數據與驗證,Action 聚焦業務流程,ActionForward 解耦導航——這正是 MVC 在 Web 層的經典落地。後續可進一步引入 Spring 管理 Service/DAO、Hibernate 簡化持久化、Tiles 佈局復用,構建企業級標準化開發框架。

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