HttpServletRequest request = this.getThreadLocalRequest()返回null?

use*_*078 5 gwt

我想在GWT app中获得会话属性.我得到这样的Session

HttpServletRequest request = this.getThreadLocalRequest();
System.out.println("Check HttpServletRequest");       
HttpSession session = request.getSession();
Run Code Online (Sandbox Code Playgroud)

this.getThreadLocalRequest()总是如此null.

代码:

客户:

@RemoteServiceRelativePath("service.s3gwt")
public interface getAttributeSession extends RemoteService 
{
    String getSessionAttribute(String name);
}

public interface getAttributeSessionAsync 
{
    void getSessionAttribute(String name, AsyncCallback<String> callback);
}
Run Code Online (Sandbox Code Playgroud)

服务器:

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import daTotNghiep.client.service.getAttributeSession;

public class getAttributeSessionImpl extends RemoteServiceServlet implements getAttributeSession 
{
    private static final long serialVersionUID = 1L;

    public String getSessionAttribute(String name) 
    {
    // TODO Auto-generated method stub

    HttpServletRequest request = this.getThreadLocalRequest();
    System.out.println("Check HttpServletRequest");
    if(request == null) System.out.println("SO BAD");

   //   HttpSession session = request.getSession();
   // System.out.println("ID session "+session.getId());

     return "";
    }
}
Run Code Online (Sandbox Code Playgroud)

当调用方法getSessionAttribute()我看到this.getThreadLocalRequest()总是返回null.所以为什么?以及如何解决它?

Bob*_*Bob 1

该方法getThreadLocalRequest()在类中实现AbstractRemoteServiceServlet,该类由 继承RemoteServiceServlet。该实现仅为方法设置字段perThreadRequest(由 所使用) 。这意味着,仅当从 POST 请求中调用该请求时才会返回该请求,并且仅当您在未调用 super 方法的情况下未进行覆盖时才返回该请求。getThreadLocalRequest()doPost()getThreadLocalRequest()doPost()

所以为了确保getThreadLocalRequest()不会返回null

  • 确保您是从 POST 请求(而不是 GET 或其他 HTTP 请求类型)中调用它。
  • 确保您没有doPost()在未调用的情况下覆盖super.doPost()