2015-05-07 65 views
0

我正在使用事務管理應用程序,並且正在使用Struts2。 我已經使用內部會話設置和獲取價值像Struts 2中的Java應用程序可以管理多少個會話?

ActionContext.getContext().getSession().put("string", string); 

是否有任何限制,或在應用程序中使用這樣的會話的任何缺點?

+1

http://stackoverflow.com/a/11699132/1654265 –

+1

我猜OP是關心S2會話包裝圖的使用。 –

+0

我猜測OP甚至沒有意識到有什麼不同,他可能只是想知道他可以安全地把多少垃圾放在記憶裏......直到他能更好地塑造這個問題,我們仍然只會在野外猜測,儘管 –

回答

2

限制是您的計算機物理內存的大小。您不會在會話中存儲動態值,因爲有人可以在此期間對其進行修改,因此只會在會話中存儲代表任何用戶特定數據或靜態值的值當會話存在時不會被改變)。

注意:靜態這裏不是static關鍵字。

0

這是您的系統內部/物理內存大小。會話是在war文件中創建一個單例類。war文件存儲在服務器中。服務器位於Windows的C:文件夾中。所以會話取決於你的物理內存。

2

沒有限制。 Struts 2中的會話被實現爲Map以簡化對servlet會話屬性的訪問。

我已經寫在this答案:

SessionMap是專門爲目的而設計的,如果你想訪問該servlet會話屬性。因此,用戶可以在會話中保持同步的對象集合,並直接使用它來代替HttpSession

我知道只有一個缺點,如果你從動作上下文獲得會話,它可能會返回null。解決方法是在this答案。

有兩種方法來獲取會話映射到行動:

  1. 實現SessionAware。默認情況下,會話映射在動作調用中填充。這是一個更好的方法。
  2. 從動作上下文獲取會話映射。這樣你應該確保請求是由Struts2過濾器處理的。

第一種方法是首選,在文檔頁面解釋,讓你在測試中使用會話。

+0

非常感謝@Roman C –