我有一个带有 Spring MVC 和 Webflow 的 Web 应用程序。我正在实现“快照”机制:开发人员通过 URL 中的特殊参数可以保存他们当前的状态(页面、组件状态等),然后在将来返回到该状态。
状态存储在他们的磁盘中。要实现这一点,我需要存储整个 HttpSession - 不幸的是,并非所有对象都被序列化。我使用 XStream,但它会生成巨大的 XML (300MB),这使得我的 tomcat 在反序列化过程中崩溃。
您能否建议其他库或方法来序列化/保存未实现可序列化的对象的 http session ?
最佳答案
第一种方法 - 为需要序列化的对象创建中间“ session DTO”层。所有“ session DTO”都将是可序列化的,并且仅用于序列化 session 。显然,这意味着需要大量代码将属性从 session DTO 对象复制到应用程序中使用的真实对象,但存在大量属性对象复制器。
第二种方法 - 创建 Java map ,将所有对象及其属性存储为键值对(每个对象将是另一个 map ,可以嵌入到另一个 map 中)。然后该 map 将被序列化。显然,将 map 结构复制到应用程序中使用的实际对象会涉及很多工作。这或多或少是“基于 JSON 格式的手工制作的 Java map ”。
第三种方法 - 尝试使用 JSON 而不是 XML,解析应该消耗更少的资源。我会从那个开始。
关于java - 如何持久化 Http Session,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16173692/