java - 如何持久化 Http Session

标签 java tomcat xstream serializable

我有一个带有 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/

相关文章:

java - 使用 @InjectMocks 注入(inject) String 属性

java - 删除文本文件中的单行?

java - 在 jax-rs 中传递 post 数据参数并通过 ajax 调用

java - Tomcat + Jersey + MySQL 连接关闭后不允许操作

java - 如何使用Xstream的addImplicitMap方法?

java - XStream 中的单个元素数组错误

java - 如何配置 XStream 以根据 XML 属性映射到不同的类?

java - 测试。我真的需要添加 "throws Exception"吗?

java - Log4j2 初始化后配置 FileAppender

java - debug onoutofmemory 无法启动tomcat