【问题标题】:Why is it considered a good practice to make session scoped objects Serializable?为什么将会话范围的对象设为可序列化被认为是一种好习惯?
【发布时间】:2012-08-29 01:41:19
【问题描述】:

我经常听到人们说session scoped对象应该实现Serializable?为什么会这样?如果不这样做会是什么结果?那么为什么不把它作为 servlet 规范的一部分呢?我知道如果我们不这样做,Tomcat 不会抱怨。 JBoss、WebSphere 或 Weblogic 等其他应用服务器呢?

【问题讨论】:

    标签: java session web-applications servlets session-state


    【解决方案1】:

    这允许 servlet 容器存储 磁盘上的会话,或通过网络将会话内容传输到 另一台服务器。

    为什么容器需要在磁盘上存储会话(钝化)?也许当内存已满。当再次需要会话时,它会将其从磁盘中检索回内存中(激活)。

    http://www.javapractices.com/topic/TopicAction.do?Id=110

    【讨论】:

    • 那为什么不是 servlet 规范的一部分呢?因为如果我们不严格遵守这条规则,那么在负载均衡器的情况下故障转移将如何工作?
    • 不,servlet 规范不会强制要求它。有些敏感信息您不希望将它们序列化。比如银行账号、密码等。为了后面的目的,字段可能会被标记为瞬态。
    • NotSerializableException 会在您的容器尝试序列化未实现 Serializable 的对象时发生。
    • 它不是 servlet 规范的一部分,因为钝化和复制不是 servlet 规范的一部分。这些是容器特定的功能。
    • 也支持会话故障转移和共享会话。
    【解决方案2】:

    它允许容器通过网络移动会话对象或将它们存储在磁盘上。当您将应用程序与在不同物理盒子中运行的不同服务器节点进行集群时,这将很有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-01
      • 2021-05-04
      • 2014-08-12
      • 2012-12-01
      • 2018-05-18
      相关资源
      最近更新 更多