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

问题描述 投票:8回答:5

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

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

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

java tomcat serialization javabeans
5个回答
15
投票

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

2)如果a)它是会话范围的b)你使用分布式会话或Tomcat用来持久化需要它的会话,那么表单bean只能是Serializable是必需的。

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


12
投票

对于你的第一个和第二个问题,看看这个SO thread。关于你的第3个问题,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存储在数据库中,......


1
投票

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

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

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


0
投票
  1. 来自wikipedia的相当不错的描述: 序列化具有许多优点。它提供: 一种持久化对象的方法,比将它们的属性写入磁盘上的文本文件更方便,并通过读回来重新组装它们。 发出远程过程调用的方法,例如在SOAP中 用于分发对象的方法,尤其是在软件组件中 如COM,CORBA等 一种用于检测时变数据的变化的方法。 一个真实世界(简单)示例:假设您在java中创建一个User实例。现在,您希望使用javascript在Web浏览器中显示此对象。一种选择是以这样的方式序列化对象:javascript可以反序列化对象(使用java和javascript都能理解的表示)并显示它。
  2. 这取决于你需要对表单bean做什么,以确定它是否应该被序列化。
  3. Tomcat Manager App是一个Web应用程序,可帮助您将其他Web应用程序部署和管理到tomcat。我不是tomcat专家,但我认为Tomcat Manager会尝试记住有关它正在管理的Web应用程序创建的会话的信息。即使重新启动tomcat进程,它也需要记住此信息。因此,Tomcat Manager创建了一个名为“Session.ser”的文件,该文件是它需要记住的有关所有托管应用程序会话的信息的序列化表示。
© www.soinside.com 2019 - 2024. All rights reserved.