2013-12-19 22 views
2

我想了解Jax-WS Web服務如何工作,但無法找到它們的具體資源。舉例來說:Jax-WS Web服務如何工作?每個請求一個端點?

我創建一個使用JAX-WS註釋的非常簡單的Java Web服務,像這樣

@WebService(name = "MyService", serviceName = "MyService", portName = "MyServicePort") 
public class MyService { 

    private int val; 

    public MyService() { 
     val = 0; 
    } 

    @WebMethod(action = "setVal") 
    public void setVal(@WebParam(name = "arg") int arg) { 
     val = arg; 
    } 

    @WebMethod(action = "getVal") 
    public int getVal() { 
     return val; 
    } 
} 

如果我生成這樣的Web服務(使用WS-根,說),建一個客戶端,並從一個客戶端進行以下調用:setVal(5)getVal(),將返回給客戶端的值是什麼?爲什麼?

如果客戶端A呼叫setVal(5),客戶端B呼叫getVal(),那麼客戶端返回什麼值?爲什麼?

當然,我可以自己建立一個網絡服務並對其進行測試,但我希望能夠通過一個解決方案來解決問題。 Jax-Ws是否爲每個請求創建了註釋類的新實例?它以某種方式將相同的源映射到相同的帶註釋的類實例嗎?它是否僅將所有請求映射到註釋類的單例實例?是否有以某種方式挑選的有限註釋類實例池?

回答

5

由於基礎的HTTP協議,Web服務默認爲無狀態。服務器處理每個Web服務請求,因爲即使是從同一個客戶端一個新的交互

通常情況下,JAX-WS Web服務是無狀態的:那就是,沒有 局部變量和對象的值,你在Web服務 中設置的對象從一個調用保存到下一個。即使來自單個客戶端的連續的 請求也被視爲獨立的,無狀態方法調用 。

有一些Web服務使用案例,其中客戶可能希望在一次調用期間在服務上保存數據 ,然後在後續調用期間使用該數據。例如,購物車對象可能是 ,通過重複調用addToCart Web方法,然後通過getCart Web方法獲取 。在無狀態Web服務中,無論調用多少個addToCart方法, 購物車對象將始終爲空。但是通過使用HTTP會話來維護跨Web服務調用的 狀態,購物車可以增量式構建 ,然後返回給客戶端。

在JAX-WS Web服務中啓用有狀態支持需要客戶端和服務器上的編碼量最少爲 。

http://docs.oracle.com/cd/E17904_01/web.1111/e13734/stateful.htm

相關問題