“我需要在客户端(浏览器的会话)上使用会话,就像使用 JSP 文件一样:session.setAttribute("UserName", username);"
我想纠正你的误解。以下不是浏览器端代码,也不是浏览器端会话。它是服务器端代码,管理服务器端会话信息。
session.setAttribute("UserName", username);
您可以将此服务器端会话信息传输到 JSP 中的客户端,例如:
<script>
var username = "<%=username%>";
</script>
或者,
<script>
var username = '<%=session.getAttribute("UserName")%>';
</script>
作为一名经验丰富的 JSP 程序员,您会意识到 HTML/Javascript(由 JSP 生成)与 JSP 本身之间的解耦。您在 JSP 中所面临的限制是您转向 GWT 的原因。
JSP生成客户端和GWT生成客户端的相似之处
偶尔(也许经常)程序员将服务器端代码误认为是客户端代码,反之亦然。就像你做的那样。
两者都生成发送到客户端执行的 javascript 和 HTML 元素。
无论您用 JSP 生成的 javascript 不能做什么,同样不能由 GWT 客户端 Java 源代码完成。
无论需要由 JSP 生成的客户端代码完成,也需要由 GWT 客户端代码完成。
您可以在 HTTP 标头、POST 或 GET 参数中嵌入会话信息。
您需要客户端维护会话信息,主要是 cookie 的形式。
在某些情况下,jsessionid cookie 不是由服务器的响应设置的。
您的 servlet 或其容器可以为 JSESSIONID 生成 http set-cookie 标头。
servlet 可以控制何时创建 cookie 标头 - 由于 request.getSession()。
.
JSP生成客户端和GWT生成客户端的区别
JSP 生成的客户端根据请求/响应进行刷新。因此,您可以为每个请求/响应在客户端和服务器之间传输更改和数据。
GWT 生成的客户端对客户端是持久的,不会刷新。正是因为这个原因,您才转向 GWT。
这种刷新差异对于理解 GWT 编码与 JSP 编码的差异非常重要。
JSP 中的所有Java 代码都是服务器端代码。在 JSP 中,没有用 Java 编写的客户端代码。甚至用于生成 HTML/javascript 的 Java 代码也是服务器端代码。
所有客户端 Java 代码都被翻译/编译成 Javascript。所以 GWT Java 代码实际上是“编译器端”代码。
.
GWT中客户端-服务器之间的通信方式
不要忘记使用 Dictionary 类客户端代码将您的静态设置通过托管文件中定义的 Javascript 对象传输到 GWT 应用程序。您可以将 javascript 对象设置为 vars,并且在加载 gwt 模块后,Dictionary 类可以读取它们。
不要忘记您可以使用 JSP 来生成 GWT 托管文件 - 这样您就可以创建由不同 Dictionary 读数提供的不同行为,您可以针对应用程序的每次调用进行个性化设置。
但是,您不应将会话 ID 或身份验证信息放在托管文件中。因为即使由 JSP 动态生成,它实际上在持久 GWT 客户端上也是静态的。
您可以使用 Window.Location.reload() 不必要地刷新 GWT 客户端,以防万一您仍然喜欢 JSP 的刷新效果。
GWT-RPC
请求生成器
请求工厂
REST 和 REST-RPC
脚本包括(用于跨越 SLD-SOP 边界)
由于技术的异步性,所有客户端-服务器通信都需要 GWT 客户端提供回调。
查看http://google-web-toolkit.googlecode.com/svn/javadoc/2.4/com/google/gwt/http/client/RequestBuilder.html(或在您的 GWT javadoc 的个人副本中查看) .
...您将能够在其中定义设置和获取标题。您的服务器端必须与客户端同意使用的标头名称。
您不需要依赖传统的 JEE 会话来“维护会话”。您可以设计自己的令牌框架。或者使用现有的,例如 OAuth 或 OpenId。
在各种情况下,您不会在服务器的响应中设置会话 cookie。
在某些情况下,您可能需要在编写 GWT 应用程序时完全放弃使用传统的 JEE 会话。
您应该考虑使用 REST 或 REST-RPC,因为我试图在以下位置记录它(以蜗牛的速度):http ://h2g2java.blessedgeek.com/2011/11/gwt-with-jax-rs-aka-rpcrest-部分 0.html。
REST 不要求您维护会话 cookie。在我看来,GWT 最适用于 REST-RPC。
你可以在那里浏览以前的帖子,那里有关于使用 GWT 的其他形式的客户端-服务器通信的解释。