2012-05-07 26 views
3

我們的應用程序要求我們將一些用戶的會話數據序列化到文件系統,如果他們的會話過期。我們會按照即將推出的序列化它,但由於我們的應用程序的性質,這將會太昂貴。如何在Java HTTP Servlet會話結束時運行任意代碼?

如果我們可以找出某種方法來掛鉤某種'onSessionEnd'方法,那麼我們可以運行清理代碼。

回答

4

您需要爲您的應用程序設置一個HttpSessionListener

接口上有一個名爲onSessionDestroy的方法,當會話結束時應該調用該方法,然後您可以執行序列化。

要設置監聽器,你加入到web.xml

<listener> 
    <listener-class>com.example.app.session.MySessionListener</listener-class> 
</listener> 
+0

你知道,如果onSessionDestroy被稱爲如果服務器完全關閉(即:通過停止服務,而不是殺人的過程)? – benstpierre

+0

我這麼認爲。但我不確定。它應該... –

+0

這取決於容器的配置。某些容器(例如Tomcat)在默認情況下跨越重新啓動持續會話。在這種情況下,您將看不到會話被破壞的事件,但您將看到會話鈍化(並在服務器再次啓動時會話激活)。 –