最近用eclipse启动tomcat时老报EOFException异常,虽然不影响使用,但总感觉别扭,就想办法解决了一下。
后分析了一下,原来是tomcat没正常关闭,俺基本每次都是通过任务管理器杀死线程的,主要是项目中一些资源没释放,正常情况下tomcat是不会关闭的,所以只有杀进程了。
由于tomcat没正常关闭,所以它在关闭时做的处理工具,比如session持久化,就有可能没做完。此处异常就是这个问题。
【原因分析】
EOFException表示输入过程中意外地到达文件尾或流尾的信号,导致从session中获取数据失败。异常是tomcat本身的问题,由于tomcat上次非正常关闭时有一些活动session 被持久化(表现为一些临时文件),在重启时,tomcat尝试去恢复这些session的持久化数据但又读取失败造成的。此异常不影响系统的使用。 因为保存在硬盘上的session数 据读取失败,问题似乎不大,但是如果不处理一下,每次启动都会出现这个问题。
【解决办法】
将work下面的文件清空,主要是*.ser文件,或者只是删除掉session.ser亦可。
如果正常关闭服务端,该文件是自动删除的。
work\Catalina\localhost\yourProjectName\SESSIONS.ser删除。如果正常关闭服务端,该文件是自动删除的。
注:yourProjectName 是你当前正在工作的Web项目名称。
考虑到每个人的tomat的工作目录不同,建议在“搜索”功能中找到你的SESSIONS.ser文件,而且只需要删除..\yourProjectName\下的SESSIONS.ser即可。