`
1021082712
  • 浏览: 86533 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
社区版块
存档分类
最新评论

错误:NotSerializableException: org.apache.struts2.dispatcher.StrutsRequestWrapper

    博客分类:
  • SSH
阅读更多

当运行ssh项目时,tomcat重启动时,报如下的错误:

严重: IOException while loading persisted sessions: java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: org.apache.struts2.dispatcher.StrutsRequestWrapper
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: org.apache.struts2.dispatcher.StrutsRequestWrapper
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1331)
	at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1969)
	at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1893)
	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1775)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1327)
	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:349)
	at org.apache.catalina.session.StandardSession.readObject(StandardSession.java:1441)
	at org.apache.catalina.session.StandardSession.readObjectData(StandardSession.java:942)
	at org.apache.catalina.session.StandardManager.doLoad(StandardManager.java:394)
	at org.apache.catalina.session.StandardManager.load(StandardManager.java:321)
	at org.apache.catalina.session.StandardManager.start(StandardManager.java:637)
	at org.apache.catalina.core.ContainerBase.setManager(ContainerBase.java:438)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4271)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
	at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:926)
	at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:889)
	at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
	at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1149)
	at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
	at org.apache.catalina.core.StandardService.start(StandardService.java:516)
	at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: java.io.NotSerializableException: org.apache.struts2.dispatcher.StrutsRequestWrapper
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1164)
	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158)
	at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330)
	at org.apache.catalina.session.StandardSession.writeObject(StandardSession.java:1517)
	at org.apache.catalina.session.StandardSession.writeObjectData(StandardSession.java:959)
	at org.apache.catalina.session.StandardManager.doUnload(StandardManager.java:517)
	at org.apache.catalina.session.StandardManager.unload(StandardManager.java:463)
	at org.apache.catalina.session.StandardManager.stop(StandardManager.java:667)
	at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4519)
	at org.apache.catalina.core.ContainerBase.removeChild(ContainerBase.java:924)
	at org.apache.catalina.startup.HostConfig.undeployApps(HostConfig.java:1191)
	at org.apache.catalina.startup.HostConfig.stop(HostConfig.java:1162)
	at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:313)
	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1086)
	at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1098)
	at org.apache.catalina.core.StandardEngine.stop(StandardEngine.java:448)
	at org.apache.catalina.core.StandardService.stop(StandardService.java:584)
	at org.apache.catalina.core.StandardServer.stop(StandardServer.java:744)
	at org.apache.catalina.startup.Catalina.stop(Catalina.java:628)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:603)
	... 6 more

 但先关闭tomcat后,启动,却不会报错,在网上查了一些资料,原因归结为把未序列化的对象放在了session中,tomcat停止时,会保存session资源,然后再重启服务器后,tomcat会尝试恢复这些session

 

下面一句话是关键:“如果对象被保存在了Session中,tomcat在重启时要把Session对象序列化到硬盘,这个对象就必须实现Serializable接口”,如果不懂序列化,可以百度一下,看到后你就会知道为什么放在session中的类都需要序列化了。

 

解决方法

方案一:将放在session中的类实现Serializable接口

方案二(在网上找的,建议方案一):

配置tomcat在关闭的时候就不去保存session资源。

 

 在server.xml中Context下添加如下的内容:

<Manager className="org.apache.catalina.session.PersistentManager" saveOnRestart="false"/>

 

再进行启动停止等操作,报如下的类似错误:

 org.apache.catalina.session.PersistentManagerBase start

严重: No Store configured, persistence disabled

 

原因是添加的东东少添加了一点点儿。

解决办法:

修改刚才添加的 <Context>中<Manager> 元素:

将

    <Manager className="org.apache.catalina.session.PersistentManager" saveOnRestart="false"/>

改为:

    <Manager className="org.apache.catalina.session.PersistentManager" saveOnRestart="false">

        <Store className="org.apache.catalina.session.FileStore"/>

    </Manager>

即可解决该问题。   

 最后一个疑问,为什么tomcat停止时,要保存这些session呢?google之大致原因是,用户访问过后浏览器没有关闭,此时tomcat如果重启,用户访问存在session中的信息就应该还在,所以session要将对象信息序列化到硬盘,重启时再反序列化到session中。这样保证不影响用户的操作。

分享到:
评论

相关推荐

    java 中序列化NotSerializableException问题解决办法

    Java 中序列化 NotSerializableException 问题解决办法 Java 中序列化 NotSerializableException 问题是 Java 开发中常见的问题之一。 NotSerializableException 是 Java 中的一个异常,它发生在尝试序列化一个不...

    struts2 依赖核心包 --xwork 源文件

    Struts2是一个强大的Java web应用程序框架,它基于MVC(Model-View-Controller)设计模式,为开发人员提供了构建高效、可维护性高的Web应用的工具。XWork是Struts2的核心组件,它负责处理Action的业务逻辑和控制流程...

    7.7初始mybatis个人笔记.docx

    &lt;groupId&gt;org.apache.maven.plugins &lt;artifactId&gt;maven-resources-plugin &lt;version&gt;2.6 &lt;encoding&gt;UTF-8 ``` 6. **SQL片段引用**: 可以在XML映射文件中创建`&lt;sql&gt;`标签定义SQL片段,然后通过`...

    2021-2022计算机二级等级考试试题及答案No.9484.docx

    21. Java对象序列化:使用ObjectInputStream和ObjectOutputStream进行对象的序列化和反序列化时,对象必须实现Serializable接口,否则会抛出NotSerializableException异常。正确答案:正确。 22. ASP.NET访问SQL ...

    java.io.NotSerializableException(解决方案).md

    常见的问题

    java session

    2. **错误示例** ```java org.apache.catalina.session.StandardManagerdoLoad 严重: IOException while loading persisted sessions: java.io.WriteAbortedException: writing aborted; java.io....

    2021-2022计算机二级等级考试试题及答案No.12518.docx

    2. 计算机同外部世界交流的工具是输入/输出设备(D),包括键盘、鼠标、显示器、打印机等。 3. 内存储器通常采用半导体存储器(C),如RAM和ROM,它们速度快,但易失性。 4. VisualFoxpro 数据库文件是管理数据库...

    aesjava源码-THIS-.-IS-GREAT-:////IntelliJIDEA从.class文件重新创建的源代码//(由Fernflo

    导入java.io.NotSerializableException; 导入java.io.ObjectStreamException; 导入java.io.Serializable; 导入java.security.AccessController; 导入java.security.AuthProvider; 导入java.security....

    2021-2022计算机二级等级考试试题及答案No.13068.docx

    2. 公式的自动填充是Excel等电子表格软件中的功能,允许用户在输入公式后,将其应用到相邻单元格,以进行快速计算。 3. 内存分为ROM(只读存储器)和RAM(随机访问存储器)两部分。ROM在断电后仍能保持数据,而RAM...

    2021-2022计算机二级等级考试试题及答案No.16948.docx

    编译错误通常发生在代码违反了语言的语法规则,而运行时异常则是在程序运行过程中遇到的问题,如空指针异常、类型转换异常等。 2. 数据类型转换:在Java中,`Double.parseDouble()`和`Integer.parseInt()`用于将...

    2021-2022计算机二级等级考试试题及答案No.4590.docx

    2. Excel2000 是一款运行在 Windows 操作系统下的电子表格软件,而非 DOS 系统。 3. 域名后缀 .com 表示的是商业公司(Commercial)。 4. HTTP 协议是超文本传输协议,用于网页浏览和其他基于超文本的信息传输。 ...

    2021-2022计算机二级等级考试试题及答案No.16705.docx

    2. 打印机按照印字的工作原理分为击打式打印机(如针式打印机)和非击打式打印机(如激光打印机、喷墨打印机),非击打式打印机无机械冲击,打印质量更高且噪音低。 3. DOS命令COPY A:*.* B:与DISKCOPY A:B:是等价...

    关于Java对象序列化您不知道的5件事Java开发Java

    如果一个类没有实现这个接口,尝试序列化其对象时会抛出`NotSerializableException`。 3. **transient关键字**: Java提供了`transient`关键字来标记那些不应该被序列化的字段。当一个字段被声明为`transient`,...

    2021-2022计算机二级等级考试试题及答案No.19198.docx

    Java对象要进行序列化(存储或网络传输)必须实现Serializable接口,否则会抛出NotSerializableException异常。 9. 控制流语句: break和continue在循环体中使用,break用于立即退出循环,而continue跳过当前循环...

    2021-2022计算机二级等级考试试题及答案No.3126.docx

    2. 键盘接口:在计算机中,键盘通常通过串行接口(如USB或PS/2)连接到主板。 3. 多媒体配置:多媒体环境下工作,除了基本配置,还需要光驱用于读取光盘中的数据,声卡用于处理音频信号,音箱则用于播放声音。 4. ...

    2021-2022计算机二级等级考试试题及答案No.15011.docx

    18. 序列化:使用ObjectInputStream和ObjectOutputStream进行对象持久化时,对象必须实现Serializable接口,否则会抛出NotSerializableException异常。 19. ASP表单字段值:在ASP中,可以通过Request对象获取表单...

    2021-2022计算机二级等级考试试题及答案No.1521.docx

    15. 对象序列化是通过实现Serializable接口来实现的,否则会导致NotSerializableException异常。 16. 纯文本文档的扩展名通常是TXT。 17. 局部变量不会被赋予默认初值,需要程序员显式初始化。 18. VCD和DVD使用...

    2021-2022计算机二级等级考试试题及答案No.15117.docx

    2. 局部变量的作用域限制在其定义的方法或代码块内。A和B选项正确,因为主方法中的变量确实只能在主方法中使用,形参和实参分别属于调用和被调用方法的局部变量。C选项不正确,因为在不同方法中可以使用相同变量名,...

    2021-2022计算机二级等级考试试题及答案No.10659.docx

    21. Java序列化时,对象需要实现Serializable接口,否则无法进行序列化操作,会出现NotSerializableException异常。 22. Python函数`f(1, , 3)`中缺少第二个参数,会导致语法错误。 23. 在二维数组a中,a[j]前面的...

    2021-2022计算机二级等级考试试题及答案No.5129.docx

    2. 事件处理与用户界面:在编程中,为窗口中的控件如命令按钮设置单击鼠标时的响应通常是在事件选项卡中进行的,以便定义事件处理函数或方法。 3. 数据库的三级模式结构:数据库的三级模式结构包括模式(全局逻辑...

Global site tag (gtag.js) - Google Analytics