2012-05-20 26 views
5

Deseo obtener un Atributo de sesión en la aplicación GWT. me sale sesión como estaHttpServletRequest request = this.getThreadLocalRequest() return null?

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

pero siempre es this.getThreadLocalRequest()null.

CÓDIGO:

Cliente:

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

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

Servidor:

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

Cuando el método llamado getSessionAttribute() veo que this.getThreadLocalRequest() siempre devuelve null. ¿Entonces por qué? ¿Y como arreglarlo?

+0

¿Ha resuelto este? – kozla13

Respuesta

0

El método getThreadLocalRequest() se implementa en la clase AbstractRemoteServiceServlet, que se hereda por RemoteServiceServlet. La implementación establece el campo perThreadRequest (que es utilizado por getThreadLocalRequest()) solo para el método doPost(). Eso significa que getThreadLocalRequest() solo devolverá la solicitud si se llama desde una solicitud POST, y solo si no sobrescribió doPost() sin llamar al método super.

Así que para asegurarse de que no vuelve getThreadLocalRequest()null

  • asegurarse de que está llamando itfrom dentro de una petición POST (y no un GET o algún otro tipo de petición HTTP).
  • asegurarse de que no sobrescribe doPost() sin llamar super.doPost()
Cuestiones relacionadas