客户端上的 GWT HTTP 会话可用性

Posted

技术标签:

【中文标题】客户端上的 GWT HTTP 会话可用性【英文标题】:GWT HTTP Session avaliabilty on client 【发布时间】:2012-09-05 09:32:16 【问题描述】:

这是在 GWT 中进行 RPC 调用以获取 HTTP 会话属性的唯一方法吗?

有什么方法可以直接在客户端代码中获取它们而不进行 rpc 调用?

如果浏览器正在维护会话,为什么我们需要再次访问服务器获取会话变量?

【问题讨论】:

【参考方案1】:

这是在 GWT 中进行 RPC 调用以获取 HTTP 的唯一方法吗? 会话属性?

为了获取会话属性,您可以使用不同的方法(例如使用 JSON)。 GWT-RPC 只是其中之一 通过标准 HTTP 将 Java 对象传入和传出服务器的机制。阅读这篇文章:Communicating with the server。

有什么方法可以直接在客户端代码中获取它们而不 进行 rpc 调用?

简而言之,不,除非您从服务器检索它们,否则您无法访问它们。因为所有 GWT 应用程序在最终用户的 Web 浏览器中作为 javascript 代码运行,但会话存在于服务器端。所以你必须从你的服务器询问他们。

如果浏览器正在维护会话,为什么我们需要访问服务器 再次为会话变量?

您对会话有错误的看法,它们不是由您的浏览器维护的。为了控制会话,您必须使用异步回调或其他技术调用服务器端。或者如果你的意思是Client side web sessions,你可以用Cookies控制它们。

【讨论】:

【参考方案2】:

浏览器没有会话变量!它只有会话标识符(通常保存在 cookie 中)。

【讨论】:

【参考方案3】:
HttpSession session = RemoteServiceUtil.getThreadLocalRequest().getSession();

【讨论】:

我认为没有 RemoteServiceUtil 是 GWT。你说的是第三方库gwtrpc-spring【参考方案4】:

我认为您可能只想设置 cookie 值以匹配您的某些会话值。您可以在身份验证时执行此操作并使用

设置 cookie 值
public boolean authentication() 
   // Do authentication stuff
   getResponse().addCookie(new Cookie("SOMESESSIONID", session.getId()));


public HttpServletResponse getResponse() 
    return RemoteServiceUtil.getThreadLocalResponse();

然后在客户端,您可以简单地使用 Cookie 类来获取这些值。

【讨论】:

我的原始代码是 RequestFactory 所以它看起来像这样。 RequestFactoryServlet.getThreadLocalRequest(); 我正在做的是我在 servlet 和 GWT onmodule 加载中设置用户 bean,我需要该 bean 以供进一步使用......现在我正在使用 RPC 和 RPC 它花费太多时间.所以我想删除一个 rpc 调用【参考方案5】:

Session 只在服务器端可用,GWT 在 Js 中编译 java,所以我们不能在客户端有可用的会话。

【讨论】:

【参考方案6】:

阅读google group post - Synchronous Call

GWT 不会做任何努力让您轻松做到这一点。你会有 编写自己的 RequestBuilder 扩展,允许 同步请求。

同步请求的问题在于它们往往会阻塞 浏览器等待响应,为您的应用程序提供外观 被关起来的。这是特别糟糕的应用程序设计。你 无法控制客户端机器或它之间的网络 您的服务器,因此甚至无法决定您的应用程序需要多长时间 将显示为已锁定。

所以,最好的办法是简单地使用异步方法和 通过提供的回调继续执行。你最终会得到一个 更好的用户体验,更专业的外观 应用。

【讨论】:

以上是关于客户端上的 GWT HTTP 会话可用性的主要内容,如果未能解决你的问题,请参考以下文章

gwt中会话超时时触发方法调用

GWT 错误:“类在 Gin 中使用,但在 GWT 客户端代码中不可用”

对于 GWT GAE Java 应用程序,这种 GWT/RPC 安全方法的安全性如何?

RPC 的 GWT Servlet 模型是单线程模型,还是如何通过 GWT 实现高可用性?

gwt、rpc 服务、StatusCodeException 和无可用日志

GWT HTTP 请求响应代码 0 与 CORS 工作