2015-02-24 46 views
4

我正在servlet中成功創建會話,並且我可以將會話/會話屬性設置爲jsp,但不能設置爲端點類。我想獲得端點類中的會話信息。請幫我解決一下這個。如何處理Google App Engine中的會話?

我正在使用Eclipse的Maven和我啓用了AppEngine上-web.xml中

會話我讀了article這個也只是如何使會話我din't不懂。

這個servlet是檢查是否存在已經是一個會話

public class FirstServlet extends HttpServlet { 
private static final long serialVersionUID = 1L; 
public FirstServlet() { 
    super(); 
} 
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    service(request, response); 
} 
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    service(request, response); 
} 
@Override 
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    response.setContentType("text/html"); 
    HttpSession session=request.getSession(false); 
    if (session != null) { 
     String name = session.getAttribute("name"); 
     // do something 
    } else { 
     // do something 
    } 

} 
} 

如果會話沒有使用這個servlet

public class SeccondServlet extends HttpServlet { 
private static final long serialVersionUID = 1L; 
public SeccondServlet() { 
    super(); 
} 
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    service(request, response); 
} 
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    service(request, response); 
} 

@Override 

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

    response.setContentType("text/html"); 
    request.getRequestDispatcher("login.html").include(request, response); 
    String name = request.getParameter("name"); 
    HttpSession session=request.getSession(); 
    session.setAttribute("name", name); 
    // do something 
} 
} 

這是我的終點API類(谷歌雲端點有創建會話)

@Api(
    name = "myapi", 
    version = "v1", 
    clientIds = "given client ids") 
public class MyApi{ 
    @ApiMethod(name = "name", path = "name", httpMethod = "post") 
    public List<String> getUser(HttpServletRequest servletReq) { 
     HttpSession session = servletReq.getSession(false); 
     List<String> name= new ArrayList<String>(); 
     if(session == null) { 
      userName.add("no Name"); 
     } else { 
      name.add((String)session.getAttribute("name")); 
     } 

     return name; 
    } 

即使創建了我,我仍然得到「no Name」的結果會話,我可以得到的會話屬性,這裏的「名」

+0

u能成爲更加清楚一點什麼ü意思終點?使用谷歌雲端點或普通的舊servlet或任何Mvc框架如春天等 – 2015-02-24 07:18:43

+0

是的,我使用谷歌雲端點。並且我想要在Google雲端點類中獲得會話屬性。 – user4430114 2015-02-24 07:21:53

回答

9

假設你知道的HttpSession

因此,所有用戶(如果不是它只是餅乾服務器和客戶端之間,以應對用戶登錄交換)相關或任何其他與會話相關的信息都存儲在服務器端,表示這些信息的會話Id將作爲cookie發送給客戶端,並且客戶端將在每個http請求中發回該信息。

AppEngine上使用數據存儲來存儲會話信息和內存緩存以提高訪問速度

,你可以使用在每一個HTTP請求

代碼注入標準HttpSession對象訪問此HttpSession中的框架變化訪問會話數據你使用,如果你想我可以將特定的代碼片段,以幫助更好地理解它

UPDATE:

,如果您使用servlet,然後訪問會話將LO OKS像下面

public class LoginServlet extends HttpServlet { 
private static final long serialVersionUID = 1L; 
private final String userID = "Pankaj"; 
private final String password = "journaldev"; 

protected void doPost(HttpServletRequest request, 
     HttpServletResponse response) { 
    HttpSession session=request.getSession(); 
    // access any value 
    User user = (User)session.getAttribute("loggedInUser"); 
} 

的谷歌雲終端使用它像下面

@ApiMethod 
public Response getUser(HttpServletRequest servletReq) { 
    HttpSession session = servletReq.getSession(); 
    session.getAttribute("loggedInUser"); 
} 
+0

好的請給我一個例子/代碼片段謝謝@Ramesh – user4430114 2015-02-24 09:19:12

+0

謝謝@Ramesh它是非常有用的,但我得到的錯誤響應要求我導入,我需要導入這些org.jsoup.helper.HttpConnection.Response或com.google.appengine.repackaged.com.google.protos.gdata.proto2api.Core。響應; – user4430114 2015-02-24 13:53:32

+0

響應是我的自定義類爲返回http請求,您可以使用任何對象像Map ,因爲我們需要返回json作爲響應 – 2015-02-24 13:55:22

相關問題