Web应用程序中序列化的目的

时间:2009-11-17 04:18:08

标签: java tomcat serialization javabeans

  

1.在Web应用程序中使用序列化。

     

2.表单bean是否可以序列化。

     

3.在tomcat中session.ser文件的用法是什么..

5 个答案:

答案 0 :(得分:15)

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

2)如果a)是一个会话作用域,并且b)你正在使用分布式会话或者像Tomcat这样的功能来保持需要它的会话,那么表单bean只能是Serializable是必需的。

3)sessions.ser文件是包含会话中序列化对象的文件。如果您将服务器配置为重新启动服务器,Tomcat会使用它来保留它们(参见上文)。通常,.ser文件是序列化的Java对象,它是对象状态的二进制表示。

答案 1 :(得分:12)

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

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

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

  3. sessions.ser是一个序列化会话。 Tomcat坚持了它,所以它可以在以后恢复。现在您已经了解了为什么我们需要可序列化的bean,因为您可能希望将bean对象存储到会话中,并且Tomcat将会话持久保存到文件系统,即session.ser。因此,您的bean必须实现Serializable,以便可以使用会话持久保存/恢复它们。

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

答案 2 :(得分:3)

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

  1. 会话必须传递到负载平衡群集的其他节点
  2. 由于内存不足,
  3. 会话需要换出
  4. 另一个可能的原因是使用跨上下文调度将请求属性从一个webapp传递到另一个webapp。这两个webapp都有不同的类加载器,所以简单的转换不起作用。

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

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

答案 3 :(得分:1)

哇,很多问题没有很多背景。

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

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

答案 4 :(得分:0)

  1. 来自的一个很好的描述 wikipedia

      

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

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

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

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