传智播客学习之tomcat诡异异常
来源:互联网 发布:cnc编程工资高吗 编辑:程序博客网 时间:2024/05/16 11:34
今天在运行tomcat时,程序报了一个超诡异异常,折腾了我近两个小时,气的半死,最后决定放弃,先看看视频吧,也许上天在眷顾我,在看张老师视频的时候,张老师居然分析了这个异常,兴奋之余,也和大家一起共享一下吧。
今天在写一个struts程序的时候,我的tomcat居然报了如下错误:
org.apache.catalina.session.StandardManager start
Exception loading sessions from persistent storage
java.io.WriteAbortedException:writing aborted;java.io,NotSerializableException
当看到第一行的时候,我就有点懵了,以为是tomcat崩溃了,所以赶紧将tomcat删除,重新解压了一份,可是错误并没有消失,然后我接着往下看,第二行,看到了session,有点崩溃,程序代码看了无数遍,感觉就是没问题,然后看到第三行说序列化异常,我就有些崩溃了,然后一遍遍测试程序,没有任何问题,看到序列化,又去看actionform,也是实现了序列化接口,折腾了近两个小时,最后由于没有任何头绪,决定暂时放弃,然后再接下来看张老师视频,居然发现视频讲解了这个异常,原来问题就出现在序列化这块,由于我的formbean中有一个对象属性,这个对象属性没有序列化而导致的异常,当我把这个对象的类也实现了序列化接口,问题迎刃而解。
原理分析:
Tomcat在内部实现的时候,会有一个机制,那就是当Tomcat服务器停止后,tomcat会将内存中的信息写到硬盘上,当我们重启服务器的时候,他会将硬盘上序列化文件重新读入内存中,以此来保证session的共享,在集群系统中经常要使用。而在此,我们实际就是将session中存储的一个个对象序列化到硬盘,但是对象中如果有对象属性,我们也将这个对象序列化到硬盘,tomcat序列化一般在work目录下。但是不是所有的对象都可以被序列化的,他必须实现Serializable接口,也就是序列化,然后java虚拟机在加载这个类的时候,对字节码会进行特殊处理,生成的二进制代码可以通过ObjectOutputStream.writeIbject(obj)方法写到硬盘上。而虽然我们FormBean实现了序列化接口,而对象属性对应得类没有实现序列化接口,不能被序列化,最后导致以上异常。
注:
1)如果是对象类型的属性,那么我们如何在页面上显示呢?
我们可以采用在设置name属性的时候对象.属性名显示
2)在struts1内部我们会先get属性得到一个对象,然后填充好,再调用set方法,所以对象属性一定先初始化。否则会出现问题,struts2 则不用,因为他直接在外面new一个新的对象,然后直接调用set方法填充。
3)Session共享
当我们在集群的时候,由于有负载均衡,我们这次访问和另一次请求可能分布在不同的服务器上,但是无论我们去访问哪一个服务器上,我们都希望一次回话信息能够跟踪,即回话跟踪,即session需要共享,这时我们需要序列化,所以session作用域中的也需要实现序列化接口
- 传智播客学习之tomcat诡异异常
- C++学习-诡异错误之rank
- 异常最诡异第二期之 Jedis pool.returnResource(jedis)
- 范型&&诡异异常
- javamail诡异的504异常
- mybatis诡异的异常!!!时好时坏!!!
- C语言之诡异
- 大连,诡异之城
- AutoCompleteTextView诡异之处
- lua之诡异的#
- RecycleView之诡异bug
- Tomcat学习之Tomcat架构
- Tomcat学习之Tomcat架构
- python学习之异常
- Python学习之异常
- python学习之异常
- java学习之异常
- Python学习之异常
- Delphi调用外部程序详解
- JQuery实战第四讲:标签页效果 一
- 第一次写点什么
- Cannot generate .cod file in Eclipse——关于在Eclipse下面不能生成.cod文件的解决
- 传智播客学习之通过学习标签谈谈学习方法
- 传智播客学习之tomcat诡异异常
- 传智播客学习之面试知识点总结-标签
- 传智播客学习之面试知识点总结struts
- 让程序(服务)开机运行
- 经典JS函数thickbox的使用-关闭刷新或无刷新
- 小巧强大删除工具(删除顽固文件)
- linux内核情景分析{中断 系统调用 内存}
- struts国际化处理
- 虚惊一场的海啸