我将对象设置为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