3

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

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

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

4

6 回答 6

3

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

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

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

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

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

您对会话有错误的看法,它们不是由您的浏览器维护的。为了控制会话,您必须使用异步回调或其他技术调用服务器端。或者,如果您指的是客户端 Web 会话,您可以使用Cookie来控制它们。

于 2012-09-05T16:02:09.517 回答
1

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

于 2012-09-05T11:38:12.767 回答
0
HttpSession session = RemoteServiceUtil.getThreadLocalRequest().getSession();
于 2012-09-05T10:48:28.713 回答
0

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

public boolean authentication() {
   // Do authentication stuff
   getResponse().addCookie(new Cookie("SOMESESSIONID", session.getId()));
}

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

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

于 2012-09-05T12:48:31.170 回答
0

会话仅在服务器端可用,GWT 在 Js 中编译 java,因此我们不能在客户端使用会话。

于 2013-07-17T13:19:01.037 回答
-1

阅读谷歌群组帖子 - 同步呼叫

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

同步请求的问题在于它们往往会阻止浏览器等待响应,从而使您的应用程序看起来像是被锁定了。这是特别糟糕的应用程序设计。您无法控制客户端机器或它与服务器之间的网络,因此甚至无法决定您的应用程序将被锁定多长时间。

因此,最好的办法是简单地使用异步方法并通过提供的回调继续执行。您最终将获得更好的用户体验和更专业的应用程序。

于 2012-09-05T09:54:03.163 回答