2012-08-26 24 views
3

我嘗試在首次調用RPC服務期間獲取會話信息。GWT - 在RPC服務調用期間獲取會話

public class MyServiceImpl extends RemoteServiceServlet implements 
MyService { 

    public MyServiceImpl() { 
     HttpServletRequest req = getThreadLocalRequest(); 
     // req = null here 
    } 
} 

客戶端,我做一個簡單的通話:

MyServiceAsync service = GWT.create(MyService.class); 

是否有一個替代解決方案的第一個RPC調用過程中獲得HttpServletRequest的?

謝謝。

回答

1

您在servlet的構造函數中調用getThreadLocalRequest(),該構造函數在servlet初始化時僅調用一次。那時請求不是可用的。您需要覆蓋每個RPC調用調用的方法processCall(String)

public class MyServiceImpl extends RemoteServiceServlet implements MyService { 

    @Override 
    public String processCall(String payload) { 
     HttpServletRequest req = getThreadLocalRequest(); 
     HttpSession session = req.getSession(); 
    } 
} 
+0

我試過你的解決方案,但沒有調用processCall方法。我是否使用另一個調用解決方案比GWT.create(...)? –

+0

你是什麼意思,它不叫?你需要在'service'變量上調用一些RPC方法。你必須記住'MyServiceImpl'代碼在服務器上運行,'GWT.create(..)'在客戶端上運行,所以沒有會話或類似的東西。那時只有一個Javascript代理被創建。 – Strelok

+0

好吧,這是工作,抱歉我的誤解。再次感謝你 ! –