【问题标题】:Purpose of Serialization in webapplicationWeb应用程序中序列化的目的
【发布时间】:2009-11-17 04:18:07
【问题描述】:
  1. 序列化在 web 应用程序中的用途在哪里。

  2. 表单 bean 是否必须是可序列化的。

  3. tomcat中sessions.ser文件有什么用..

【问题讨论】:

  • 您能否详细说明为什么给出的答案不让您满意?在发布答案几周后,您似乎增加了赏金,但您似乎没有对其中任何一个做出回应/评论。
  • 也许是因为“开始赏金”看起来很诱人 :)
  • 我们都是网络杀手。

标签: java tomcat serialization javabeans


【解决方案1】:

1) 它是一个依赖于应用服务器的功能,但 Servlet 规范规定,如果 servlet 容器想要支持分布式环境(跨实例共享会话)等,它必须接受实现 Serializable 并能够迁移它们的对象. Tomcat 还支持为可序列化的会话对象存储跨服务器重新启动的会话状态。您可以在 conf/context.xml 文件中打开或关闭 Tomcat 的此功能(参见那里的 cmets)。

2) 只有在以下情况下,表单 bean 才需要可序列化:a) 它是会话范围的,并且 b) 您正在使用分布式会话或 Tomcat 等用于持久化需要它的会话的功能。

3) sessions.ser 文件是包含来自会话的序列化对象的文件。如果您已将 Tomcat 配置为这样做,则 Tomcat 使用它来在服务器重新启动时保留它们(见上文)。一般来说,.ser 文件是一个序列化的 Java 对象,它是对象状态的二进制表示。

【讨论】:

    【解决方案2】:

    对于您的第一个和第二个问题,请查看此SO thread。关于你的第三个问题,sessions.ser 是一个序列化的会话。然而,

    1. 是的,当我们需要在文件系统中持久化对象或通过网络发送对象时,我们需要序列化。您可能认为在 Web 应用程序中我们不一定要这样做。但是服务器通常需要一个可序列化的东西,以防将来当您切换到集群环境或想要将 bean 传递给远程组件(即 EJB 组件)时需要它。或者您可能希望将 bean 存储到会话中,因此您的 bean 应该是可序列化的。

    2. 是的,出于同样的原因,如上所述。

    3. sessions.ser 是一个序列化会话。 Tomcat 将其持久化,因此以后可以恢复。现在您知道为什么我们需要可序列化的 bean,因为您可能希望将 bean 对象存储到会话中,而 Tomcat 将会话持久化到文件系统,即 session.ser。因此,您的 bean 必须实现 Serializable 以便它们可以通过会话持久化/恢复。

    顺便说一下,bean的持久化和恢复的正确性取决于Serializable的正确实现。为此,我建议您阅读 Effective Java 中的相关主题。

    【讨论】:

      【解决方案3】:

      如果容器想要存储会话,会话(以及添加到其中的所有属性)需要可序列化。这可能有两个原因:

      1. 会话必须传递到负载平衡集群的其他节点
      2. 由于内存不足,会话需要换出

      另一个可能的原因是使用跨上下文分心将请求属性从一个 webapp 传递到另一个 webapp。两个 webapp 都有不同的类加载器,所以简单的转换是行不通的。

      因此,您的 tomcat 似乎使用序列化将会话写入文件。表单 bean 通常也存储在会话中,所以是的,它必须是可序列化的。

      最后,像在任何其他应用程序中一样可序列化可能还有更多原因。缓存可能需要它来交换缓存内容(就像 ehcache 可以做的那样)。任何其他数据部分都可以被序列化以作为 blob 存储在数据库中,...

      【讨论】:

        【解决方案4】:

        哇,很多问题都没有很多上下文。

        对于您的 #1,我假设您在谈论序列化,您在其他观点中提到了 Java 的序列化,而不是 序列化 与并行性。如果是这样,许多 Web 应用程序将序列化或保存对象的状态以保持其持久性。这种持久性可用于 HTTP 请求(如在会话管理中),用于信息的长期存储,或用于通过“网络”发送以确保所有各方都获得所述信息的副本。

        人们必须在 HTTP 中问自己这是否确实是一个好主意,因为设计和规模无状态是“好”的,如果一个人有一个后备存储(如数据库)为什么数据库不做这项工作。我猜想表单 bean 就是在这种性质下使用的,因为 servlet 将传递所描述的表单信息。

        【讨论】:

          【解决方案5】:
          1. 一个很好的描述 wikipedia:

            序列化有很多 好处。它提供:

            • 一种持久化对象的方法,比 将它们的属性写入文本 磁盘上的文件,并重新组装 回读这篇文章。
            • 一种发出远程过程调用的方法,例如在 SOAP 中
            • 一种分发对象的方法,尤其是在软件中 组件
              例如 COM、CORBA 等。
            • 一种检测时变数据变化的方法。

            一个真实世界(简单)的例子:说 您在 java 中创建一个用户实例。 现在你想显示这个对象 在使用 javascript 的网络浏览器中。 一种选择是序列化 以这样的方式对象,即 javascript 可以反序列化对象(使用 java 和 javascript 都可以理解的表示形式)和 显示它。

          2. 这取决于您需要做什么 用form bean来判断是否 是否应该序列化。
          3. Tomcat Manager App 是一个网络 帮助您部署的应用程序 并管理其他 Web 应用程序以 雄猫。我不是tomcat专家,但是 我认为 Tomcat 管理器试图 记住有关的信息 网络创建的会话 它正在管理的应用程序。它 甚至需要记住这些信息 当tomcat进程是 重新启动。所以,Tomcat 管理器 创建一个名为“Session.ser”的文件 这是一个序列化的表示 它需要的信息 记住所有托管的 应用程序的会话。

          【讨论】:

            猜你喜欢
            • 2012-04-03
            • 1970-01-01
            • 2013-09-19
            • 1970-01-01
            • 1970-01-01
            • 2015-09-14
            • 1970-01-01
            • 1970-01-01
            • 2013-05-03
            相关资源
            最近更新 更多