2012-07-04 38 views
0

我将对象设置为HttpSession。此对象是类User的一个实例。然后,在另一个类我试图做这样的事情:从HttpSessions(Java)设置/获取对象

User user = session.getAttribute("userObject"); 

我读到Serializable,但我不明白它是如何工作的。有没有一种直接和简单的方法来做到这一点?

回答

4

想象会议作为一个简单的,类型不安全Map。你可以放入任何东西,只要你知道你期望的类型,就可以把它拿出来。所以,如果你已经把一个User对象,然后使用:

User user = (User) session.getAttribute("userObject"); 

如果你已经把一个Long(在用户id)

Long id = (Long) session.getAttribute("userObject"); 
User user = getUserById(id); 
1

您的代码似乎确定,你只需要一个转换:

User user = (User) session.getAttribute("userObject"); 
+0

我以前试过,但我采取了一个java.lang.ClassCastException –

+0

我会验证用户对象你铸造是正确的类型。检查导入。另外,请确认您提供的session.setAttribute类型正确。 – tjg184

0

序列化是唯一真正重要的位置,如果你想运行在集群会话环境中。如果是这样,应用程序容器(tomcat或其他)将需要将会话中的所有对象转换为字节数据,以便可以将数据流传输到其他服务器以便复制会话。在这种情况下,所有的会话值都需要实现Serializable并且只包含自己实现Serializable的属性。