假设有一个从 org.apache.wicket.authroles.authentication.AuthenticatedWebSession 扩展而来的自定义 session 类。从技术上讲,AuthenticatedWebSession
实现了 Serializable
接口(interface)。
但这是否意味着 wicket 实际上执行 session 序列化(可能在磁盘中)?或者,当 Servlet 容器没有太多内存时,它有责任进行此类 session 序列化?
最佳答案
Wicket 仅序列化页面及其组件。它不会序列化 session !
以下是有关 Wicket 的一些易于理解的事实:
- 几乎所有 Wicket 类都是可序列化的。
- Wicket 允许集群,因此需要可序列化的 session (在这种情况下,可以使用 servlet 容器共享,例如 Tomcat 集群中的 Tomcat 共享 session )。
- 只要需要存储有状态页面,Wicket 就会绑定(bind) Servlet session 。
- 默认情况下,Wicket 使用基于用于页面的标准 Java 序列化的序列化程序。 WicketStuff 项目中有基于 Kryo 和 Fast-Serialize 的序列化器
- Wicket 使用 SessionStore,它是一个特殊的对象,负责将 Wicket 的 Session 存储到 http session 或从 http session 恢复。默认实现是 HttpSessionStore,但您可以实现自己的(实现 ISessionStore 接口(interface)并将其添加到 Application 单例中)。
- 有状态 Wicket 组件可以在单个请求中保留下来,因此可以很好地将它们序列化并存储在某个位置(在磁盘上或通过网络在服务器之间共享)。
关于java - wicket 是否执行 session 序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33330280/