这是在 GWT 中进行 RPC 调用以获取 HTTP 会话属性的唯一方法吗?
有什么方法可以直接在客户端代码中获取它们而不进行 rpc 调用?
如果浏览器正在维护会话,为什么我们需要再次访问服务器获取会话变量?
这是在 GWT 中进行 RPC 调用以获取 HTTP 会话属性的唯一方法吗?
有什么方法可以直接在客户端代码中获取它们而不进行 rpc 调用?
如果浏览器正在维护会话,为什么我们需要再次访问服务器获取会话变量?
这是在 GWT 中进行 RPC 调用以获取 HTTP 会话属性的唯一方法吗?
要获取会话属性,您可以使用不同的方法(例如使用 JSON)。GWT-RPC 只是通过标准 HTTP 将 Java 对象传入和传出服务器的一种机制。阅读这篇文章:与服务器通信。
有什么方法可以直接在客户端代码中获取它们而不进行 rpc 调用?
很快,除非您从服务器检索它们,否则您将无法访问它们。因为所有 GWT 应用程序在最终用户的 Web 浏览器中作为 JavaScript 代码运行,但会话存在于服务器端。所以你必须从你的服务器上问他们。
如果浏览器正在维护会话,为什么我们需要再次访问服务器获取会话变量?
您对会话有错误的看法,它们不是由您的浏览器维护的。为了控制会话,您必须使用异步回调或其他技术调用服务器端。或者,如果您指的是客户端 Web 会话,您可以使用Cookie来控制它们。
浏览器没有会话变量!它只有会话标识符(通常保存在 cookie 中)。
HttpSession session = RemoteServiceUtil.getThreadLocalRequest().getSession();
我认为您可能只想设置 cookie 值以匹配您的某些会话值。您可以在身份验证时执行此操作并使用
public boolean authentication() {
// Do authentication stuff
getResponse().addCookie(new Cookie("SOMESESSIONID", session.getId()));
}
public HttpServletResponse getResponse() {
return RemoteServiceUtil.getThreadLocalResponse();
}
然后在客户端,您可以简单地使用 Cookie 类来获取这些值。
会话仅在服务器端可用,GWT 在 Js 中编译 java,因此我们不能在客户端使用会话。
GWT 不会做任何努力让您轻松地做到这一点。您必须编写自己的 RequestBuilder 扩展来允许同步请求。
同步请求的问题在于它们往往会阻止浏览器等待响应,从而使您的应用程序看起来像是被锁定了。这是特别糟糕的应用程序设计。您无法控制客户端机器或它与服务器之间的网络,因此甚至无法决定您的应用程序将被锁定多长时间。
因此,最好的办法是简单地使用异步方法并通过提供的回调继续执行。您最终将获得更好的用户体验和更专业的应用程序。