我正在使用GWT進行網絡應用程序,並且需要訪問mySql數據庫。將只有一個客戶端(該應用程序在本地的iPad上使用)。有沒有辦法訪問數據庫沒有 RPC?我正在尋找一種可能性來直接查詢數據庫。無需RPC的GWT數據庫訪問
謝謝!
我正在使用GWT進行網絡應用程序,並且需要訪問mySql數據庫。將只有一個客戶端(該應用程序在本地的iPad上使用)。有沒有辦法訪問數據庫沒有 RPC?我正在尋找一種可能性來直接查詢數據庫。無需RPC的GWT數據庫訪問
謝謝!
有2.5個理由不能使用gwt直接訪問MySQL。
原因#1。 GWT被編譯成Javascript。您需要打開數據庫服務器的套接字。 GWT不允許你打開一個套接字。事實上,沒有unaugmented瀏覽器(在html5出現之前)能夠打開套接字。但是您可以使用Flash動作或HTML 5 JavaScript來打開套接字。
原因#2。好的,假設您使用了HTML5套接字。並且您花了6個月的時間用Javascript編寫JDBC連接。但是,你的websocket仍然需要在服務器上尋找一個servlet來幫助你的websocket建立一個持久連接 - 而mysql不能執行這樣的建立。
原因#3。 SLD - SOP限制: (第二級域同源策略) 標準瀏覽器將其頁面限制爲僅能夠請求和包含來自與提供的服務器相同的二級域(SLD)內的內容該頁面到瀏覽器。頂級域名(和頂級域名)可以是.com,.org,.net,.me.us或.co.uk。所以,域名如google.com,fbi.gov,mit.edu是二級域名。而mail.google.com將成爲第三級域名。因此,GWT只能在SLD的範圍內工作。您的Web服務器也必須在與您的MySQL服務器相同的SLD中可訪問。
SLD-SOP和隧道要求是關閉一個安全漏洞,它可以允許任何tom-rick-or-mary在您的瀏覽器中登錄到您的系統。瀏覽器通常需要隧道才能連接到除http服務器以外的服務器。隧道是當瀏覽器利用Web服務器作爲Yenta(忙於身體/穿插/匹配製造商)而到達另一個服務器時。你不得不使用GWT-RPC。也許你不想使用RPC,那麼你可以使用RequestBuilder,或Script-Include或RequestFactory。但他們仍然是多種隧道手段。 http://h2g2java.blessedgeek.com/2011/06/gwt-requestbuilder-vs-rpc-vs-script.html。
有一個原因,您可以從gwt客戶端連接到數據庫服務器: 您的數據庫服務器必須運行httpd連接引擎。也就是說,你的gwt應用程序將訪問數據庫服務器thro http。我不熟悉哪個關係數據庫具有可用的http訪問。最有可能的是,你將不得不查詢thro xml或json。
不過,我已經爲我們創造了自己的HTTP服務合作公司,使「直接」客戶端訪問。 「直接」是一個誤稱,因爲我們使用了tomcat。這只是一種隧道效應。任何提供「直接」http訪問的數據庫公司仍然是隧道技術。隧道 - 沒有逃脫。
你可以增加與Flash瀏覽器和寫一個Flash應用程序,而不是使用GWT。如果直接訪問對您來說非常重要,那麼您將不得不放棄GWT並在Flash中開發,併爲您的數據庫服務器運行httpd引擎。
謝謝你的信息。 Flash無法選擇( - > iPad)。 – Simson
AFAIK這是不可能的,即使它是,它將是一個非常糟糕的主意。你確定你確實需要一個數據庫嗎?也許類似gwt-client-storage會更合適。
編輯
你的數據庫將我們公開訪問,並開放供任何形式的攻擊。
EDIT 2
這甚至可能是一個更好的解決方案,因爲它提供了支持訪問HTML5數據庫API,並針對iPhone/iPad的。
你能告訴我爲什麼它會是一個壞主意。將只有一個連接到數據庫的客戶端。 gwt-client-storage可能是個好主意。也許用cronjob將數據更新到數據庫中... – Simson
GWT最終是Javascript。如Are there JavaScript bindings for MySQL? 所述,目前還沒有從Javascript訪問MySQL的方法。
因此,您無法從客戶端GWT代碼訪問它。
我知道GWT代碼被編譯爲javascript,因此不可能直接訪問數據庫。我寧願尋找一種有用的解決方法,或者在不設置Java或WebServer的情況下工作。 – Simson
我沒有看到任何其他選項。它可能是客戶端,這是不可能的,或者是服務器端,你沒有。 –
如果你是成功的,即使這樣做,總之,在瀏覽器上做了CTRL + U將讓你的數據庫名稱,用戶名,密碼,表名等可見......而完成的,任何開發人員都好奇,想知道你的代碼有辦法破解你的服務器中的任何東西和所有東西。
我認爲這是不可能的,我的意思是,如果你想存儲在DB的所有數據。我的意思是,GWT編譯爲JavaScript和JavaScript在客戶端(通常是Web瀏覽器)上執行。
如果你想在一臺服務器來訪問存儲的地方(某些平均值)的數據,那麼你別無選擇,只能RPC。如果我是你,我會停止思考客戶端 - 服務器模式(GWT是在開發時考慮到的)。也許像H2這樣的嵌入式數據庫,然後通過JDBC保持連接。
數據庫在哪裏?如果是在客戶端上可以做到這一點,但如果沒有,你必須說話以某種方式運行數據庫的機器... –
數據庫是本地網絡中的另一臺機器上。我希望看到一種連接數據庫的方式,就像使用JDBC的Java應用程序一樣。 – Simson
如果您正在使用Java代碼,那麼我懷疑您只能使用JDBC。我不熟悉iProduct開發,除了它不是Java,但我想象一些必須存在的東西... –