客户端上的 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 错误:“类在 Gin 中使用,但在 GWT 客户端代码中不可用”
对于 GWT GAE Java 应用程序,这种 GWT/RPC 安全方法的安全性如何?
RPC 的 GWT Servlet 模型是单线程模型,还是如何通过 GWT 实现高可用性?