2

私のプロジェクトでは、RPC、Spring、および Postgresql で GWT (2.5) を使用しています。私の問題は HttpSession の処理に関するものです。サーバーへのすべてのクエリは、Spring (DispatchServlet) によって GwtController (RemoteServiceServlet を拡張) にディスパッチされます。特定の RemoteService が GwtController に挿入されます。GwtContorller 内で HttpSession を取得するのは簡単です。たとえば、getThreadLocalRequest().getSession() または単に request.getSession() から。私の質問は、 RemoteService 内で 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) {
    …………….
}

}

My Interface - RemoteService を実装する DataService

public class DataServiceImpl implements DataService {

public Data getData(){

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

}

}
4

1 に答える 1

3

を維持し、ThreadLocalそこServletに現在の を保存してから、静的メソッドでRequest公開することができます。Request

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();
    }
 }
于 2013-04-16T14:41:58.337 に答える