5

GWT アプリでセッションの属性を取得したい。私はこのようなセッションを取得します

HttpServletRequest request = this.getThreadLocalRequest();
System.out.println("Check HttpServletRequest");       
HttpSession session = request.getSession();

しかし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);
}

サーバ:

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 "";
    }
}

メソッドを呼び出すと、常に が返さgetSessionAttribute()れることがわかります。なぜ?そして、それを修正する方法は?this.getThreadLocalRequest()null

4

1 に答える 1

1

メソッドは、によって継承されるgetThreadLocalRequest()クラスに実装されます。実装は、メソッドに対してのみフィールド( によって使用される) を設定します。つまり、POST リクエスト内から呼び出された場合にのみリクエストを返し、スーパー メソッドを呼び出さずに上書きしなかった場合にのみリクエストを返します。AbstractRemoteServiceServletRemoteServiceServletperThreadRequestgetThreadLocalRequest()doPost()getThreadLocalRequest()doPost()

確実にgetThreadLocalRequest()戻らないようにnull

  • POST リクエスト内から呼び出していることを確認してください (GET やその他の HTTP リクエスト タイプではありません)。
  • doPost()呼び出さずに上書きしていないことを確認してくださいsuper.doPost()
于 2015-08-20T22:16:09.457 に答える