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

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

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

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

【问题讨论】:

    标签: java gwt rpc httpsession


    【解决方案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 扩展,允许 同步请求。

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-12-01
            • 2011-02-24
            • 2011-06-14
            • 2017-04-01
            相关资源
            最近更新 更多