我有struts2的這個應用程序流程:如何在struts2中實現與用戶登錄綁定的會話?
Page_A.jsp包含形式可以提交一個數據到ActionA類方法執行A
ActionA->與密鑰的使sesion執行A方法存儲數據「的myKey」
ActionA返回結果給Page_B.jsp
Page_B.jsp包含形式,可以提交數據ActionA類方法E xecuteB
在ActionA->執行B方法,它會從「的myKey」會議
我發現有兩種方法可以從會話設置和獲取數據獲取提交的數據:
使用ActionContext中
// put the data into session Map session = ActionContext.getContext().getSession(); session.put("myKey", data); // get the data from session Map session = ActionContext.getContext().getSession(); data = (String[]) session.get("myKey");
使用ServletActionContext
// put the data into session HttpServletRequest request = ServletActionContext.getRequest(); HttpSession session = request.getSession(false); session.setAttribute("myKey", data); // get the data from session HttpServletRequest request = ServletActionContext.getRequest(); HttpSession session = request.getSession(false); data = (String[]) session.getAttribute("myKey");
兩種方式之間,哪一個是更好的辦法?或者有更好的方法嗎? (我更喜歡簡單的方式,如果有的話)
第二件事,我想確保會話與用戶登錄會話綁定。這意味着一個用戶的「myKey」會話數據將與另一個用戶的「myKey」會話數據不同(「myKey」會話數據永遠不會被來自另一個用戶的「myKey」會話數據覆蓋)。
例如:
用戶1登錄
用戶1進入Page_A.jsp並提交數據,現在他在Page_B.jsp(現在的「的myKey」會話包含提交用戶1數據)
用戶2登錄
用戶2去Page_A.jsp太提交數據
我很擔心,如果用戶1從Page_B.jsp提交,「myKey」中的數據是否仍會引用他提交的原始數據,或者他將從User2中獲取數據(因爲「myKey」會話數據是替換)?
可以在Action類中使用'ActionContext.getContext()。getSession()'嗎?你是說這個會議不是全球性的,對嗎? – null
會話是每個用戶,範圍爲用戶(全局是一個令人困惑的術語,不適用於Java)。沒有什麼能阻止你,它會工作,但是當你有SessionAware和ServletRequestAware接口時,你應該嘗試使用它們。 – Quaternion