Lunski's Clutter

This is a place to put my clutters, no matter you like it or not, welcome here.

0%

JSP (Jakarta/Java Server Pages) Scope

網頁的生命週期

因為接觸過Android life cycle, 就從那個開始吧。

Scope

img
ref

1.Page: 只在頁面, 無法跨頁傳變數

像Android的 Activity, 每次打開會得到新instance, 存在pageContext物件中, 重新整理也會得到新instance, 故不常使用

2.Request: 可以跨頁傳變數

像Android的 onCreate(), onDestroy()方法, 由請求物件透過pageContext管理, 創建事務AAA請求範圍的JSP頁面提供服務, Http請求結束時結束

* AAA(Authentication, Autherization, Accounting)
    * 認證: user帳密登入過程
    * 授權: 能繼續訪問會給token
    * 計費: 紀錄用戶訪問log, 統計, 分析與計費
    * RADIUS, TACACS+為常見實現  

3.Session: 購物車

像整個Android生命週期, 值存在伺服器記憶體的臨時數據, 單用戶專有, 在不同請求中保持, 再次打開還是一樣, 期限取決於user存取的資源數量, 最常用, 當Http逾時或宣告session.invalidate()失效

* Cookie: Shopping Cart, 適合小, 不敏感資料
以文本形式存在user瀏覽器中, 當user再次請求, 瀏覽器將為過期cookie發給伺服器, 但有些缺點
    * 佔user儲存空間
    * 儲存空間有限
    * 可被user修改

4.Application: 計數器

一樣像是整個Android生命週期或Java靜態變數, 由應用指向的物件維護, 請求物件透過ServletContext管理, 值存在伺服器文件, 用戶共享

JSP和Managed Bean間, 會根據其scope的生命週期進行對應和資料傳遞

Managed Bean 生命週期

  1. @view: 其生命週期為 current view, 對應到JSP Scope: Page
  2. @Request: 請求範圍,每次請求創建一個實例,對應到JSP Scope: Page, Request
  3. @Session: 會話範圍,每個會話創建一個實例,用於保存會話信息, 對應到JSP Scope: Session
  4. @Application: 應用範圍,整個應用生命週期內只創建一次Bean實例, 對應到JSP Scope: Application
  5. @Conversation: 交談範圍, 用於跨多個請求的交談(長會話), 在 JSP 中沒有直接對應的 scope, 但類似Session Scope
  6. @Dependent: 依賴其它Bean範圍, 其生命週期依賴於封裝它的對象, 在 JSP 中沒有直接對應的 scope
  7. @Custom: 自定義scope,可以自行定義其生命週期, 在 JSP 中沒有直接對應的 scope

如果你覺得這篇文章很棒,請你不吝點讚 (゚∀゚)

Welcome to my other publishing channels