【问题标题】:Does wicket perform session serialization?wicket 是否执行会话序列化?
【发布时间】:2015-10-25 13:35:24
【问题描述】:

假设有一个从org.apache.wicket.authroles.authentication.AuthenticatedWebSession 扩展的自定义会话类。从技术上讲,AuthenticatedWebSession 实现了Serializable 接口。

但这是否意味着 wicket 实际上执行会话序列化(可能在磁盘中)?或者当它没有太多内存时,处理这种会话序列化是servlet容器的责任?

【问题讨论】:

    标签: java session servlets serialization wicket


    【解决方案1】:

    Wicket Session 对象作为属性存储在 HttpSession 中。 复制 http 会话是 Web 容器的工作,因此它的工作是序列化 Session 及其所有属性。

    Wicket在任何应用程序组件中作为非瞬态引用保存 Session 时才会序列化。应用开发者可以使用https://github.com/apache/wicket/blob/297c4e51a925ef08c3ff903e4db26d2f910fe084/wicket-core/src/main/java/org/apache/wicket/core/util/objects/checker/SessionChecker.java来防止此类错误。

    【讨论】:

      【解决方案2】:

      Wicket 仅序列化页面及其组件。它不会序列化 Session!

      这里有一些关于 Wicket 的事实很好理解:

      • 几乎所有的 Wicket 类都是可序列化的。
      • Wicket 允许集群,因此它需要可序列化的会话(在这种情况下,可以使用 servlet 容器共享,例如 Tomcat 集群中的 Tomcat 共享会话)。
      • Wicket 在需要存储有状态页面时绑定 Servlet 会话。
      • 默认情况下,Wicket 使用基于用于页面的标准 Java 序列化的序列化程序。 WicketStuff 项目中有基于 Kryo 和 Fast-Serialize 的序列化器
      • Wicket 使用 SessionStore,它是一个特殊对象,负责将 Wicket 的 Session 存储到 http 会话/从 http 会话恢复。默认实现是 HttpSessionStore,但您可以实现自己的(实现 ISessionStore 接口并将其添加到 Application 单例中)。
      • 有状态的 Wicket 组件在单个请求中仍然存在,因此可以将它们序列化并存储在某处(在磁盘上或通过网络在服务器之间共享)。

      【讨论】:

      • 我对您的回答做了一些更正。如果您不同意其中任何一个,请告诉我,我们将讨论。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-17
      • 2015-06-19
      • 1970-01-01
      • 1970-01-01
      • 2011-12-26
      • 2014-12-12
      • 2015-03-31
      相关资源
      最近更新 更多