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