2013-03-23 79 views
0

我編寫了一個異步servlet將緩存對象中的更改提供給發送請求到servlet的所有客戶端。用異步servlet中的新請求替換舊請求

通過請求,客戶端可以通過包含不同的參數來獲取緩存的一個子部分。

我只是簡單地將請求存儲在一個ArrayList中,並在發生更改時將其反覆發送給客戶端。

一切正常,除了現在我有一個要求來處理客戶端將發送第二個請求可能不同的參數的情況。

我想用這個新存儲的舊請求替換舊的請求。但要做到這一點,我需要知道請求是否來自同一個用戶。有沒有一種方法來測試請求是否來自Servlets 3.0的同一用戶?

+0

您是否必須能夠跨多個會話識別同一用戶? – clav 2013-03-23 01:12:07

+0

沒有沒有多個會話 – Geronimo 2013-03-23 01:56:45

回答

1

必須提供舊請求。您可以使用Connection:closed header發送錯誤響應。

要關聯來自同一客戶端的請求,唯一的方法就是通過cookie。您可以比較兩個請求中的會話ID(這是一個cookie)。如果任何傳入請求沒有會話,您應該建立一個會話(通過request.getSession()),然後執行重定向,以便客戶端將重試帶有jsessionid cookie的請求。

if request.getSession(false)==null 
    request.getSession(true); 
    response.sendRedirect(request.uri +"?"+ request.query) 

重定向你的情況必要的,因爲通常它會需要一段時間才能返回響應,但我們希望儘快設置cookie。