首页>参考读物>计算机科学与技术>软件与程序设计

Google Web Toolkit应用程序开发
作者 : Ryan Dewsbury
译者 : 秦绪文 李松峰
出版日期 : 2008-10-10
ISBN : 7-111-24885-9
定价 : 65.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 439
开本 : 16开
原书名 : Google Web Toolkit Applications
原出版社:
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

通过Google Web Toolkit(GWT)加速和简化Ajax开发  
  “Ryan清楚地知道GWT的价值所在,更对GWT与多种Web技术的整合了若指掌——而且,不仅仅是理论上的阐发。随着gpokr.com和kdice.com的声名鹊起,Ryan已经成为业界名符其实的GWT权威人物。”
  ——Bruce Johnson,Google Web Toolkit创建者

  在这本实用性极强的书中,Ryan Dewsbury从权威人士的独特视角出发,以全面翔实的GWT技术阐释为基础,向读者详细解释了如何使用可靠的工具,创建一流的Web应用程序。他将自己在GWT开发实践中总结的“前线作战经验”毫无保留地奉献给了读者,主要包括:
  利用层叠样式表和GWT的部件及面板,构建优雅灵敏的用户界面
  通过基于HTTP、REST、JSON/JSONP及RPC的异步通信创造流畅的用户体验
  与Web标准——如XML、RSS和Atom——及Web服务——如Google Maps、Amazon Books、Yahoo! Search、Flickr和Blogger协同整合
  绕过浏览器的安全限制,如HTTP的双连接限制及同源策略
  使用软件工程、代码生成、国际化、应用程序模式以及Java工具来加速开发
  以资源压缩和缓存为手段实现性能最优的部署
  构建5个非同凡响的应用程序:具有丰富拖放界面的Gadget Desktop、同时向多个搜索引擎发送请求的Multi-Search、能够管理多个博客的Blog Editor、基于Web即时通信的Instant Messenger以及针对传统网页的 Database Editor
  通过对本书的学习,读者能够掌握GWT开发技术,熟悉众多的方法、提示和实例。同时,更能够理解以自己开发的Web应用程序向用户提供一流体验的真实含义。

图书特色

图书前言

我始终保持着对软件开发非技术一面—用户体验的兴趣。说到这个兴趣的由来,大概要追溯到当年我和一个团队用C++来构建某个应用程序服务器的核心。当时,大家对C++语言的优美及其可表达性都很欣赏。我们以优雅的代码完成了几个大型的复杂系统,它们都能够流畅运行。其中,最令人称奇的大概要数我们使用的模板技术,该技术能够使C++编译器像代码生成器一样,帮我们生成烦琐的代码。后来,每当跟别人提起那种美妙的用户体验时,我看到的往往都是一些茫然的眼神。
  我决定抽时间写一个客户端应用程序,它带给用户的优雅体验,就如同开发者看到写得漂亮的代码一般。我选择了构建一个即时消息服务,主要通过C++来开发,这个应用程序将4种主要的网络组合到了一个界面中。那时候,即时消息软件的功能日益膨胀—众多按钮令只想发送一条简单的文本消息的用户感到无所适从。而我所开发的这个即时消息程序则能够给用户带来更好的体验:用户不必下载10MB的客户端,也无需经历5步的安装过程,经过我的优化,这个程序只有200KB,而且界面整洁(很像我们今天使用的Google Talk)。结果,这个程序获得了百万级的下载量。
  在使用C++开发界面的过程中,创建漂亮的网页界面是那样简单,而我总是对此印象深刻。其实,只要将C++与层叠样式表中设置字体的代码作一比较,你就会明白我的意思。随后,Ajax开始流行,而通过Ajax也能构建类似桌面应用程序的Web应用。加之使用CSS能轻易得到漂亮的外观,因此Ajax就成为人们更好的界面开发平台。
  当我第一次看到Google Maps时,我确实被深深地触动了。那种用户体验简直太棒了!只要在浏览器中输入maps.google.com,马上就能使用一套全功能的地图应用程序。既可以在各个方向上拖动地图,也可以让它带着你周游世界,而且无论放大还是缩小都无需等待页面刷新。于是,我大概地看了一下实现这些功能所需的技术—尤其是JavaScript,结果非常令人失望。我知道使用JavaScript存在着很多的局限性。由于这些局限性,几乎不可能用它来构建一个大型复杂的客户端应用程序。
  后来,Google Web Toolkit(GWT)发布了。我决定用它来试着编写一个应用程序。只用了3周时间,我就构建完成了poker应用程序的客户端和服务器端。我把它放到了http://gpokr.com上。只要在浏览器中加载这个URL,就可以立即启动一个实时的poker游戏。无需下载、无需安装,而且通过CSS能够为界面添加漂亮的样式。GWT团队的Scott Blum、Bruce Johnson以及Joel Webber,都闻讯前来“测试”。因此,我也有了一个向他们道谢的机会,感谢他们开发了这个令人惊叹的工具。最让我激动不已的就是,GWT编译器能够把优美的Java代码转换成JavaScript。于是,任何人都可以创建向用户交付美好体验的应用程序,而可靠的GWT则给我留下了深刻的印象。
  在GWT首次发布之后,我发现许多人还对它的强大功能一无所知。显然,最好能有一本书通过实例向大家展示GWT各方面的能力。此前,我没有写书的经验,而且写一本并非我专业的技术书,看起来似乎也不合适。不过,当时可以说也没有什么人对GWT很在行。出于对这一技术的信赖,我决定试一试。为了弥补经验的不足,在动笔写这本书之前,我先用几个月的时间专门开发了一些GWT应用程序。通过这些应用程序的开发,我探索了GWT中的各个部分,也搞清了GWT可能会涉及的所有Web技术。本书的第二部分展示了这些应用程序。
  本书重点内容
  本书讲解如何使用Web技术和Java开发工具,以GWT为桥梁,创建能为用户提供卓越体验的Ajax应用程序。本书的焦点主要是Google Web Toolkit,同时也深入介绍了它提供的库和工具。作为第二个焦点,本书也讨论了使用Java的软件开发技术和模式,以及如何使用GWT来开发Ajax应用程序。第三个焦点是Web技术,包括Web标准和其他Ajax库及API。
  本书读者对象
  作为一名开发者,我写这本书的目的,是为了给其他开发者看。如果你想要创建面向用户的应用程序,那么你应该看这本书。本书中的大部分代码都基于Java,但由于精心编排,本书也适合Java语言初学者阅读。如果你想看这本书,但又不懂Java,那么就需要在阅读本书之前先学习Java。Sun公司为学习Java的开发者提供了丰富的在线教程,在http://java.sun.com/docs/ books/tutorial/java/index.html可以找到。
  对于Java开发者而言,GWT不仅仅是一个Ajax工具。在我看来,这种观点严重低估了GWT的能力。虽然Java开发者使用它会感觉很简单;但是,只要想构建不同凡响的Ajax应用程序,那么无论你是.NET、PHP、Ruby开发者,还是C++开发者,这本书同样也适合你。假如你是上述开发者之一,想要掌握另一个门语言来构建Ajax应用程序—无论用不用GWT;那么,我的建议是学习Java—从前面提到的Sun公司的在线教程开始,并通过本书来学习GWT,以及学习http://code.google.com/webtoolkit/documentation/中的GWT文档,而不是学习JavaScript。这样,你就会节省大量时间用于测试和维护应用程序,同时还能创造出更好的用户体验。
  本书结构
  本书分为两部分。第一部分是对Google Web Toolkit的深入介绍。可以将这一部分作为GWT库的参考,或者作为使用GWT中高效开发技术的指南。第二部分全面剖析了5个通过GWT构建的不同凡响的应用程序。这一部分将介绍应用程序设计与开发过程中涉及到的开发模式、方法和技巧。这一部分中的每个应用程序,都是对GWT库的应用、Web服务、技术搭配、应用程序设计和架构,以及用户界面设计等因素综合考量的结果。在阅读这些章节时,读者可以在自己的机器中同步构建应用程序。虽然每一章都包含大部分相关代码,但在讲解某些实例时,读者可能需要根据提示查看本书的源代码。本书的源代码可以在www.gwtapps.com下载到(打开页面后单击左侧栏中Book Forum链接,然后单击“文件”,再选择下载各章的代码或全部源代码)。
  第一部分:理解Google Web Toolkit
  第1章,Google Web Toolkit简介。讨论了Web技术、能力组合及GWT。最后展示了一个创建Ajax游戏应用程序的简短教程。
  第2章,用户界面库。详细介绍了GWT提供的用户界面库,主要围绕每个部件的用法,由说明和例子构成。
  第3章,服务器整合技术。讨论了与服务器端应用程序进行整合的几种方法。
  第4章,Ajax应用程序开发中的软件工程。着眼于用于软件开发的Java工具,以及如何将这些工具应用到GWT开发中。
  第5章,高效使用GWT。揭示了GWT开发中的一些高级技术,包括CSS、代码生成、国际化以及性能优化。
  第二部分:创建富Web应用程序
  第6章,Gadget Desktop应用程序。这是一个带有丰富界面拖放功能的桌面配件应用程序,涉及使用cookie和Gears实现持久化,以及在GWT中使用JavaScript API。
  第7章,Multi-Search应用程序。展示了如何创建向多个搜索引擎发送请求的搜索应用程序。该应用程序使用参数式JavaScript对象表示法(JavaScript Object Notation with Padding,JSONP),实现了与Google、Yahoo!、Amazon以及Flickr的通信。
  第8章,Blog Editor应用程序。本章展示了一个用于管理多个博客中的文章的应用程序。该应用程序通过HTTP代理整合了Blogger REST API。
  第9章,Instant Messenger应用程序。详细剖析了基于GWT-RPC在网页中构建即时通信系统的过程。该应用程序还涉及到使用基于事件的协议,以及通过Tomcat中的Comet及Jetty中的Continuations实现优化。
  第10章,Database Editor应用程序。关注的是一个在传统网页中实现数据库管理的应用程序。该应用程序涵盖了很多高级主题,例如:使用数据访问对象( Data Access Object,DAO)从服务器上读取复杂的数据结构、简化XML和JSON的代码生成,以及同PHP、Ruby on Rails及Java与Hibernate整合。
  在线支持
  本书的网站是www.gwtapps.com。这个网站中包含了本书的源代码及各个示例应用程序的实时演示版。单击页面左上方的Book Forum链接,可以进入一个论坛,供读者提问、报告错误和下载源代码。同时,网站中还提供了其他参考资料。
  致谢
  我感谢GWT团队,感谢他们开发了这样一项值得大书特书的技术。同样,我要感谢Prentice Hall出版社那些优秀的人士:John Wait,他在设计和创新方面总有各种奇思妙想;Rebecca Greenberg,她的编辑工作令人赞叹;Chris Zahn,他心细如发并且激情四射;Raina Chrobak,他做事极有条理并容忍了我对目录三番五次的修改,还有Julie Nahil,感谢他对本书制作所付出的努力。
感谢所有审稿人:Sandy McArthur、Jason Essington、Bruce Johnson、Massimo Nardone和Mark Volkmann。感谢他们发现的错误和提出的建议,减少了本书存在的问题。
  最后,感谢Gpokr和Kdice的数以千计的玩家,他们容忍了我长达6个月没有升级程序和修复bug。
  作者简介
  作为一名开发者、架构师和咨询师,Ryan Dewsbury从1998年起就开始使用C++和Java。他曾花费几年时间协助完成了一个系统框架的构建工作,该框架设计用于一种半导体制造系统。最近,Ryan正致力于协助几家刚刚成立的Web公司,使用前沿软件来创造卓越的用户体验。
  工作之余,Ryan还投入时间开发独立的软件项目,包括2004年完成的Easy Message,以及近期的Gpokr(http://gpokr.com)和KDice(http://kdice.com)。后两者是他基于GWT在不经意间开发成功的在线游戏。

作者简介

Ryan Dewsbury:暂无简介

译者简介

秦绪文 李松峰:暂无简介

图书目录

前言
第一部分 理解Google Web Toolkit
第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  使用JavaScript API 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应用程序
第6章  Gadget Desktop应用程序 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  Hello World配件 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  使用Google Gears存储信息 233
6.8  使用其他JavaScript库 237
6.8.1  使用Google Maps API 237
6.8.2  使用Google Ajax API加载新闻源 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  Blog Editor应用程序设计 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  与Blogger API整合 312
8.11.1  使用Atom Publishing Protocol和
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  使用服务器端高级IO 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构建Action API 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

教学资源推荐
作者: [美]德洛莉丝 M. 埃特尔(Delores M. Etter) 著
作者: 苏俊
作者: Tom Cargill
作者: (美)Ira Pohl
参考读物推荐
作者: 王国辉 李伟 等编著
作者: 刘文如 编著
作者: Rogers Cadenhead