【问题标题】:Memcache/Session with GAE and JSP使用 GAE 和 JSP 的 Memcache/Session
【发布时间】:2026-02-10 11:00:01
【问题描述】:

我有一个使用我的 GAE 应用程序的 JSP 应用程序。这个 JSP 应用程序是我的移动界面。

我想在内存缓存(会话)中存储一些值。我的意思是,当我打开一个 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);
%>

怎么了?

谢谢你, 迭戈。

【问题讨论】:

    标签: java jsp google-app-engine session


    【解决方案1】:

    您需要为您的 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);
     %>
    

    【讨论】:

    • 我会试试你的解决方案。如果我想使用它,如何在我的服务器中获取这些数据(时区)?
    • 这取决于您从哪里获取这些数据。如果您将其作为用户首选项存储在数据存储中,则可以直接在您的 jsp 页面中从数据存储中读取它。如果您询问用户,则需要在用户做出选择后调用 servlet(顺便说一下,它不一定是 jsp)。
    • 好的,谢谢。这就是我要做的。我将在会话中存储时区,我可以让它做一些操作。