2012-05-20 12 views
5

मैं जीडब्ल्यूटी ऐप में सत्र की विशेषता प्राप्त करना चाहता हूं। मैं इसHttpServletRequest अनुरोध = this.getThreadLocalRequest() वापस शून्य?

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 देता है। तो क्यों? और इसे कैसे ठीक करें?

+0

बुला आप इस समाधान कर लिया है बिना सुनिश्चित करें कि आप doPost() अधिलेखित नहीं किया है? – kozla13

उत्तर

0

विधि getThreadLocalRequest() कक्षा AbstractRemoteServiceServlet में लागू किया गया है, जिसे RemoteServiceServlet द्वारा विरासत में मिला है। कार्यान्वयन perThreadRequest फ़ील्ड सेट करता है (जिसे getThreadLocalRequest() द्वारा उपयोग किया जाता है) केवल doPost() विधि के लिए। इसका मतलब है, getThreadLocalRequest() केवल अनुरोध को वापस कर देगा यदि इसे POST अनुरोध के भीतर से बुलाया जाता है, और तब केवल अगर आपने सुपर विधि को कॉल किए बिना doPost() को ओवरराइट नहीं किया है।

तो यकीन है कि getThreadLocalRequest() वापस नहीं करता है null

  • सुनिश्चित करें कि आप एक पोस्ट अनुरोध भीतर itfrom कॉल कर रहे हैं बनाने बनाने के लिए (एक GET या कुछ अन्य HTTP अनुरोध प्रकार)।
  • super.doPost()
संबंधित मुद्दे