gpt4 book ai didi

spring - GWT - RemoteService 接口(interface)和 Spring - 如何获取 HttpSession?

转载 作者:行者123 更新时间:2023-12-04 05:02:03 26 4
gpt4 key购买 nike

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

}

我的接口(interface) - 实现 RemoteService 的 DataService
public class DataServiceImpl implements DataService {

public Data getData(){

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

}

}

最佳答案

您可以维护一个 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();
}
}

关于spring - GWT - RemoteService 接口(interface)和 Spring - 如何获取 HttpSession?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16039310/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com