JavaBean 是可重用的軟體元件,封裝業務邏輯與資料存取。JSP 透過標準動作標籤整合 JavaBean,實現「邏輯與顯示分離」,縮短開發週期,提升可維護性。
package tax;
public class TaxRate {
private String product = "A001";
private double rate = 5.0;
public TaxRate() {} // 無參建構子必要
public String getProduct() { return product; }
public void setProduct(String product) { this.product = product; }
public double getRate() { return rate; }
public void setRate(double rate) { this.rate = rate; }
}
編譯後 TaxRate.class 放置於 WEB-INF/classes/tax/ 目錄。
<jsp:useBean id="taxbean" scope="application" class="tax.TaxRate" />
| 屬性 | 說明 |
|---|---|
id | 頁面內唯一識別符,對應變數名 |
scope | page(預設)、request、session、application,決定生命週期與可見範圍 |
class | 完整類名(含套件) |
type | 宣告型別(可為介面或父類),配合 class 或 beanName 使用 |
作用域選擇指南: 單次請求資料用 request;用戶會話資料用 session;全域共用資料(如配置、快取)用 application。
<%
taxbean.setProduct("A002");
taxbean.setRate(17);
%>
產品:<%= taxbean.getProduct() %><br/>
稅率:<%= taxbean.getRate() %>
優點:靈活,可執行任意邏輯。缺點:JSP 混入 Java 代碼,違反分離原則。
<jsp:setProperty name="taxbean" property="product" value="A003" />
<jsp:setProperty name="taxbean" property="rate" value="3" />
<b>使用標準標籤:</b><br/>
產品:<jsp:getProperty name="taxbean" property="product" /><br/>
稅率:<jsp:getProperty name="taxbean" property="rate" />
| 標籤 | 屬性 | 功能 |
|---|---|---|
jsp:setProperty | name(Bean id)、property(屬性名)、value(常值)、param(請求參數名) | 設定 Bean 屬性,支援自動型別轉換 |
jsp:getProperty | name、property | 輸出 Bean 屬性值,自動轉字串 |
進階用法: <jsp:setProperty name="taxbean" property="*" /> 自動將所有同名請求參數綁定至 Bean 屬性(表單處理神器)。
<html><body>
<%@ page language="java" %>
<jsp:useBean id="taxbean" scope="session" class="tax.TaxRate" />
<!-- 方式 1:Scriptlet --%>
<% taxbean.setProduct("A002"); taxbean.setRate(17); %>
<p>方式 1:<br/>
產品:<%= taxbean.getProduct() %><br/>
稅率:<%= taxbean.getRate() %></p>
<!-- 方式 2:標準標籤 --%>
<jsp:setProperty name="taxbean" property="product" value="A003" />
<jsp:setProperty name="taxbean" property="rate" value="3" />
<p><b>方式 2:</b><br/>
產品:<jsp:getProperty name="taxbean" property="product" /><br/>
稅率:<jsp:getProperty name="taxbean" property="rate" /></p>
</body></html>
jsp:setProperty/getProperty 可讀性高、無 Scriptlet、支援自動型別轉換(String→double 等)。application 造成記憶體洩漏;避免會話級 Bean 在 page scope 導致狀態不共享。Serializable(若需 session 複製/持久化)。WEB-INF/classes 自動掃描;JAR 放入 WEB-INF/lib;共享庫放 Tomcat lib。JSP + JavaBean 是「Model 1」架構的基石。掌握 useBean 作用域語義、setProperty/getProperty 標準標籤用法、property="*" 自動綁定技巧,能以最小代價實現邏輯與視圖分離。現代框架(Spring MVC、Struts 2)本質上皆是此模式的擴展與規範化,理解核心機制有助於深度掌握框架原理。