2013-04-16 3 views
2

RPC, Spring, Postgresql과 함께 GWT (2.5)를 사용하고 있습니다. 내 문제는 HttpSession 처리에 관한 것입니다. 서버에 대한 모든 쿼리는 Spring (DispatchServlet)에서 내 GwtController (RemoteServiceServlet 확장)로 전달됩니다. 특정 RemoteService가 GwtController에 삽입됩니다. GwtContorller 내부에서 HttpSession을 쉽게 가져올 수 있습니다. 예를 들어 getThreadLocalRequest(). getSession() 또는 request.getSession(). 내 질문은 RemoteService에서 HttpSession 객체를 얻는 방법입니까?GWT - RemoteService 인터페이스 및 Spring - HttpSession을 얻는 방법?

public class GwtRpcController extends RemoteServiceServlet { 
…………… 
private RemoteService remoteService; 
private Class remoteServiceClass; 
……………… 

public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception { 
    ………… 
} 

public String processCall(String payload) throws SerializationException { 
    ………… 
} 

public void setRemoteService(RemoteService remoteService) { 
    ……………. 
} 

} 

내 인터페이스 - DataService에 그런 다음 정적 방법으로 Request 노출, 당신의 ServletThreadLocal을 유지하고있다 현재 Request 저장할 수 있습니다되어 RemoteService에게

public class DataServiceImpl implements DataService { 

public Data getData(){ 

    !!!!! Here I want to get HttpSession !!!!! 
    ………………………… 

} 

} 

답변

3

을 구현합니다.

public class GwtRpcController extends RemoteServiceServlet { 

    static ThreadLocal<HttpServletRequest> perThreadRequest = 
     new ThreadLocal<HttpServletRequest>(); 

    @Override 
    public String processCall(String payload) throws SerializationException { 
    try { 
     perThreadRequest.set(getThreadLocalRequest()); 
     return super.processCall(payload); 
    } finally { 
     perThreadRequest.set(null); 
    } 
    } 

    public static HttpServletRequest getRequest() { 
    return perThreadRequest.get(); 
    } 
} 


public class DataServiceImpl implements DataService { 
    public Data getData(){ 
     HttpServletRequest request = GwtRpcController.getRequest(); 
     HttpSession session = request.getSession(); 
    } 
} 
+0

대단히 고맙습니다. 작동합니다. –

+0

도와 주셔서 감사합니다. –

관련 문제