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

JavaBean 入門(四):四大作用域詳解與計數器實戰驗證

     編輯:關於JSP

四大作用域對照表

作用域scope 值生命週期典型用途對應隱式對象
頁面page單次請求處理期間 (含 forward)臨時計算、表單回顯pageContext
請求request單次請求 (含 forward/include)控制器→視圖傳遞數據request
會話session用戶會話存活期 (瀏覽器關閉/超時失效)登入狀態、購物車、偏好設定session
應用applicationWeb 應用生命週期 (容器重啟失效)全域快取、配置、計數器、線程池application

計數器 Bean CountBean.java

package javabean01;
public class CountBean implements java.io.Serializable {
    private int count = 0;
    public CountBean() {
        System.out.println("====== 新 CountBean 實例誕生 =====");
    }
    public int getCount() { return ++count; }  // 遞增並返回
}

四種作用域驗證頁 counter.jsp

<%@ page contentType="text/html;charset=utf-8" %>
<html><body>
<jsp:useBean id="cou" class="javabean01.CountBean" scope="${param.scope}"/>
<h3>第 <jsp:getProperty name="cou" property="count"/> 次訪問!</h3>
<p>當前 scope: ${param.scope} </p>
<a href="counter.jsp?scope=page">page</a> |
<a href="counter.jsp?scope=request">request</a> |
<a href="counter.jsp?scope=session">session</a> |
<a href="counter.jsp?scope=application">application</a>
</body></html>

預期行為驗證

  1. page:每次點擊連結 (新請求) 計數器歸 1,控制台每次印「新實例誕生」。
  2. request:同理,forward 也不共享,每請求新實例。
  3. session:同瀏覽器多次請求計數遞增;開新瀏覽器/無痕模式 → 新 session → 歸 1。
  4. application:所有用戶、所有瀏覽器共享同一計數器,重啟 Tomcat 歸零。

作用域選型決策樹

  1. 數據是否需跨請求保留?否 → page 或 request (forward 用 request)。
  2. 是否用戶專屬?是 → session;否 → application。
  3. application 謹慎使用:併發寫入需同步、記憶體常駐、叢集需外部分布式快取 (Redis)。

現代框架作用域映射

JSP scopeSpringCDI (Jakarta EE)
page無直接對應 (方法區域變數)無直接對應
request@RequestScope@RequestScoped
session@SessionScope@SessionScoped
application@ApplicationScope / Singleton@ApplicationScoped

避坑指南

  • Session 囤積症:大量物件放入 Session 導致記憶體洩漏、序列化失敗。定期 session.removeAttribute()、設定 maxInactiveInterval。
  • Application 併發Bug:count++ 非原子。用 AtomicInteger 或 synchronized 方法。
  • 叢集 Session 複製風暴:大 Session 物件跨節點複製延遲大。改用 **Redis Session 共享** (Spring Session)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved