我一直致力于Java Web应用程序,其中框架坚持认为一切都是可序列化的。我假设这不是特定于框架,而是特定于Java中的Web应用程序,我的问题是:什么是框架/服务器/无论做什么都是序列化的东西?是否必须这样做?
注意:我对Web应用程序或序列化了解不多。
答案 0 :(得分:16)
典型的问题是,在复制或服务器关闭期间,内部HTTP会话被“序列化”到持久性存储,以便可以恢复或共享它们。
序列化正在保存对象的状态,并且能够在以后重新构建该状态。
答案 1 :(得分:11)
对于大多数应用来说,这不是必需的,但可以通过两种方式帮助提高性能:
答案 2 :(得分:3)
序列化在任何应用程序环境中都很有用,而不仅仅是Web应用程序。
序列化的一个主要用途是运输。您想要将对象复制或移动到远程计算机,比如UserProfile。您可以序列化UserProfile,发送序列化数据(通常是XML)并将其反序列化为接收端的新对象,此时可以像操作原始对象一样对其进行操作。
另一个用途是保存状态。你可能有一个游戏,你想保存游戏板的确切状态。您可以序列化Board对象,随后可以告诉它序列化每个Tiles。
答案 3 :(得分:3)
根据Web框架,会话中的对象可能会使用序列化持久保存到磁盘。
答案 4 :(得分:2)
如果您正在使用Enterprise Java Bean(EJB)并且具有无状态会话Bean API,则每个SSB实例在一个Java虚拟机上的一个线程中运行,并且其客户端在不同的线程中运行,并且通常在不同计算机上的不同JVM。因为您无法将Java对象的引用从一个JVM传递到另一个JVM,所以该对象需要序列化为字符串,发送到另一个JVM,然后反序列化为对象。这个序列化/反序列化都会发生在进入的参数和返回值中。
如果您正在使用Java消息服务,那么您在每条消息中发送的对象将被序列化为字符串,持久保存到数据库中,然后在其他时间和地点由消息接收器进行反序列化。
而且,正如Will Hartung所指出的,HTTP Session对象通常是在JVM之间共享的。如果您有一个运行电子商务应用程序的Glassfish Java EE应用程序服务器集群,则每个客户的请求都会对任何可用服务器进行负载平衡,并且该服务器必须能够查找客户的会话状态(客户名称,购物车等)。 )。它只能通过序列化获得。为了安全起见,还可以将会话状态写入磁盘(例如,数据库)。