2010-05-17 78 views
2
SEVERE: IOException while loading persisted sessions: 
     java.io.WriteAbortedException: 
     writing aborted; java.io.NotSerializableException: 

这意味着此对象不能保存在硬盘上。将对象保存在servlet会话和java.io.NotSerializableException中

这是否意味着在不执行“可序列化”的会话对象中保留是不安全的?

我还没有听说在Session对象中保存不可序列化的对象有限制。

它只是意味着Tomcat会一直保存在内存中,对吗?

+0

[将对象保存在servlet会话和java.io.NotSerializableException中](http://stackoverflow.com/questions/2847664/saving-objects-in-servlet-session-and-java-io-notserializableexception) – extraneon 2010-05-17 08:49:05

+0

你可以自己关闭另一个吗? http://stackoverflow.com/questions/2847664/saving-objects-in-servlet-session-and-java-io-notserializableexception – extraneon 2010-05-17 08:49:24

回答

8

这是否意味着它是不安全的 保持Session对象不 实施“序列化”?

完全正确,是的。

但是,如果实际上不需要做任何序列化,许多servlet容器就会让你摆脱困境。

例如,Tomcat不关心会话属性是否可序列化,除非您启用会话复制。它需要能够序列化属性以将它们复制到群集中的其他服务器。

就你而言,容器似乎试图将会话数据保存到磁盘,这又需要序列化。

1

不仅当对象被保存到硬盘时,而且当被传送到分布式环境中的另一个节点时,都会尝试序列化。尽管servlet规范没有要求对象可序列化,但这样做不是一个坏习惯。

2

Servlet规范定义了分配会话的规则(2.5规范实际上并未描述如何为除分布式环境以外的其他任何内容保留会话,但语义应该相同)。在这种情况下通常最容易实施Serializable。如果您想要收到这些事件的通知,也可以使用HttpSessionActivationListener接口。