FormBean的Session序列化問題

FormBean的Session序列化問題

異常信息:

2013-9-25 22:39:43 org.apache.catalina.session.StandardManager start

嚴重: Exception loading sessions from persistent storage

java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: com.zyx.strutsdemo.user.domain.User

at java.io.ObjectInputStream.readObject0(Unknown Source)

at java.io.ObjectInputStream.defaultReadFields(Unknown Source)

at java.io.ObjectInputStream.readSerialData(Unknown Source)

at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)

at java.io.ObjectInputStream.readObject0(Unknown Source)

at java.io.ObjectInputStream.readObject(Unknown Source)

at org.apache.catalina.session.StandardSession.readObject(StandardSession.java:1509)

at org.apache.catalina.session.StandardSession.readObjectData(StandardSession.java:998)

at org.apache.catalina.session.StandardManager.doLoad(StandardManager.java:395)

at org.apache.catalina.session.StandardManager.load(StandardManager.java:322)

at org.apache.catalina.session.StandardManager.start(StandardManager.java:649)

at org.apache.catalina.core.StandardContext.start(StandardContext.java:4714)

at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3461)

at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:426)

at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1361)

at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1653)

at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1662)

at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1662)

at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1642)

at java.lang.Thread.run(Unknown Source)

Caused by: java.io.NotSerializableException: com.zyx.strutsdemo.user.domain.User

at java.io.ObjectOutputStream.writeObject0(Unknown Source)

at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)

at java.io.ObjectOutputStream.writeSerialData(Unknown Source)

at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)

at java.io.ObjectOutputStream.writeObject0(Unknown Source)

at java.io.ObjectOutputStream.writeObject(Unknown Source)

at org.apache.catalina.session.StandardSession.writeObject(StandardSession.java:1585)

at org.apache.catalina.session.StandardSession.writeObjectData(StandardSession.java:1015)

at org.apache.catalina.session.StandardManager.doUnload(StandardManager.java:529)

at org.apache.catalina.session.StandardManager.unload(StandardManager.java:470)

at org.apache.catalina.session.StandardManager.stop(StandardManager.java:679)

at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4882)

at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3454)

... 7 more


產生異常的代碼:

public class User {


private String username;

private String password;

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

}


解決問題後的代碼:

public class User implements Serializable{


private String username;

private String password;

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

}

總結:

如果要把session對象複製到硬盤上,或者集羣中的其他機器或者網絡中的其他機器,即把session對象序列化,那麼需要實現Serializable接口。否則java提供的OutPutStream的writeObject方法會拋出 java.io.NotSerializableException。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章