2014-06-10 27 views
0

我有一个JSP应用程序什么使用我的GAE应用程序。这个JSP应用程序是我的移动界面。Memcache /会话与GAE和JSP

我想在memcache(会话)中存储一些值。我的意思是,当我打开一个JSP文件时,我打电话给我的GAE应用程序,并存储这个值。

我不知道如何存档它。

我已经创建了这个方法(在我的GAE应用程序中)从我的JSP文件中调用了什么,但是我在this.getThreadLocalRequest()上得到了一个空值。

public void setTimezoneSession(String timezone){ 
    HttpServletRequest request = this.getThreadLocalRequest(); 

    HttpSession session = request.getSession(true); 
    // Here is where I try to set timezone in memcache (session) 
    session.setAttribute("timezone", timezone); 
} 

在我的JSP文件,我已经叫AJAX:

$.ajax({ 
    type: "post", 
    url: "TimeZone.jsp", 
    data: "tz_cliente=" + "Europe/Madrid", 
    cache: false, 
    success: function (msg) {} 
}); 

TimeZone.jsp是这样的文件:

<% 
// Here I get "Europe/Madrid" from AJAX. 
String tz = (String)request.getParameter("timezone_from_ajax"); 
userService.setTimezoneSession(tz); 
%> 

有什么不对?

谢谢, 迭戈。

回答

0

您需要为App Engine应用启用会话 - 默认情况下它们处于禁用状态。在您的appengine.xml文件中加入:

<sessions-enabled>true</sessions-enabled> 
    <async-session-persistence enabled="true" /> 

此外,您还可以在会话直接在你的JSP添加此对象,而AJAX调用(如果你有在渲染页面已经提供此数据):

<%@ page session="true" %> 
.... 
<% 
    HttpSession currentSession = request.getSession(true); 
    currentSession.setAttribute("timezone", timezone); 
%> 
+0

我会试试你的解决方案。如果我想使用它,如何在我的服务器中获得这些数据(时区)? –

+0

这取决于你从哪里得到这些数据。如果您将其作为用户首选项存储在数据存储区中,则可以直接在jsp页面中从数据存储区读取它。如果你问一个用户,你需要在用户做出选择后调用一个servlet(顺便说一句,它不一定是jsp)。 –

+0

恩,谢谢。那是我会做的。我会在会话中存储时区,我可以将其用于一些操作。 –