[GWT] 這到底是什麼? 幹什麼的?

看板java作者 (痞子軍團團長)時間16年前 (2009/12/03 19:24), 編輯推噓1(106)
留言7則, 4人參與, 最新討論串1/1
網頁版前情提要 [誤]: http://pt2club.blogspot.com/2009/11/gwt-java.html ______________________________________________________________________ 就像看電影會先看預告片、買 A 片會先看封面 學 GWT 之前,先知道 GWT 是什麼? 能做什麼? 再來決定要不要學,這十分重要 生命中有這麼多美好的事情(例如 H-Game [誤]) 不知道為了什麼而學(無趣的)新技術 實在是浪費時間虛擲生命 所以,GWT 是什麼呢? 他是 Java 界的救星 他是 JavaScript 界的剋星 更是網頁開發界的啤兒綠茶... \囧/ (http://www.youtube.com/watch?v=j5zm22QZwFE
) 好好好,我言歸正傳就是了... [被毆飛] 〔GWT 是什麼?〕 是 Java、也是 JavaScript [扭] GWT 全名是 Google Web Toolkit 望文生義,是用在網頁上頭的工具組 以軟體開發的角度,GWT 的核心是一個 Java compiler 處理 Java 程式碼,但輸出的不是 byte code 而是在 browser 上頭執行的 JavaScript 因此,為了方便開發時的測試與除錯 GWT 有 hosted mode,包括一個 JSP container 跟 browser 在 hosted mode 下,可以在 runtime 獲得一些錯誤訊息與資訊 這些訊息是由 GWT 提供,會比較好讀、貼近程式碼 (如果你想倚賴 browser 或 FireBug 來 debug,忘了他們吧! XD) 也能點出一些 GWT 才會有的錯誤 例如在 client 端的程式用了 java.util.Hashtable 以軟體架構的角度,GWT 的程式碼 分為 client 端以及可有可無的 server 端 client 端的基礎是 JSNI(JavaScript Native Interface) Java 無法涵蓋 JavaScript 的部份 尤其是 browser 層級的操作 可以用 JSNI 的寫法包成 Java 可呼叫的 method GWT 提供基本開發需要的 class 與相關機制 例如 UI componet、event handling、Http wrapper、JSON parser... 已經把 JSNI 包的差不多了 也許你寫完一個 project 都還看不到 JSNI 的影子 server 端的部份,主要是 GWT RPC RPC 原文是 Remote Procedure Call 簡單地說,這讓你可以幾乎毫無感覺地使用遠端的 method/object 這裡的「遠端」當然是指 web server GWT RPC 把 HTTP 的傳輸過程包起來 要傳遞的資料,封裝跟 parser 的手續也包起來 不管是在寫 client 端還是 server 端 都不用煩惱這些繁文縟節(而且,都是用 Java 寫!) Java Compiler 還幫你作 type checking 真是太棒了阿... 這麼好的東西我以後用不到怎麼辦 <囧> 等等... 前頭不是說:server 端是可有可無的嗎? 是的,用 GWT RPC 有一個前提,server 必須是 JSP container 如果你是用 PHP 或是其他語言 又或著你想使用 JSON、XML 的方式來傳遞資料 那麼,GWT RPC 是可以完全不去理會的 〔GWT 能做什麼?〕 client 端? server 端? 傻傻的不用分清楚! 純粹以 JavaScript 的角度來說 JavaScript 能做到的「效果」(不是語言特性 XD) 都能以 Java code 寫出來 在某些情況,(大多是沒有 library 幫你包好 囧>) 才可能需要寫 JSNI 來做到底層控制 以網頁開發的觀點 GWT 能讓你以傳統 application 的思維來面對網頁程式 以 browser 的角度來看,GWT 用 JavaScript 操作 DOM 來產生 & 控制所有的畫面 (再囉唆一次,寫的時候還是用 Java XD) 因此當畫面改變時,頁面不用切換,變數也就不用傳遞 所以,你不用思考 JavaScript 變數要怎麼傳到下一個畫面 也就不用煩惱到底要塞 session 還是跟著 URL 帶著走 如果你用 GWT RPC,那更徹底 除了 callback 的寫法比較怪了點 其餘的部份,你很難分辨是在寫 Java application 還是在寫網頁 object 內容的維持、與 server 的同步也不再是瑣事 or 難事 對於會寫 Java Application 的人而言 要跨進 web 開發的領域 不用把思路切換成一頁一頁的方式、 不用學一堆新技術新語言、 不太需要知道哪些是 server/client 處理 甚至感覺不到 stateless 以開發的角度,這不是很美妙的一件事情嗎? 註:這裡不討論安全性的議題 (迷之聲:因為有人不會 [指]) 〔GWT 不能做什麼?〕 不能讓你寫 JavaScript... [誤] JavaScript 作不到的事情,GWT 也作不到 雖然這根本就像在說廢話 XD 但是當你在撰寫 client 端的程式時 得時時刻刻想起這句話 不然,寫到忘我的時候 很順手的就想讀個 File、連個 DB Eclipse 這類的 IDE 也不會出現 compile 錯誤 (在 GWT compile 時還是會炸出錯誤訊息) 我研究 GWT 還不是很透徹、其他 JavaScript 的技術也沒在碰 所以 GWT 這個架構不能做什麼? 我實在回答不出來 [毆飛] 這邊只能提出一個「可能性」 就是 GWT 要整合其他 JavaScript 的技術 也許很困難 or 不可能? 之前要嘗試用 jQuery 將 GWT 生出來的 TextArea 裝上彩色模擬 scroll bar 就屢戰屢敗 Orz (這跟當時懵然無知也很有關係 [炸]) 換個角度想,用 GWT 是一定可以做出同樣效果 只是目前可能還沒有人寫 or release 出來 跟 jQuery 比起來,base on GWT 的 UI component(包含 3rd party) 的確是很量少虛弱又天生難看(靠自己的化妝技術彌補) 但這只能算是暫時的缺點,不能算是「作不到的事情」 〔為甚麼要用 GWT〕 因為這是一種 Rock'n Roll 的 style! 如果你喜歡一個 project 同時有好多技術 如果你喜歡自己掌握 HTTP/HTML/JavaScript 的所有細節 或著,你討厭 Swing 那類的 UI code 又甚至,你壓根討厭 Java 的一切 那麼,千萬、千萬不要碰 GWT 反過來說,如果你跟我差不多笨(好可憐阿 [炸]) 對 Java 死心塌地,寫起來如吃飯睡覺一般自然 那麼,GWT 會是一個契機、一個救贖、一個捷徑 好了,接下來就要開始進入正題了...... -- 侃侃長論鮮窒礙 眾目睽睽無心顫 Blog:http://blog.psmonkey.org 煢居少聊常人事 殺頭容易告白難 歡迎參觀 Java 版(@ptt.cc)精華區 \囧/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.231.99.11

12/03 19:28, , 1F
所以說GWT 不行整合其他技術嗎@@?
12/03 19:28, 1F

12/03 19:29, , 2F
ㄜ... client 端的部份「可能」很困難
12/03 19:29, 2F

12/03 19:30, , 3F
server side... Java 有的隨便你用阿... \囧/
12/03 19:30, 3F

12/03 19:30, , 4F
連自行添加修改CSS javascript xml都不行喔@@
12/03 19:30, 4F

12/03 20:14, , 5F
CSS 當然可以, javascript 靠 JSNI
12/03 20:14, 5F

12/03 20:41, , 6F
請用 GWT 的角度思考,基本上不用「加」 JavaScript
12/03 20:41, 6F

12/04 17:25, , 7F
只要有可以自己寫html的區塊 , 理論上都不會很困難啊.
12/04 17:25, 7F
文章代碼(AID): #1B5v_Q7c (java)