GoogleWebToolki开发实战
版权信息作者:(美国)David Geary (美国)Rob Gordon 译者:李松峰 李维鑫
出版社:机械工业出版社
页码:330 页
出版日期:2009年
ISBN:9787111250593
开本:16
丛书名:Google核心技术丛书
外文书名:Google Web Toolki Solutions:More Cool & Useful Stuff
市场价:¥49.00
内容简介Google Web Toolkit (GWT)是一种开源的Java框架,用于构建Java驱动的Web应用程序。通过GWT,开发者可以使用纯Java来实现丰富的客户端应用。在简化开发能够运行于各种浏览器中的、类似于桌面应用程序的客户端应用方向,GWT超过了大多数Java框架。局限用户界面丰富性的唯一因素就是开发者的想象力。《Google Web Toolki开发实战》内容涵盖了GWT的高级特性,在构建具有丰富用户界面的真实应用程序时,完全可以利用这些特性而不必学习JavaScript和其他相关的Java技术。《Google Web Toolki开发实战》中的每个解决方案并不局限于解决一个问题,而是融合了设计模式和最佳实践。作者对示例应用程序的耐心解释,有助于读者迅速掌握高级的GWT技术,例如实现拖放、整合JavaScript库,以及使用高级事件处理机制等。
作者简介David Geary著名作者、演讲者和顾问。他是JSF(JavaServer Faces)的专家组成员。此外,David不曾为Sun的Web Developer Certification Exam编写试题。David Geary编著了8本Java技术书,包括最畅销的Graphic Java 2 Series、Advanced JavaServer Pages和Core JavaServer Faces。
Rob Gordon独立咨询师、资深Sun开发师,也是Essential JNI作者和Essential JMF的合著者。
编辑推荐构建自定义GWT部件,包括高级复合部件和低级组件。
实现具有iPhone风格的自动滚动功能的视口类。
通过GWT在应用程序中整合Web服务。
将Script.aculo.us JavaScript框架整合到GWT应用程序中。
组合Hibernate和GWT实现基于数据库的Web应用程序。
扩展GWT的PopupPanel类以实现可拖动和可调整大小的窗口。
创建拖放模块,包含拖动源和放置目标。
将GWT应用程序部署到外部服务器。
动态调整可伸缩表格。
在基于Struts、JavaServer Faces等其他框架开发的原有应用程序中使用GWT部件。
目录译者序
序
前言
第1章GWT入门与进阶
1.1综述
1.2本章要点
1.3GWT部件简介
1.4GWT应用程序分析
1.5通过GWT面板构建用户界面
1.5.1根面板
1.5.2user.client.ui API
1.6通过CSS为部件添加样式
1.7GWT与事件驱动的程序设计
1.8国际化与本地化
1.8.1实现GWT国经的4个步骤
1.8.2使用GWT的il8nCreator命令
1.9GWT Web应用程序中的新“视图”
1.10GWT的历史机制
1.10.1添加历史类和历史侦听器
1.10.2处理浏览器后退按钮
1.11GWT的对等实体:DOM元素
1.12使用延迟命令赋予部件键盘焦点
1.13实现远程过程调用
1.14使用自定义部件
1.15在GWT模块中封装自定义部件
1.16完整的登录实用程序
1.17本章回顾
第2章JavaScript整合技术
2.1本章要点
2.2整合JavaScript库Script.aculo.us
2.2.1在HTML文件中导入JavaScript文件
2.2.2在GWT配置文件中导入JavaScript文件
2.3整合JavaScript日历
2.4本章回顾
第3章自定义部件
3.1本章要点
3.2复合的自定义部件
3.2.1复合部件和传递方法
3.2.2事件处理程序
3.2.3触发变化事件
3.2.4实现HasText和Has Name接口
3.2.5整合Script.aculo.us的Blind Down效果
3.3低级自定义部件
3.3.1在低级自定义部件中使用DOM类
3.3.2为自定义部件设置默认CSS样式
3.3.3在自定义部件中通过参数控制Script.aculo.us效果
3.4本章回顾
第4章视口与地图
4.1本章要点
4.2通用视口部件
4.3地图应用程序的文件和目录
4.4实现视口
4.4.1通过AbsolutePanel实例在像素级别上放置部件
4.4.2在视口中拖动视图
4.4.3通过焦点面板响应鼠标事件
4.4.4通过事件预览禁止浏览器对鼠标事件的默认响应
4.4.5捕获事件
4.5深入理解焦点面板在视口中的应用
4.6带动态手势的视口视图
4.7完成后的视口
4.7.1加入拖动手势
4.7.2响应拖动手势的动态滚动
4.7.3与拖动手势保持同方向动态滚动
4.7.4改变动态滚动的速度
4.8本章回顾
第5章访问在线Web服务
5.1本章要点
5.2Yahoo!Maps Web服务
5.2.1示例应用程序分析
5.2.2地图应用程序的文件和目录
5.2.3实现Yahoo!Maps应用程序
5.3访问Yahoo!Maps的Web服务
5.4缩放
5.5本章回顾
第6章拖放技术
6.1本章要点
6.2拖放示例应用程序
6.3拖放模块
6.4实现拖放模块
6.4.1使用音乐播放器和购物车面板组件
6.4.2使用拖动源和放置目标
6.4.3定义CSS类
6.5在GWT模块中实现拖放
6.5.1模块配置文件
6.5.2抽象拖动源和放置目标类
6.5.3鼠标侦听器
6.6本章回顾
第7章简单的窗口
7.1本章要点
7.2基于伸缩表格构建窗口
7.3简单的窗口
7.3.1使用弹出面板
7.3.2重写弹出面板默认的事件处理行为
7.3.3使用GWT的伸缩表格并为其单元格添加样式
7.3.4接收事件
7.3.5操作部件DOM元素的Z轴堆叠次序
7.3.6调整弹出面板的大小
7.3.7防止意外的浏览器效果
7.4窗口标题栏
7.4.1在水平面板的单元格内对齐部件
7.4.2通过鼠标侦听器和图像模拟3D按钮
7.4.3移动弹出面板
7.4.4在窗口标题中防止意外的浏览器效果
7.5本章回顾
第8章伸缩表格
8.1本章要点
8.2伸缩表格简介
8.3简化伸缩表格的操作
8.4删除伸缩表格的行
8.5编辑伸缩表格的单元格
8.6动态调整伸缩表格的列
8.6.1通过GWT构建事件侦听器和触发事件
8.6.2构建ResizableCellPanel部件
8.6.3将ResizableCellPanel部件加入伸缩表格
8.7通过伸缩表格实现数据分页
8.8使用Pager部件
8.9本章回顾
第9章文件上传
9.1本章要点
9.2GWT的文件上传部件
9.2.1创建用户界面
9.2.2解析JSON
9.3Apache Commons fileUpload
9.4本章回顾
第10章整合Hibernate
第11章外部服务器部署
第12章GWT与遗留程序
……
序言Ajax的成功非常耐人寻味。既没有经过特别地发布,也没有产品或报道让人们知道有一种技术叫Ajax。好像是一夜之间,Ajax就出现了。尽管Jesse James Garret写了文章为这种技术取了名字,但该文也没有声称这是他的创造,而是指出它是一种值得关注的新趋势、结果,虽然我们都意识到了它的存在,但对于“Ajax”到底意味着什么却难以达成共识。对此,20位专家可能会有22种不同的解说。假如非要我概括一下他们的意见,那么我只能说它是过去15年来软件领域中最好的,同时也是最差的一种技术。然而,无论人们是否知道它的起源,它是什么,或者它的优点和缺点,但每个软件从业人员似乎都想在自己的下一个产品中加入平滑的新Ajax界面。从技术人员的角度看,这并不意味着是一件简单的事情。浏览器普遍存在兼容性问题,而且其不一致性也给开发人员带来了无尽的痛苦。于是,大家都从自己的角度提出了正确的意见,但反映的问题却让人无法乐观。。
不过,值得欣慰的是Ajax并非只有技术人员在推动。还有另一股力量对技术人员结构之美的困惑起到了调和作用—即用户越来越强烈地认为软件应该简化生活,而不是让生活复杂化。虽然技术人员抱怨浏览器是软件开发中的混沌地带,但用户却因为自己熟悉和适应浏览器而对它推崇倍至。对用户而言,浏览器把Internet连接的全部复杂性简化为几个关键概念:地址。链接。前进。后退和搜索。这就是Web中的语言,而且用户对这种具有局限性的技术图景却乐在其中。他们为什么不应该如此呢?除了要熟悉各种浏览器之外,额外的约束也强迫软件开发人员更关注用户的需求。成功使用Ajax开发的一个重要标志,就是无论你使用什么技术,但结果必须对用户有价值。虽然这对于推动应用程序开发的创新明显具有积极意义,但软件开发人员必须为此付出的代价,则是要承受更多的痛苦和磨难。
在我听说的新项目中,“当然,它的UI要设计成非常Ajax的风格”这样的论调越来越多。一般情况下,通过他们对项目的深爱程度,我都能推测出项目进展。而那些刚刚参与到项目中的人,则会因为能在倍受关注的领域内工作而激动不已。他们会讨论选择某个框架的过程,有时也会粗略地聊一聊早期UI模型的情况。此时此刻,他们已经构建了一些小例子,一切好像都按部就班。不过,也很容易看出基于浏览器开发的困难对他们来说并没有那么夸张,反而对攻克技术难关的满足感倒是溢于言表。于是,他们决定品尝一种时尚的浓咖啡来奖励自己。几个月后,当我再遇到他们时,发觉他们对那个项目欲言又止。然而,他们最终还是向我透露,开始时对某些问题的难度估计不足,而事实证明挑战还不小。“我们本来是想让它实时更新,但谁知道加载要花那么多时间”。此时,我的初步判断就是他们的信心开始低落,但我还是尽力鼓励他们。不过,我知道一场耐力赛才刚刚拉开帷幕。这时候,我通常会建议他们别再喝浓咖啡了,而是改喝茶。与咖啡因相比,茶更温和且具有持久力,咖啡却总爱在关键时刻掉链子。简单地说,要为好的Ajax应用程序画上完美的句号,必须有足够的时间。虽然他们都对接近真实挑战的终点持乐观态度,但却往往对我的建议一笑置之。
项目真正的灾难开始于出现如下问题:我们的用户在想什么?在试图回答这个问题时,多数人都想通过用户测验,或者通过发布早期的beta版来找到答案。另外还有一些人,—这些人大概吃水果之前都不会先洗一下,他们会基于自己认为的对用户需求的精确把握,提前发布完整版。我觉得这些人最可怜。事实上,在回答这个问题时,上述两类开发人员存在一些共同问题。首先,他们作出的避免涉及某些较难问题的决定,对用户而言实际上是错误的。其次,他们认为任何测试都比不上实际使用。目前,类似的认识并不仅仅存在于UI内置的Ajax上面。我不知道有哪个成功的项目可以绕过这些难题。但对Ajax应用程序而言,独有的一个特点就是这些问题越来越难以解决好。因为,需要闯过的关口实在是太多了。.。
首先要面对的恐怕就是浏览器间行为的不一致性。用户会报告说在一个浏览器中他们的菜单显示在了错误的位置上。在另外一个浏览器中,文本又发生了折行。但在第三种浏览器中,虽然不存在前两个问题,但却在加载应用程序15分钟后,由于某些内容的变化,导致整个界面出现了闪烁现象。其次,你可能会发现用户的使用模式不对头,而且UI中的某些部分还必须得改变—如果不是出现讨厌且莫名其妙的问题,这些改变通过JavaScript的灵活表达性来实现也确实会让人折服。我也曾在很多情况下尝试无缝地重构大型JavaScript代码基,但没有一次令人满意。在这些错综复杂的问题之上,只有一个硬道理:应用程序必须让用户满意。因此,除了刚刚介绍的这些直接困难之外,用户体验最大化这个主要目标仍然未变。而且,当应用程序运行后,这也是人们评估它的唯一标准。你的应用程序能够满足用户需要吗?
简单地说,这正是Google Web Toolkit的使命—让开发人员在面对这些问题时,能够更轻松说“没问题”。我们越来越讨厌攻击令人头疼的Ajax开发,特别是忿忿地抱怨浏览器,因为这最终毫无结果,更得不到什么好处。不过,这样却会让你知道什么对用户最好,但你却无法真正实现—因为这就相当于连一把好用的锤子都没有,却幻想着建设一套房子。GWT充分利用了已有的工具。例如,软件工程中就有不少好用的“锤子”,而我们就非常奇怪,怎么就没有人在Ajax开发中有效地使用它们呢。我们坚定地认为,确保Web应用程序持续改进的正确方法,就是利用优秀的软件工程工具和已有的最佳实践。GWT可以让开发人员通过Java来编写Ajax代码,也利用了UI开发人员耳熟能详的各种概念和模式,在开发中使用可验证的开发环境,包括像Eclipse这样具有代码完成和重构工具的IDE,在真实的浏览器中运行并调试应用程序,并使用可靠的调试器,然后,再通过编译器将全部Java代码转换成小型化但却高性能的JavaScript代码。而且,这些代码可以应对绝大多数浏览器问题,甚至让开发人员都毫无觉察。当然,也包括将各种从未想到过的操作平滑地转换为JavaScript。GWT无意挑起趋势和语言之争,它只是一种实用的。能够解决问题的方案。
为此,当我看到David Geary的这本书如其名的著作时,感到非常高兴,因为本书侧重于具体而实用的解决方案。本书与GWT的精神完全合拍。如果抛开用户关心的问题不谈,那么无论设计模式还是优雅的代码都将无的放矢。David在本书中不仅提供了精心准备的各种示例,同时也向读者展示了更高级的内容。而且,书中每个示例都能完美地适应两个层面的应用。首先,通过这些示例可以学习到使用GWT构建用户界面的过程,其中不仅融合了常见的模式,甚至还揭示出许多可能的缺陷。其次,书中每个解决方案都可以在实际项目中照样子加以重用。因此,如果将来涌现的GWT应用程序中出现这些示例的影子,我一点也不会感到惊讶。我相信读者也会认同这种高效率的方法。事实上,读者对书中解决方案的评判标准,最好能像我对GWT给出的评判标准一样:看手中的这本书对您创建满足用户需求的应用程序是否有用。