【问题标题】:GWT - RemoteService interface and Spring - how to get HttpSession?GWT - RemoteService 接口和 Spring - 如何获取 HttpSession?
【发布时间】:2013-04-16 14:07:32
【问题描述】:

我将 GWT (2.5) 与 RPC、Spring 和 Postgresql 一起用于我的项目。我的问题是关于 HttpSession 处理。 所有对服务器的查询都由 Spring (DispatchServlet) 分派到我的 GwtController (extends 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) {
    …………….
}

}

我的接口 - 实现 RemoteService 的 DataService

public class DataServiceImpl implements DataService {

public Data getData(){

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

}

}

【问题讨论】:

    标签: spring gwt httpsession


    【解决方案1】:

    您可以在您的Servlet 中维护一个ThreadLocal 并在其中存储您当前的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();
        }
     }
    

    【讨论】:

      猜你喜欢
      • 2011-11-30
      • 1970-01-01
      • 2011-06-09
      • 1970-01-01
      • 2018-03-08
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      • 2015-02-19
      相关资源
      最近更新 更多