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

JSP 開發入門(三):JavaBean 整合與標準動作

     編輯:關於JSP

為什麼要用 JavaBean?

  • 封裝業務邏輯與數據訪問,實現「模型」層職責。
  • 可重用、可測試、符合 JavaBean 規範 (無參構造器、私有字段+Getter/Setter、可序列化)。
  • JSP 提供標準動作標籤零代碼整合 Bean。

核心標準動作

標籤用途關鍵屬性
<jsp:useBean>聲明/查找/實例化 Beanid (頁面變量名)、class (全限定類名)、scope (page/request/session/application)、type (聲明類型)、beanName (Beans.instantiate 名稱)
<jsp:setProperty>設置 Bean 屬性name (匹配 useBean id)、property (* / 屬性名)、param (請求參數名)、value (固定值/EL)
<jsp:getProperty>讀取 Bean 屬性並輸出name、property

完整示例:用戶註冊表單

1. Bean 類 com.example.UserBean

package com.example;
import java.io.Serializable;
public class UserBean implements Serializable {
    private String username;
    private String email;
    private int age;
    // 無參構造器
    public UserBean() {}
    // Getter/Setter
    public String getUsername() { return username; }
    public void setUsername(String username) { this.username = username; }
    public String getEmail() { return email; }
    public void setEmail(String email) { this.email = email; }
    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }
    @Override public String toString() { return "User["+username+","+email+","+age+"]"; }
}

2. 表單頁 register.jsp

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core" %>
<html><body>
<h2>用戶註冊</h2>
<form method="post" action="process.jsp">
    用戶名:<input name="username" required><br>
    郵箱:<input name="email" type="email" required><br>
    年齡:<input name="age" type="number" min="1" max="120"><br>
    <button type="submit">提交</button>
</form>
</body></html>

3. 處理頁 process.jsp

<%@ page contentType="text/html;charset=UTF-8" %>
<jsp:useBean id="user" class="com.example.UserBean" scope="request" />
<jsp:setProperty name="user" property="*" /> <!-- 自動綁定所有同名請求參數 -->

<h3>註冊成功!</h3>
<p>用戶名:<jsp:getProperty name="user" property="username" /></p>
<p>郵箱:<jsp:getProperty name="user" property="email" /></p>
<p>年齡:<jsp:getProperty name="user" property="age" /></p>

<!-- 進階:手動設置/EL 設置 -->
<jsp:setProperty name="user" property="username" value="admin" />
<jsp:setProperty name="user" property="age" value="${param.age + 1}" />

Scope (作用域) 選擇指南

Scope生命週期適用場景
page (默認)當前頁面請求處理期間臨時計算工具、頁面級輔助對象
request一次 HTTP 請求 (含 forward/include)表單提交處理、請求級數據傳遞
session用戶會話期間 (默認 30 分鐘無操作超時)登入用戶信息、購物車、向導式多步驟流程
applicationWeb 應用生命週期 (容器啟動到關閉)全局配置、緩存數據、統計計數器 (需線程安全)

Bean 類文件部署位置

  • Maven/Gradle 項目:自動編譯至 target/classes,打包進 WEB-INF/classes。
  • 手動編譯:javac -d webapps/myapp/WEB-INF/classes -cp "..." src/com/example/UserBean.java
  • Jar 包:放入 WEB-INF/lib/。

進階:類型轉換與驗證

  • 標準動作自動處理基本類型/包裝類/String 轉換。
  • 自定義類型需編寫 PropertyEditor (Spring MVC 提供 ConversionService 更強大)。
  • 驗證邏輯建議放在 Bean 的 Setter 中拋出 IllegalArgumentException,或使用 JSR-303 Bean Validation (@NotNull, @Size 等) 配合框架攔截器。

安全警示:property="*" 風險

自動綁定**所有**請求參數,惡意用戶可提交額外參數篡改敏感屬性 (如 balance=0, role=admin)。

防範:

  1. 顯式列出允許綁定屬性:<jsp:setProperty name="user" property="username"/> <jsp:setProperty name="user" property="email"/> ...
  2. 使用 DTO (Data Transfer Object) 僅包含表單字段,業務層再映射到實體。
  3. 框架層面:Spring MVC @InitBinder 設置 setAllowedFields / setDisallowedFields。

總結

JSP 標準動作 (useBean/setProperty/getProperty) 提供了聲明式的 Bean 整合方式,配合合理的 Scope 選擇與安全綁定策略,能快速構建清晰的 MVC 應用。現代項目多改用 Spring MVC @ModelAttribute + Thymeleaf/Facelets,但理解原生機制有助於維護舊系統與排查問題。

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