2013-06-20 103 views
2

我是Jersey/REST新手,正在嘗試編寫簡單的Web服務。我擁有的問題是請求之間的數據存儲。在Jersey REST請求/響應之間存儲變量

Servlets可以訪問會話,但我不相信Jersey/REST允許這樣做。

我目前正在編寫此服務,以便Android應用程序將向Tomcat發出RESTful請求。

現在我還不確定這些請求的類型:它們應該是帶參數的URL還是簡單的XML字符串?從應用程序傳輸的數據類型將包括RSS源和關鍵字的地址以及各種元數據。

來自服務器的XML響應將再次由RSS源地址,關鍵字,關鍵字的頻率和其他元數據組成。

目前的想法是在應用程序和服務器上使用JAXB來組成和分解XML到Java對象。

JSON或GSON在此處不可用。

但是,請求之間存儲數據呢?如果XML形成請求和響應操作,那麼將所有相關變量存儲在XML中就足夠了,每個請求都有一個引用服務器數據庫的ID號。

還是通過REST使用servlet的會話上下文更好?

道歉,如果上述聽起來含糊不清。我是Jersey/REST新手。

回答

1

REST webservices基於HTTP協議,它是一種無狀態協議。 在我看來,在web服務中保存狀態不是一個好主意。 您應該使用cookie來存儲用戶數據。

+0

但我是否在請求之間存儲狀態?我會根據請求/響應將所有內容發送到客戶端/服務器。 Android可以存儲Cookie嗎? –

+0

你想在請求之間存儲什麼樣的數據? – condit

+0

該問題已被稍微修改以提供更多信息。 –

5

雖然我們已說過,通常建議您WS調用是無狀態的,澤西不依賴於Servlet的,所以你可以注入HttpServletRequest的,並從那裏會議:

@GET 
public String getMethod(@Context HttpServletRequest req) { 
    HttpSession session= req.getSession(true); 
    ... 

就可以配置你的Web服務器會話存儲到內存,cookie,緩存,數據庫或其他。

0

JAX-RS服務可以是單例或每個請求對象。單例 意味着只有一個Java對象服務於HTTP請求。每請求意味着 表示創建一個Java對象來處理每個傳入的請求,並在請求結束時丟棄 。每請求也意味着無狀態,因爲在請求之間沒有服務狀態 。

+0

我打算每次請求時,服務器收到請求時都會創建一個新的Java對象。請求的所有細節都會持久保存到數據庫中,並且響應將包含一個唯一標識(存儲在響應的XML中),充當排序的會話標識。就我所瞭解的Jersey而言,它會模擬servlet方面來處理多個請求。 –