GWT 开发者手册
格式规范:这种字体表示代码或术语
文档目的:对新进员工进行 GWT 技术培训,使他们可以在以前没有接触过 GWT 的基础上,
通过本文档,经过短期学习,即可使用 GWT 进行日常开发工作。
GWT 版本:gwt-windows-1.3.3
面向读者:熟悉 JAVA 语言,有用 J2EE 开发三层架构软件系统的经验 WEB 应用程序开发
者。
一、基本概念
核心 GWT 概念,诸如:把 JAVA 原码编译为 JAVASCRIPT 原码,调试,跨浏览器支持,
和定义模块(module)等。
GWT 编译器
主要用于把 JAVA 应用程序转换成对应的 JAVASCRIPT 应用程序
GWT 的核心是一个编译器,它可以把 JAVA 代码转换成 JAVASCRIPT 代码,把用于实际开
发工作的 JAVA 应用程序转变成等价的 JAVASCRIPT 应用程序,一般来说:
1. 如果你的 GWT 应用在主机模式中编译运行,
2. 并且 GWT 把你的应用程序编译成 JAVASCRIPT 应用程序,而没有报错,
3. 那么的你的应用程序将会以同样的方式在 WEB 浏览器中工作,就像在主机模式中一样。
GWT 编译器支持大多数 JAVA 语言特性。GWT 运行时库仿真了 JAVA 运行时
库的一个子集。
注意:
1. 语言支持:
GWT 可以编译 J2SE 1.4.2 或更早版本。但有一些不一致需要注意。
固有类型
byte, char, short, int, long, float, double, Object, String,和数组都
是支持的。毕竟,在 JAVASCRIPT 语言中没有 64 位整型,所以 long 类型变
量被映射到 JAVASCRIPT 的双精度浮点类型值。为了保证主机模式和 WEB 模式
中最大的一致性,我们推荐使用 int 类型变量
异常
try, catch, finally 和用户自定义的异常都可以正常支持,但是注意,在 WEB
模式中 Throwable.getStackTrace()方法不被支持。
断言
GWT 编译器解析 JAVA assert 声明,但是它们不会被生成对应的
JAVASCRIPT 代码。
多线程和同步
JAVASCRIPT 解析器是单线程的,所以 GWT 自然接受 synchronized 关键字,
但是没有实际作用。同步相关的类库方法也不可用,包括 Object.wait(),
Object.notify(), 和 Object.notifyAll()
反射
为了效率最大化,GWT 把你的 JAVA 原代码编译成单块集成脚本,并且不支持
类的并发动态装载(我也不大懂是怎么回事,总之不要在 GWT 中使用 JAVA 的
反射机制),另外,其他最佳化选项也不包括对反射的一般支持。但是可以使用
GWT.getTypeName(Object)来查询一个对象的类名。
无用对象清理
JAVASCRIPT 不支持垃圾回收阶段的对象清理,所以 GWT 不能支持 WEB 模式
下的 JAVA 对象清理。
严格浮点
JAVA 语言规范精确地定义了浮点支持,包括单精度和双精度,还有 strictfp
关键字。GWT 不支持 strictfp 关键字,并且不能保证在转换后的代码中的浮
点的详细精度,所以如果你需要保证精度的计算,则要避免在客户端代码中进行。
2. 运行时库支持
GWT 只支持 JAVA2 标准版和企业版类库的一个小的子集,由于这些库非常大,
并且有很多在 WEB 浏览器中不可用的功能。详细请参考:java.lang and java.util
的 API,那里列出了被支持的类和两个类库(GWT 和标准 JAVA 类库)行为上的
不同。
一些特定领域 GWT 与 JAVA 标准运行时不同。
正则表达式
JAVA 正则表达式的语法类似但也不同于 JAVASCRIPT 的正则表达式语
法 。 例 如 , replaceAll 和 split 方 法 。 你 可 能 只 想 使 用 和
JAVASCRIPT 同效的 JAVA 正则表达式。
序列化
JAVA 的序列化依赖于很少的机制,但这些机制在编译后的 JAVASCRIPT 中不
可用,例如动态类装载和反射。所以 GWT 不支持标准 JAVA 序列化,但是 GWT
有一个 RPC 机制,它提供了调用远程方法时与服务器交互的自动对象序列化。
注意:如果你确保在一开始你的客户端代码中只使用了可以转换的类,你将会避
免很多麻烦。为了能够尽早确定问题所在,你的代码将会在主机模式中运行时被
检查是否符合 JRE 仿真库。所以,不支持的类库将会在第一次运行应用程序时
被检测到。应该尽早运行并经常运行你的程序。
跨浏览器支持
GWT 架构可以在单一代码的基础上支持多浏览器。
GWT 使你不用过于担心跨浏览器的不相容性。如果你关注嵌入式的界面元素和
组件,你的应用程序在最近版本的 Internet Explorer, Firefox, 和 Safari 浏览器
中的表现是一致的(大多数情况下,Opera 浏览器也是这样)。DHTML 用户界
面是非常复杂的,虽然这样,也要确定在每个浏览器中彻底测试你的应用程序。
只要可能,GWT 符合浏览器的本地用户界面元素。例如:GWT 的 Button 元
素是一个真正的 HTML