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

Struts 入門教學(二):Model 元件與 JavaBeans 範圍詳解

     編輯:Java 程式設計入門

2. 建立 Model 元件

2.1 概述

應用程式的需求文件往往著重於使用者介面,但每個提交請求所需的後端處理邏輯也必須明確定義。Model 元件開發者專注於建立支援所有功能需求的 JavaBeans 類別。雖然具體 Bean 特性隨需求大幅變化,但通常可歸類為幾種基本型態。在此之前,先回顧與 Beans 密切相關的「範圍」概念。

2.2 JavaBeans 與範圍

在 Web 應用程式中,JavaBeans 可儲存於不同「屬性」集合中,每種集合擁有不同的生命週期與可見度規則,這些規則統稱為 Bean 的範圍。JSP 規格定義四種範圍(括號內為 Servlet API 對應物):

  • page:單一 JSP 頁面可見,生命週期限於當前請求(service() 方法區域變數)
  • request:單一 JSP 頁面及所有被包含、轉向的頁面或 Servlet 可見(Request 屬性)
  • session:參與特定用戶 Session 的所有 JSP 和 Servlet 可見,跨越多個請求(Session 屬性)
  • application:整個 Web 應用程式的所有 JSP 和 Servlet 可見(Servlet Context 屬性)

同一 Web 應用程式的 JSP 與 Servlet 共享同一組 Bean 集合。例如,在 Servlet 中將 Bean 存為 Request 屬性:

MyCart mycart = new MyCart(...);
request.setAttribute("cart", mycart);

轉向的 JSP 頁面即可用標準動作標籤取得:

<jsp:useBean id="cart" scope="request" class="com.mycompany.MyApp.MyCart"/>

2.3 ActionForm Beans

Struts 架構假設每個請求輸入都有對應的 ActionForm Bean(實作 ActionForm 介面的類別)。若在 ActionMapping 設定檔中定義,Controller Servlet 會在呼叫 Action 前自動執行:

  1. 檢查 Session 中是否有對應類別的 Bean 實例
  2. 若無,自動建立新 Bean 並加入 Session
  3. 對每個請求參數,呼叫 Bean 對應的 set 方法(類似 <jsp:setProperty> 通配符)
  4. 更新後的 ActionForm 傳遞給 Action 的 perform() 方法

撰寫 ActionForm Bean 原則:

  • ActionForm 介面本身無特定實作方法,僅標識角色
  • 通常僅包含屬性的 get/set 方法,不含商業邏輯
  • 少量輸入驗證邏輯可置於此,主要用途是保留使用者輸入值,便於錯誤時重顯表單
  • 完整驗證應在 Action 類別或商業邏輯 Bean 中執行
  • 每個表單欄位定義對應屬性(遵循 JavaBeans 命名慣例,如 username 對應 setUsername())
  • 一個「表單」可跨越多個 JSP 頁面,建議定義單一 ActionForm 包含所有欄位,提交至同一 Action,利於頁面重組不影響處理邏輯

2.4 系統狀態 Beans

系統實際狀態通常以一組 JavaBeans 表示。例如購物車系統:

  • 購物車 Bean:維護每位購物者選購項目
  • 用戶資訊 Bean:信用卡、出貨地址
  • 商品目錄 Bean:可購商品與庫存

小型系統或無需長期保存狀態時,狀態 Bean 可包含所有細節。大型系統常將狀態持久化至資料庫(如 CustomerBean 對應 CUSTOMERS 資料表),依需求在記憶體建立或清除。企業級應用也常使用 Entity EJBs 處理持久化狀態。

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