前言 1
第一部分 理解Google Web Toolkit 1
第1章 Google Web Toolkit简介 1
1.1 Ajax崭露头角 1
1.2 重新定义Web应用程序 2
1.2.1 Adobe的Flash与Flex 3
1.2.2 微软的Silverlight 4
1.2.3 Java FX 4
1.3 基于Ajax的软件工程 4
1.3.1 通过部件和面板构建丰富的用户界面 5
1.3.2 利用异步通信获得更好的性能 6
1.3.3 通过Web标准和Web服务提供互操作性 6
1.3.4 使用Java工具提高开发效率 6
1.4 职业背景评估 7
1.4.1 Web设计者 7
1.4.2 网站开发者 7
1.4.3 Ajax开发者 8
1.4.4 Web应用程序开发者 8
1.4.5 桌面应用程序开发者 8
1.5 应用程序开发技能的重要性 8
1.6 简单的教程 10
1.6.1 创建GWT项目 10
1.6.2 自定义生成的应用程序 13
1.6.3 创建动态的界面 15
1.6.4 使用异步HTTP 20
1.7 GWT中的包 22
1.8 GWT应用程序概述 25
1.8.1 常见的应用程序模式 25
1.8.2 示例应用程序简介 25
1.9 小结 26
第2章 用户界面库 27
2.1 静态部件 28
2.1.1 Label 28
2.1.2 HTML 30
2.1.3 Image 31
2.1.4 Hyperlink 32
2.2 表单部件 34
2.2.1 Button 35
2.2.2 ToggleButton和PushButton 36
2.2.3 Checkbox 39
2.2.4 RadioButton 39
2.2.5 ListBox 40
2.2.6 SuggestBox 41
2.2.7 TextBox 43
2.2.8 PasswordTextBox 44
2.2.9 TextArea 44
2.2.10 RichTextArea 45
2.2.11 FileUpload 46
2.2.12 Hidden 46
2.3 复杂部件 46
2.3.1 Tree 47
2.3.2 MenuBar 50
2.4 简单布局面板 52
2.4.1 FlowPanel 52
2.4.2 HorizontalPanel和VerticalPanel 53
2.4.3 HorizontalSplitPanel和VerticalSplitPanel 54
2.4.4 FlexTable和Grid 55
2.4.5 DeckPanel 58
2.4.6 DockPanel 59
2.4.7 HTMLPanel 60
2.5 复杂布局面板 61
2.5.1 StackPanel 61
2.5.2 TabPanel 62
2.6 简单容器面板 64
2.6.1 Composite 64
2.6.2 SimplePanel 65
2.6.3 ScrollPanel 65
2.6.4 FocusPanel 65
2.7 复杂容器面板 66
2.7.1 FormPanel 66
2.7.2 DisclosurePanel 68
2.7.3 PopupPanel 69
2.7.4 DialogBox 70
2.8 用户界面框架 73
2.8.1 事件接口 73
2.8.2 特性接口 76
2.9 小结 78
第3章 服务器整合技术 79
3.1 基本的服务器整合技术 79
3.1.1 异步HTTP请求 79
3.1.2 操作纯文本和HTML 81
3.1.3 整合传统的服务器端脚本技术 83
3.2 使用数据格式库 87
3.2.1 读写XML数据 88
3.2.2 读写JSON数据 92
3.3 第三方服务器整合 94
3.3.1 同源策略 95
3.3.2 使用JavaScriptAPI 95
3.3.3 使用JSONP 96
3.3.4 使用 HTTP代理 97
3.4 高级服务器整合技术 97
3.4.1 有状态服务器 97
3.4.2 整合无状态服务器 98
3.4.3 使用GWT-RPC 100
3.5 小结 104
第4章 Ajax应用程序开发中的软件工程 105
4.1 设置开发环境 105
4.1.1 安装JDK 105
4.1.2 安装GWT 105
4.1.3 安装Eclipse 108
4.2 向Eclipse中添加项目 109
4.3 在Eclipse中编写Java代码 112
4.3.1 在Eclipse中创建类 113
4.3.2 使用Eclipse的Java编辑器 116
4.4 在Eclipse中进行调试 119
4.5 组织应用程序的结构 124
4.6 测试应用程序 127
4.6.1 使用JUnit 129
4.6.2 基准测试 133
4.7 构建和共享模块 136
4.7.1 使用模块 136
4.7.2 创建可重用的模块 138
4.7.3 共享编译后的应用程序(Mashup) 139
4.8 部署应用程序 139
4.8.1 部署到Web服务器 139
4.8.2 向Servlet容器中部署Servlet 141
4.8.3 使用Ant自动完成部署 142
4.9 小结 145
第5章 高效使用GWT 146
5.1 深入理解异步编程 146
5.2 处理后退按钮 149
5.3 使用CSS创建美观的界面 152
5.3.1 将GWT部件与CSS关联起来 152
5.3.2 指定颜色 154
5.3.3 指定单位 155
5.3.4 字体属性 156
5.3.5 文本属性 157
5.3.6 外边距、边框和内边距属性 157
5.3.7 CSS示例 159
5.3.8 光标属性 160
5.4 扩展GWT 162
5.4.1 构建新部件 162
5.4.2 使用JSNI 164
5.4.3 提供浏览器支持 166
5.4.4 使用其他JavaScript库 169
5.5 应用程序国际化 173
5.5.1 声明常量 173
5.5.2 声明消息 174
5.5.3 本地化工具 176
5.5.4 本地化管理 178
5.5.5 使用字典 179
5.6 生成代码 179
5.6.1 使用生成的代码 179
5.6.2 编写代码生成器 181
5.6.3 generate方法分析 182
5.7 性能优化 185
5.7.1 处理耗时过程 185
5.7.2 使用ImageBundle 186
5.7.3 在Apache中设置缓存 188
5.7.4 在Servlet容器中设置缓存 189
5.7.5 在Apache中设置压缩 190
5.7.6 在Servlet容器中设置压缩 190
5.8 小结 192
第二部分 创建富Web应用程序 193
第6章 GadgetDesktop应用程序 193
6.1 使用容器应用程序模式 193
6.2 模型设计 194
6.2.1 使用抽象工厂模式 195
6.2.2 编写GadgetClass类 195
6.2.3 编写Gadget类 197
6.2.4 体现用户偏好 198
6.3 构建分栏的容器界面 200
6.3.1 定义视图 201
6.3.2 使用VerticalPanel构建主布局 202
6.3.3 使用HorizontalPanel构建菜单 202
6.3.4 使用TabPanel构建页面选择区 203
6.3.5 使用HorizontalPanel和FlowPanel构建分栏 205
6.4 将部件放入视图 208
6.4.1 HelloWorld配件 208
6.4.2 编写配件容器 209
6.4.3 使用ImageBundle、ToggleButton和PushButton 213
6.5 创建拖放部件 215
6.5.1 在面板之间停放部件 216
6.5.2 通过鼠标事件拖动部件 217
6.5.3 停放部件 220
6.6 通过CSS设计用户界面 221
6.6.1 通过GWT使用CSS 222
6.6.2 为选项卡添加样式 224
6.6.3 为菜单添加样式 226
6.6.4 为GadgetContainerView添加样式. 226
6.6.5 创建RoundedPanel 228
6.7 增加持久性 229
6.7.1 实现CookieStorageClass类 229
6.7.2 处理浏览器差异 231
6.7.3 加载和保存cookie 232
6.7.4 使用GoogleGears存储信息 233
6.8 使用其他JavaScript库 237
6.8.1 使用GoogleMapsAPI 237
6.8.2 使用GoogleAjaxAPI加载新闻源. 239
6.8.3 构建天气预报配件 241
6.8.4 构建RSS新闻配件 243
6.9 小结 244
第7章 Multi-Search应用程序 246
7.1 使用聚合器应用程序模式 246
7.2 Multi-Search应用程序设计 247
7.3 模型 248
7.4 视图 249
7.4.1 MultiSearchView类 250
7.4.2 SearchResultsView类 253
7.4.3 构建Link部件 254
7.5 控制器 255
7.6 导入结构化的数据格式 257
7.6.1 绕过同源策略的限制 258
7.6.2 通过JSONP加载JSON源 259
7.7 与Yahoo!Search进行交互 262
7.8 整合Google Base 266
7.9 整合Flickr Search 269
7.10 整合Amazon Search 274
7.11 小结 277
第8章 Blog Editor应用程序 279
8.1 使用工作区应用程序模式 279
8.2 构建Web服务客户端 280
8.3 BlogEditor应用程序设计 282
8.4 模型 282
8.5 构建多文档视图 284
8.5.1 BlogEditorView类 285
8.5.2 BlogView类 287
8.5.3 BlogEntryView类 291
8.5.4 EditEntryView类 293
8.6 添加富文本编辑功能 296
8.6.1 使用RichTextArea 296
8.6.2 使用ImageBundle、国际化和RichTextToolbar 297
8.7 LoadingPanel部件 299
8.8 TitleCommandBar部件 301
8.9 设计应用程序的控制器 303
8.10 构建作为HTTP代理的Servlet 304
8.10.1 新的跨域的RequestBuilder 305
8.10.2 编写代理Servlet 308
8.11 与BloggerAPI整合 312
8.11.1 使用AtomPublishingProtocol和GData 312
8.11.2 定义BloggerService类 313
8.11.3 登录到Google账户 314
8.11.4 从账户中获取XML格式的博客列表 319
8.11.5 获取每个博客中XML格式的文章列表 322
8.11.6 发送XML创建及保存文章 324
8.11.7 发送删除一篇文章的Delete请求. 327
8.12 小结 328
第9章 Instant Messenger应用程序 330
9.1 使用合作者应用程序模式 330
9.2 Instant Messenger应用程序设计 331
9.3 模型 332
9.4 构建补充性界面 334
9.4.1 MessengerView类 336
9.4.2 SignInView类 340
9.4.3 ContactListView类 342
9.4.4 ChatWindowView类 345
9.5 控制器概述 350
9.6 使用GWT-RPC 352
9.6.1 MessengerService接口 353
9.6.2 RemoteServiceServlet类 354
9.6.3 使用异步接口 355
9.7 连接到服务器 356
9.8 添加RPC事件 358
9.8.1 轮询协议 358
9.8.2 基于事件的协议 359
9.8.3 实现事件 361
9.9 Instant Messenger的服务器 363
9.10 使用服务器端高级1O 368
9.10.1 在Tomcat中使用Comet 370
9.10.2 在Jetty中使用Continuations 373
9.11 小结 375
第10章 Database Editor应用程序 376
10.1 使用管理员应用程序模式 376
10.2 模型设计 378
10.3 使用异步数据访问对象 381
10.4 构建双栏编辑器界面 383
10.4.1 使用Tree和SplitPanel部件 383
10.4.2 扩展及动态加载树形项 385
10.4.3 创建工作区视图 388
10.4.4 使用对话框实现编辑和创建对象 396
10.5 服务器整合概览 399
10.5.1 使用Action 400
10.5.2 使用REST 401
10.5.3 使用RPC 401
10.6 编写通用的GWT代码生成器 402
10.6.1 编写代码生成器 404
10.6.2 自动串行化为XML 411
10.6.3 自动串行化为JSON 411
10.7 整合基于Action的PHP脚本 411
10.7.1 使用PHP构建ActionAPI 412
10.7.2 编写客户端的Action数据访问层 415
10.8 整合REST风格的Ruby on Rails应用程序 419
10.8.1 使用Ruby on Rails构建REST API 419
10.8.2 编写客户端的REST数据访问层 425
10.9 整合GWT-RPC Servlet 428
10.9.1 编写RPC服务 429
10.9.2 通过Hibernate存储模型 433
10.10 小结 439