我將對象設置爲HttpSession
。此對象是類User
的一個實例。然後,在另一個類我試圖做這樣的事情:從HttpSessions(Java)設置/獲取對象
User user = session.getAttribute("userObject");
我讀到Serializable
,但我不明白它是如何工作的。有沒有一種直接和簡單的方法來做到這一點?
我將對象設置爲HttpSession
。此對象是類User
的一個實例。然後,在另一個類我試圖做這樣的事情:從HttpSessions(Java)設置/獲取對象
User user = session.getAttribute("userObject");
我讀到Serializable
,但我不明白它是如何工作的。有沒有一種直接和簡單的方法來做到這一點?
想象會議作爲一個簡單的,類型不安全Map
。你可以放入任何東西,只要你知道你期望的類型,就可以把它拿出來。所以,如果你已經把一個User
對象,然後使用:
User user = (User) session.getAttribute("userObject");
如果你已經把一個Long
(在用戶id)
Long id = (Long) session.getAttribute("userObject");
User user = getUserById(id);
您的代碼似乎確定,你只需要一個轉換:
User user = (User) session.getAttribute("userObject");
閱讀本上的序列:
Why and how is serialization used in Java web applications?
我們假設你正在做別的地方這樣。
session.setAttribute("userObject", user);
session.addAttribute(「userObject」,user); –
void setAttribute(java.lang.String name,java.lang.Object value)請參閱http://goo.gl/mQ7rZ – jddsantaella
@AlexDowining已更正。謝謝。 – tjg184
序列化是唯一真正重要的位置,如果你想運行在集羣會話環境中。如果是這樣,應用程序容器(tomcat或其他)將需要將會話中的所有對象轉換爲字節數據,以便可以將數據流傳輸到其他服務器以便複製會話。在這種情況下,所有的會話值都需要實現Serializable並且只包含自己實現Serializable的屬性。
我以前試過,但我採取了一個java.lang.ClassCastException –
我會驗證用戶對象你鑄造是正確的類型。檢查導入。另外,請確認您提供的session.setAttribute類型正確。 – tjg184