如何坚持Http Session

时间:2013-04-23 15:44:45

标签: java tomcat xstream serializable

我有Spring MVC和Webflow的Web应用程序。我正在实现“快照”机制:开发人员通过URL中的特殊参数可以保存他们当前的状态(页面,组件状态等),然后再回到这个状态。

状态存储在磁盘中。为了实现这一点,我需要存储整个HttpSession - 遗憾的是并非所有对象都被序列化。我使用XStream但它生成了巨大的XML(300MB),这使得我的tomcat在反序列化过程中崩溃。

您能否建议其他库或方法来序列化/保存未实现Serializable的对象的http会话?

2 个答案:

答案 0 :(得分:4)

第一种方法 - 为需要序列化的对象创建中间“会话DTO”层。所有“会话DTO”都是可序列化的,仅用于序列化会话。显然,这意味着很多代码会将会话DTO对象的属性复制到应用程序中使用的真实对象,但是有一堆属性对象复制器。

第二种方法 - 创建将所有对象及其属性存储为键值对的Java映射(每个对象将是另一个映射,可以嵌入到另一个映射中)。然后该地图将被序列化。显然,将地图结构复制到应用程序中使用的实际对象时会涉及很多工作。这或多或少是“手工制作的基于JSON格式的Java地图”。

第三种方法 - 尝试使用JSON而不是XML,解析应该减少资源消耗。我会从那个开始。

答案 1 :(得分:1)

您可以查看memcached-session-manager的不同序列化策略。