「我需要在客戶端(瀏覽器會話)使用與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標頭。
由於request.getSession(),servlet可以控制何時創建cookie頭。
。
JSP之間的差別生成的客戶端和GWT生成的客戶端
JSP生成的客戶端對每個請求/響應刷新。因此,您可以在客戶端和服務器之間爲每個請求/響應傳輸更改和數據。
GWT生成的客戶端對客戶端來說是持久的,而不是刷新的。正因爲如此,你正在轉向GWT。
這種刷新差異對理解GWT編碼差異比JSP更加重要。
JSP中的所有Java代碼都是服務器端代碼。在JSP中,沒有用Java編寫的客戶端代碼。甚至用於生成HTML/javascript的Java代碼都是服務器端代碼。
所有客戶端Java代碼被翻譯/編譯成Javascript。所以GWT Java代碼實際上是「編譯器端」代碼。
。在GWT客戶機 - 服務器之間的通信
手段
不要忘了使用Dictionary類客戶端代碼來發送你的靜態設置GWT應用在救援人員到場託管文件中定義JavaScript對象。您可以將JavaScript對象設置爲變量,並且在加載gwt模塊後,它們將可以由Dictionary類讀取。
不要忘了,您可以使用JSP來生成GWT託管文件 - 以便您可以創建不同的字典讀物提供的不同行爲,您可以針對每次調用您的應用程序進行個性化處理。
但是,你不應該放置在主機文件中的會話ID或認證信息。因爲即使由JSP動態生成,它在持久GWT客戶端上實際上也是靜態的。
您可以使用Window.Location.reload()無謂地刷新你的GWT客戶,以防萬一你還愛JSP的刷新效果。
GWT-RPC
RequestBuilder
RequestFactory
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-part-0.html。
REST不需要您維護會話cookie。在我看來,GWT最適合於REST-RPC。
你可以瀏覽過以前的帖子在那裏,那裏還有其他形式與GWT客戶端 - 服務器COMM的解釋。