2012-05-20 12 views
5

Voglio ottenere un attributo di sessione nell'app GWT. ottengo sessione come questoHttpServletRequest request = this.getThreadLocalRequest() restituisce null?

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

ma this.getThreadLocalRequest() è sempre null.

CODICE:

Cliente:

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

public interface getAttributeSessionAsync 
{ 
    void getSessionAttribute(String name, AsyncCallback<String> callback); 
} 

Server:

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

Quando chiamata di metodo getSessionAttribute() vedo che this.getThreadLocalRequest() restituisce sempre null. Allora perché? E come ripararlo?

+0

Avete risolto questo? – kozla13

risposta

0

Il metodo getThreadLocalRequest() è implementato nella classe AbstractRemoteServiceServlet, che viene ereditata da RemoteServiceServlet. L'implementazione imposta il campo perThreadRequest (utilizzato da getThreadLocalRequest()) solo per il metodo doPost(). Ciò significa che, getThreadLocalRequest() restituirà la richiesta solo se è stata richiamata da una richiesta POST e solo se non è stata sovrascritta doPost() senza chiamare il metodo super.

Quindi, per assicurarsi getThreadLocalRequest() non restituisce null

  • assicurarsi che si sta chiamando itfrom all'interno di una richiesta POST (e non un GET o qualche altro tipo di richiesta HTTP).
  • assicurarsi non hai sovrascrivere doPost() senza chiamare super.doPost()
Problemi correlati