2011-09-12 37 views
6

可能重複:
Why does HttpServlet implement Serializable?爲什麼Java中的HttpServlet實現可序列化?

這個問題突然來了幾日前在一個內部討論,我們似乎沒有找到相同的任何合適的答案。任何人都可以將我指向正確的方向嗎?

的問題:

1)爲什麼在java中implements serializableHttpServlet?我似乎沒有找到相同的邏輯理由。

2)雖然試圖弄清楚這一點,我看了看API文檔,發現了一些有趣的東西

public abstract class HttpServlet extends GenericServlet 
implements Serializable 

現在,什麼是有趣的是GenericServlet也延伸Serializable。所以父類和子類都實現了可序列化。這不是一種反模式嗎?

+0

關於第二個問題的任何建議? –

回答

7

1)爲什麼java中的httpservlet實現可串行化?我似乎沒有找到任何相同的邏輯原因 。

要支持虛擬機之間的集羣化和系列化,鈍化等

+0

什麼是鈍化?從來沒有聽說過這個詞,谷歌告訴了一些關於氧化物的東西: –

+1

@ ganguly.sarthak也許你需要處理你的谷歌搜索技巧:http://www.google.ie/search?sourceid=chrome&ie=UTF-8&q=passivation+servlet :-) –

+0

但是,如果父類'GenericServlet'是可序列化的,爲什麼再次標記'HttpServlet'可序列化? – Sid

1

另一個原因是,網絡的容器,如Tomcat關閉時調用一些掛鉤。這些鉤子保留hdd上的應用程序/ servlet的狀態,所以當web容器重新啓動時,應用程序不會失去它的狀態。

+1

一個Servlet應該是線程安全的或者至少沒有對話狀態。那麼需要什麼? –

+0

@AmirPashazadeh一個Servlet可以爲每個用戶擁有多個會話狀態。這是指向「會話」對象的整個點,在請求/響應週期之間跟蹤該狀態。該狀態在Servlet容器正在運行時駐留在內存中。當容器退出時,Poof!,內存清除,會話狀態消失。本答案中的想法是關於如何*某些* Servlet容器提供一個可選功能,通過序列化將該會話狀態保存到存儲以「脫水」狀態數據。在重新啓動容器後,會話被重新組合以讓用戶在他們離開的地方繼續工作。 –

相關問題