java.io.WriteAbortedException:写入中止; java.io.NotSerializedException

2023-11-21

Tomcat出现这种错误的原因是什么?

SEVERE: Exception loading sessions from persistent storage
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException:
   bean.ProjectAreaBean
 at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1333)
 at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
 at java.util.ArrayList.readObject(ArrayList.java:593)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(
    DelegatingMethodAccessorImpl.java:25)

只需实施Serializable

如果你得到一个NotSerializableException就像下面这样,

java.io.NotSerializableException: bean.ProjectAreaBean

那么它只是意味着由异常消息中的完全限定名称标识的类(即bean.ProjectAreaBean在你的情况下)没有实现Serializable接口,而这是后面的代码所期望的。修复起来比较简单,只要让类实现Serializable界面。

package bean;

import java.io.Serializable;

public class ProjectAreaBean implements Serializable {
    private static final long serialVersionUID = 1L;

    // ...
}

The serialVersionUIDfield 不是必需的,但强烈建议使用,因为这可以保持类的不同版本及其实例​​的序列化表示之间的二进制兼容性。因此,当您稍后向类添加新的可序列化字段时,您需要更改serialVersionUID字段(通常只需将其增加 1 就足够了)以防止在反序列化旧版本类的实例期间出现问题。像 Eclipse 这样的 IDE 还提供了一个选项来(重新)生成serialVersionUIDvalue 基本上是基于所有字段计算的哈希值。

也可以看看:

  • JSF 托管 bean 在 Tomcat 部署期间导致 java.io.NotSerializedException
  • 将不可序列化的应用程序作用域 bean 作为集群中可序列化会话作用域 bean 的托管属性注入
  • 什么是serialVersionUID?为什么要使用它?

标记不可序列化字段transient

If your Serializable类又包含引用另一个类的实例的字段/属性,这是绝对不能创建的Serializable(通常,这些代表资源,例如InputStream, Connection等),那么你需要标记它transient。这样,它将在类的序列化过程中被跳过。

private transient SomeObject thisWillNotBeSerialized;

您需要了解,反序列化后该字段始终会变成null。请注意,类的构造函数和初始化块是not反序列化期间调用。如果您想对序列化和反序列化进行更细粒度的控制,请覆盖readObject() and writeObject()方法。您可以在以下链接中找到具体示例:

  • 防止应用程序某些部分的组件树序列化
  • 如何在 Android 中使用 DefaultHttpClient 制作持久 Cookie?

为什么要序列化?

至于why你需要担心序列化,这是因为大多数 Java servlet 容器(如 Tomcat)需要类来实现Serializable每当这些类的实例被存储为HttpSession。那是因为HttpSession当 servlet 容器需要关闭/重新启动或被放置在会话必须同步的服务器集群中时,可能需要保存在本地磁盘文件系统上,甚至需要通过网络传输。

为了能够将 Java 对象保存在本地磁盘文件系统上或通过网络传输它们,必须首先将它们转换为字节流(基本上:byte[] or an InputStream)并且只有当对象背后的类实现时才有可能Serializable. The Serializable界面本身并没有真正做任何事情,它只是一个标记接口。后面的代码只是做了一个instanceof Serializable检查会话属性以进行相应操作。

也可以看看:

  • java.io.Serializable javadoc
  • Java 对象序列化规范
  • Java 教程 - 基本类 - 基本 I/O - 对象流
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java.io.WriteAbortedException:写入中止; java.io.NotSerializedException 的相关文章

随机推荐

  • X11 鼠标移动事件

    在 XLib 中创建窗口时 我提供给大家的口罩有哪些SetWindowAttributes event mask成员 我必须将什么传递给第 11 个参数XCreateWindow 我在主消息循环中寻找的事件是什么 我使用的地方XNextEv
  • 如何将 WSDL 文件转换为类文件

    我有一个 WSDL 文件 我想将 wsdl 文件转换为 Web 服务类文件 是否可以 如果是的话请详细地向我解释一下 在解决方案资源管理器中右键单击 您的项目并转到 添加服务 参考 按窗口底部的 高级 按窗口底部的 添加 Web 引用 在
  • Android TabLayout一旦切换fragment就不再显示内容

    我在我的项目中使用导航抽屉 其中有 5 个片段 在一个片段中 我在设计支持库中引入了 TabLayout 其中包括 2 个片段 一切正常 除了当我离开具有 TabLayout 的片段并切换回它时 所有内容都消失了 在 TabLayout 中
  • 悬停时从下到上更改背景

    我如何更改背景颜色a hover使用持续时间为 0 3 秒的从底部到顶部的过渡 ul li a a li li a a li li a a li ul 那可能吗 Thanks 没有办法 一般 在 CSS 中应用过渡方向 然而 我们可以解决办
  • 从多维数组中递归删除空元素和子数组

    我似乎找不到一个简单 直接的解决方案来解决 PHP 中从数组中删除空元素的老问题 我的输入数组可能如下所示 Array 0 gt Array Name gt EmailAddress gt 等等 如果有更多的数据 虽然可能没有 如果它看起来
  • 显示 UIActionSheet

    我想知道如何从屏幕底部显示 UIActionSheet 我尝试过使用showInView 方法与MainView作为显示它的视图 但我得到了MainView Undeclared error 您需要引用控制器视图 actionSheet s
  • 如何在java中以相同的顺序洗牌两个数组

    我有两个问题和答案数组 String questions Q1 Q2 Q3 String answers A1 A2 A3 I used Collections shuffle Arrays asList questions 打乱每个数组
  • Python 数组切片带有逗号?

    我想知道在切片 Python 数组时逗号的用途是什么 我有一个似乎有效的示例 但对我来说看起来很奇怪的行是 p 20 numpy log10 numpy abs numpy fft rfft data 2048 0 现在 我知道在对数组进行
  • 声明特定资源的授权

    我正在编写一个示例文件存储系统 仅用于 stackoverflow 的示例 我当前的域模型如下所示 public class User public int ID get set public string LoginIdentifier
  • 如何在 Facebook 上实现共享时将特定图像显示为缩略图?

    我正在尝试实现分享这个方法 我使用的代码如下 http www facebook com share php u my website url 现在 当 Facebook 显示时 它会在左侧显示一些缩略图 这些图片是从我的网站上挑选的 如何
  • 在完全加载之前使用 open-uri 和 nokogiri 读取 HTML

    我在用着open uri and nokogiri使用 ruby 进行一些简单的网络爬行 有一个问题 有时 html 在完全加载之前就被读取了 在这种情况下 我无法获取除加载图标和导航栏之外的任何内容 最好的告知方式是什么open uri
  • Android 在特定时间创建视频缩略图

    我已经可以从我的视频创建缩略图了 代码如下所示 videoGalleryThumbnails add ThumbnailUtils extractThumbnail ThumbnailUtils createVideoThumbnail v
  • 更改工具栏中的 ActionBarDrawerToggle 图标 android?

    我有一个带有导航抽屉和工具栏的活动 Activity public class MainActivity extends AppCompatActivity private Toolbar toolbar private CustomTex
  • 同一页面中的多个视图 MVC ASP.NET

    我想展示不同的Views在 ASP NET MVC 技术的同一页面上 怎样才能实现呢 我有来自 2 个不同表的数据 为此我有 2 个不同的表Views用于显示 如何在一个页面上显示这两个视图 有没有一个概念View在 MVC 的视图内 或者
  • 如何将 QML ScrollView 滚动到中心?

    我有这样的代码 ScrollView Image source Image高于ScrollView 我怎样才能将后者滚动到中心Image元素 尽管外表如此 ScrollView紧密相关Flickable 的确 Flickable用于控制可见
  • IEnumerator 和 IEnumerable 之间有什么区别? [复制]

    这个问题在这里已经有答案了 可能的重复 谁能给我解释一下 IEnumerable 和 IEnumerator 吗 IEnumerator 和 IEnumerable 之间有什么区别 IE可枚举是一个定义一个方法的接口获取枚举器它返回一个IE
  • MYSQL 联合排序

    是否可以对第一个查询进行排序并将返回的行保留为第一个 而不对第二个查询进行排序 如果这有道理的话 我当前查询的一个例子是 SELECT FROM Devices WHERE Live true AND Category apple ORDE
  • 图自动布局算法

    为了简化问题 我有一个包含二维平面上的节点和边的图 我想要做的是单击一个按钮 它会自动布局图表以使其看起来干净 我的意思是边的最小交叉 节点之间的良好空间 甚至可能代表图形比例 加权边 我知道这对于什么是干净的图表来说完全是主观的 但是有人
  • 即使在 SelectionMode="Single" 下,ListBox 也会选择许多项目

    我遇到了一些很奇怪的事情 简单的WPF应用程序
  • java.io.WriteAbortedException:写入中止; java.io.NotSerializedException

    Tomcat出现这种错误的原因是什么 SEVERE Exception loading sessions from persistent storage java io WriteAbortedException writing abort