網頁的生命週期
因為接觸過Android life cycle, 就從那個開始吧。
Scope
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 生命週期
- @view: 其生命週期為 current view, 對應到JSP Scope:
Page
- @Request: 請求範圍,每次請求創建一個實例,對應到JSP Scope:
Page
,Request
- @Session: 會話範圍,每個會話創建一個實例,用於保存會話信息, 對應到JSP Scope:
Session
- @Application: 應用範圍,整個應用生命週期內只創建一次Bean實例, 對應到JSP Scope:
Application
- @Conversation: 交談範圍, 用於跨多個請求的交談(長會話), 在 JSP 中沒有直接對應的 scope, 但類似Session Scope
- @Dependent: 依賴其它Bean範圍, 其生命週期依賴於封裝它的對象, 在 JSP 中沒有直接對應的 scope
- @Custom: 自定義scope,可以自行定義其生命週期, 在 JSP 中沒有直接對應的 scope
如果你覺得這篇文章很棒,請你不吝點讚 (゚∀゚)