Gwt HttpServletRequest=this.getThreadLocalRequest()返回null?
我想在GWT应用程序中获取会话的属性。我得到这样的治疗Gwt HttpServletRequest=this.getThreadLocalRequest()返回null?,gwt,Gwt,我想在GWT应用程序中获取会话的属性。我得到这样的治疗 HttpServletRequest=this.getThreadLocalRequest(); System.out.println(“检查HttpServletRequest”); HttpSession session=request.getSession(); 但是this.getThreadLocalRequest()总是null 代码: 客户: @RemoteServiceRelativePath(“service.s3gwt
HttpServletRequest=this.getThreadLocalRequest();
System.out.println(“检查HttpServletRequest”);
HttpSession session=request.getSession();
但是this.getThreadLocalRequest()
总是null
代码:
客户:
@RemoteServiceRelativePath(“service.s3gwt”)
公共接口getAttributeSession扩展了RemoteService
{
字符串getSessionAttribute(字符串名称);
}
公共接口getAttributeSessionAsync
{
void getSessionAttribute(字符串名称,异步回调);
}
服务器:
import javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpSession;
导入com.google.gwt.user.server.rpc.RemoteServiceServlet;
导入daTotNghiep.client.service.getAttributeSession;
公共类getAttributeSessionImpl扩展RemoteServiceServlet实现getAttributeSession
{
私有静态最终长serialVersionUID=1L;
公共字符串getSessionAttribute(字符串名称)
{
//TODO自动生成的方法存根
HttpServletRequest=this.getThreadLocalRequest();
System.out.println(“检查HttpServletRequest”);
if(request==null)System.out.println(“非常糟糕”);
//HttpSession session=request.getSession();
//System.out.println(“ID session”+session.getId());
返回“”;
}
}
当调用方法
getSessionAttribute()
时,我看到this.getThreadLocalRequest()
总是返回null
。那为什么呢?如何修复它?方法getThreadLocalRequest()
在类AbstractRemoteServiceServlet
中实现,该类由RemoteServiceServlet
继承。实现仅为方法doPost()
设置字段perThreadRequest
(由getThreadLocalRequest()
使用)。这意味着,getThreadLocalRequest()
仅当从POST请求中调用请求时才会返回该请求,并且仅当您没有在不调用super方法的情况下覆盖doPost()
时才会返回该请求
因此,要确保getThreadLocalRequest()
不会返回null
- 确保您是从POST请求(而不是GET或其他HTTP请求类型)中调用它
- 确保未调用
而未覆盖super.doPost()
doPost()
doPost()
是AbstractRemoteServiceServlet
中的最终版本。所以它不能被覆盖。