2011-03-01 119 views
1

我試圖序列化HttpSession對象,並得到了以下exeption序列化HttpSession對象

java.io.NotSerializableException: org.apache.catalina.session.StandardSessionFacade 
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1081) 
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302) 
at com.tps.Session.saveSession(Session.java:16) 
at org.apache.jsp.setSession_jsp._jspService(setSession_jsp.java:56) 
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331) 
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329) 
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:873) 
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665) 
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528) 
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81) 
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689) 
at java.lang.Thread.run(Thread.java:595) 

回答

9

你爲什麼要嘗試這樣做呢? HttpSession對象不可序列化,並且不應該是。

如果您需要保存會話的內容,然後逐個遍歷會話屬性,並對這些屬性進行序列化。

+0

+ 1perfect .......... – 2011-03-01 10:34:34

+0

怎麼樣WebSocketSession,您需要將消息發送到客戶端 – fudy 2017-03-13 07:22:59

3

另外,請記住存儲在HttpSession中的對象應該是可序列化的,尤其是當您將Web應用程序部署到集羣時,在這種情況下會話可能需要從一個JVM移動到另一個JVM。
這個規則不是通過HttpSession.setAttribute方法實施的,它將Object作爲參數而不是Serializable,因此開發人員需要遵循這一良好實踐。

For more information.

+0

這不涉及到具體quesiton /問題都沒有。 – BalusC 2012-10-18 18:55:20