作者PsMonkey (痞子军团团长)
看板java
标题[GWT]
时间Thu Dec 3 19:24:04 2009
网页版前情提要 [误]:
http://pt2club.blogspot.com/2009/11/gwt-java.html
______________________________________________________________________
就像看电影会先看预告片、买 A 片会先看封面
学 GWT 之前,先知道 GWT 是什麽? 能做什麽?
再来决定要不要学,这十分重要
生命中有这麽多美好的事情
(例如 H-Game [误])
不知道为了什麽而学(无趣的)新技术
实在是浪费时间虚掷生命
所以,GWT 是什麽呢?
他是 Java 界的救星
他是 JavaScript 界的克星
更是网页开发界的啤儿绿茶... \囧/
(
https://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
1F:推 InitialShuk:所以说GWT 不行整合其他技术吗@@? 12/03 19:28
2F:→ PsMonkey:ㄜ... client 端的部份「可能」很困难 12/03 19:29
3F:→ PsMonkey:server side... Java 有的随便你用阿... \囧/ 12/03 19:30
4F:→ InitialShuk:连自行添加修改CSS javascript xml都不行喔@@ 12/03 19:30
5F:→ tkcn:CSS 当然可以, javascript 靠 JSNI 12/03 20:14
6F:→ PsMonkey:请用 GWT 的角度思考,基本上不用「加」 JavaScript 12/03 20:41
7F:→ TonyQ:只要有可以自己写html的区块 , 理论上都不会很困难啊. 12/04 17:25