java.io.NotSerializableException错误解决方法

                                                                                                                                                                                                   【问题】

          SSH的学习过程中,见到这样的一个错误:

  org.apache.catalina.session.StandardManager doLoad

严重: IOException while loading persisted sessions: java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: xxxxxxxx

java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException:cn.itcast.shop.category.vo.Category

 

  org.apache.catalina.session.StandardManager start

严重: Exception loading sessions from persistent storage

java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: xxxxxxx

        【调侃】

          可是自己一直很纳闷儿的事,同样的代码,同样的操作方式,为什么我老是报这个错?而讲课老师同样的操作就没事了?我也是醉醉的啦~\(≧▽≦)/~(纯属闲扯)

          言归正传啊,先解释一下为什么会出现这个问题?

         【原因】

         在说原因之前,先解释两个词:正常关闭,非正常关闭

         正常关闭:就是指在停止tomcat服务时,点击该按钮myeclipse tomcat——Stop server,等同于点击servers窗口的红色停止按钮,这两种都是属于正常关闭。(如下图:)


          非正常关闭:指停止tomcat服务时,点击console窗口的红色按钮:如下图:

java.io.NotSerializableException错误解决方法_第1张图片

        当重启服务时,我们需要停止原来的服务,而停止服务有两种方式:1·正常关闭,2·非正常关闭。非正常关闭就会导致session对象销毁,而正常关闭则不会销毁session对象。也就是说,如果我们使用第一种方式关闭,tomcat停止时,还保存着session资源,(目标文件cn.itcast.shop.category.vo.Category类,原来保存于session中,而现在存于硬盘的文件夹里)并完成在session中存着的类的序列化,而由于该目标类没有实现序列化的接口,所以在重启服务时,它会尝试自动恢复session,从而导致序列化和反序列化的异常。

       【解决方案】

         1·存在session中的类实现序列化接口:如下代码:

package cn.itcast.shop.category.vo;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import cn.itcast.shop.categorysecond.vo.CategorySecond;

@SuppressWarnings("serial")
public class Category implements  Serializable   {

        2·选择关闭方式为非正常关闭方式:即点击console窗口的红色按钮。

        3·(前提:自己按照tomcat插件)

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

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

 org.apache.catalina.session.PersistentManagerBase start

严重: No Store configured, persistence disabled

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

    解决办法:

       修改刚才添加的  元素:

    

改为:

    

        

    

        差不多就是这些,我选择的是第一种方案,第一种和第二种都可方便的解决该问题。


你可能感兴趣的:(java.io.NotSerializableException错误解决方法)