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

JSP 使用 JavaBean 完整指南:規範、useBean/setProperty/getProperty 標籤實戰與最佳實踐

     編輯:Java 綜合教學

什麼是 JavaBean?

符合特定規範的 Java 類,作為可重用軟體組件。核心規範:

  1. 實現 Serializable (建議)
  2. 提供 **無參建構子** (或無建構子)
  3. 屬性 **私有化**,提供公開 getXxx()/setXxx() 存取器
  4. 布林屬性可用 isXxx() 作為讀取器
  5. 置於具名套件中 (不可用默認套件)

標準 JavaBean 範例

package com.example.bean;

public class User implements Serializable {
    private String userName;
    private String password;
    
    // 無參建構子 (隱式或顯式)
    public User() {}
    
    // Getter/Setter
    public String getUserName() { return userName; }
    public void setUserName(String userName) { this.userName = userName; }
    
    public String getPassword() { return password; }
    public void setPassword(String password) { this.password = password; }
}

IDE 技巧:Eclipse/IntelliJ 右鍵 → Source → Generate Getters and Setters 自動生成。

JSP 標準動作元素三劍客

1. <jsp:useBean> - 獲取或建立 Bean 實例

<jsp:useBean id="beanName" class="package.ClassName" scope="page|request|session|application" />
  • id:頁面內引用變數名 (對應範圍屬性名)
  • class:完整類名
  • scope:生命週期範圍 (預設 page)
    • page:當前頁面 (PageContext)
    • request:單次請求 (HttpServletRequest)
    • session:用戶會話 (HttpSession)
    • application:整個 Web 應用 (ServletContext)
  • 執行邏輯:先在指定範圍找同名屬性 → 找到返回 → 否則 new 實例 → 存入範圍 → 返回

2. <jsp:setProperty> - 設定 Bean 屬性

<!-- 單一屬性 -->
<jsp:setProperty name="beanName" property="propertyName" value="value" />

<!-- 批次自動映射 (表單參數名 = 屬性名) -->
<jsp:setProperty name="beanName" property="*" />

<!-- 指定參數名不同於屬性名 -->
<jsp:setProperty name="beanName" property="userName" param="username" />

3. <jsp:getProperty> - 讀取 Bean 屬性輸出

<jsp:getProperty name="beanName" property="propertyName" />
  • 自動呼叫 Getter,結果轉字串輸出 (物件呼叫 toString())
  • name 對應 useBean 的 id

完整實戰範例

案例一:基本使用

<%@ page contentType="text/html;charset=UTF-8" %>
<jsp:useBean id="user" class="com.example.bean.User" scope="page" />
<html>
<body>
    <% user.setUserName("張三"); user.setPassword("123456"); %>
    <h1>用戶: <jsp:getProperty name="user" property="userName" /></h1>
    <p>密碼: <jsp:getProperty name="user" property="password" /></p>
</body>
</html>

案例二:表單提交自動映射

<!-- index.jsp: 表單頁 -->
<form action="process.jsp" method="post">
    學號: <input name="id" type="text" /><br/>
    年齡: <input name="age" type="text" /><br/>
    班級: <input name="classes" type="text" /><br/>
    <input type="submit" value="提交" />
</form>
<!-- Student.java Bean -->
package com.example.bean;
public class Student {
    private int id;
    private int age;
    private String classes;
    // 無參建構子 + Getter/Setter...
}
<!-- process.jsp: 處理頁 -->
<jsp:useBean id="student" class="com.example.bean.Student" scope="request" />
<jsp:setProperty name="student" property="*" /> <!-- 神奇的一行:自動映射所有同名參數 -->
<html><body>
    學號: <jsp:getProperty name="student" property="id" /><br/>
    年齡: <jsp:getProperty name="student" property="age" /><br/>
    班級: <jsp:getProperty name="student" property="classes" />
</body></html>

案例三:書籍資訊展示

<jsp:useBean id="book" class="com.example.bean.Book" />
<jsp:setProperty name="book" property="bookName" value="《Java 核心技術》" />
<jsp:setProperty name="book" property="author" value="Cay Horstmann" />
<jsp:setProperty name="book" property="category" value="程式設計" />
<jsp:setProperty name="book" property="price" value="128.00" />

<table border="1" align="center">
    <tr><td>書名</td><td><jsp:getProperty name="book" property="bookName" /></td></tr>
    <tr><td>作者</td><td><jsp:getProperty name="book" property="author" /></td></tr>
    <tr><td>分類</td><td><jsp:getProperty name="book" property="category" /></td></tr>
    <tr><td>價格</td><td><jsp:getProperty name="book" property="price" /></td></tr>
</table>

範圍選擇指南

範圍生命週期適用場景範例
page單次 JSP 處理過程臨時計算、頁面內輔助物件格式化工具、計算器
request單次 HTTP 請求 (含 forward)請求處理結果、表單數據綁定process.jsp 接收表單
session用戶會話 (預設 30 分鐘)登入用戶資訊、購物車、偏好設定User、ShoppingCart
application整個 Web 應用 (直到重啟)全域配置、快取資料、計數器系統參數、首頁熱門商品

現代化替代方案 (JSP 2.0+ EL + JSTL)

<%@ taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core" %>
<%-- 使用 EL 表達式 ${} 替代 getProperty --%>
<h1>用戶: ${user.userName}</h1>

<%-- JSTL 迴圈 --%>
<c:forEach items="${bookList}" var="book">
    <tr><td>${book.bookName}</td><td>${book.price}</td></tr>
</c:forEach>

優勢:語法更簡潔、分離 Java 代碼、支援巢狀屬性、空值安全 (${null.property} 不報錯)。

常見錯誤避坑

  • ❌ Bean 放在默認套件 (無 package) → 類載入失敗
  • ❌ 缺少無參建構子 → 實例化失敗
  • ❌ 屬性非私有或缺少 Getter/Setter → 反射存取失敗
  • ❌ setProperty property="*" 但表單參數名與屬性名不符 (大小寫敏感)
  • ❌ 範圍選錯:請求數據用 session 導致資料洩漏/佔用記憶體
  • ❌ 嘗試在 JSP 中寫複雜業務邏輯 → 違反 MVC 分層
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved