Ajax技术为用户提供了更丰富的页面浏览体验,可以构建高度交互的Web应用。本书重点介绍与Java相关的Ajax工具和技术,主要内容包括XMLHttpRequest对象,JavaScript编辑器、格式器和混淆器,快速开发Ajax应用所使用的Dojo、Prototype、script.aculo.us、Taconite和Yahoo!库等框架和工具包,以及将Ajax技术集成到Struts、Tapestry、Spring、JavaServer Faces等框架中的技术。本书虽然以Java为主要描述平台,但书中的所有示例也可以稍做修改后应用于其他开发平台。\r\n 本书适合于各层次Web应用开发人员。
第一部分 Ajax介绍\r\n 第1章 什么是Ajax \r\n 1.1 Web应用的崛起\r\n 1.2 Ajax闪亮登场\r\n 1.3 XMLHttpRequest对象\r\n 1.4 方法和属性\r\n 1.5 交互示例 \r\n 1.6 避免常见的陷阱 \r\n 1.7 Ajax模式 \r\n 1.7.1 淡出技术 \r\n 1.7.2 自动刷新\r\n 1.7.3 部分页面绘制\r\n 1.7.4 可拖放DOM\r\n 1.8 小结\r\n 第2章 开发工具\r\n 2.1 JavaScript源代码编辑器\r\n 2.1.1 JSEclipse\r\n 2.1.2 NetBeans的JavaScript插件\r\n 2.2 JavaScript的压缩和混淆 \r\n 2.3 查看DOM结构\r\n 2.4 调试Ajax请求\r\n 2.4.1 NetBeans HTTP Monitor \r\n 2.4.2 Firefox的FireBug扩展\r\n 2.5 JavaScript日志 \r\n 2.5.1 Log4JS\r\n 2.5.2 Lumberjack\r\n 2.6 JavaScript调试工具\r\n 2.7 测试工具\r\n 2.7.1 JsUnit\r\n 2.7.2 Selenium\r\n 2.8 小结 \r\n第二部分 库和工具包\r\n 第3章 Java无关的工具包\r\n 3.1 Prototype\r\n 3.1.1 $()\r\n 3.1.2 处理表单\r\n 3.1.3 操作DOM \r\n 3.1.4 Try:简化的浏览器检测\r\n 3.1.5 Ajax支持 \r\n 3.2 script.aculo.us \r\n 3.2.1 效果 \r\n 3.2.2 自动完成 \r\n 3.3 Dojo Toolkit \r\n 3.3.1 动画\r\n 3.3.2 效果 \r\n 3.3.3 dojo.io.bind \r\n 3.4 Taconite\r\n 3.4.1 客户端Taconite\r\n 3.4.2 服务器端Taconite\r\n 3.4.3 使用Taconite\r\n 3.5 小结\r\n 第4章 特定于Java的框架 \r\n 4.1 DWR \r\n 4.1.1 安装 \r\n 4.1.2 安装验证\r\n 4.1.3 JavaScript Templates \r\n 4.2 AjaxTags\r\n 4.2.1 Ajax“杀手级应用” \r\n 4.2.2 AjaxTags的自动完成组件 \r\n 4.3 其他选择\r\n 4.4 小结 \r\n第三部分 Web框架\r\n 第5章 Struts和Ajax\r\n 5.1 Struts的设计\r\n 5.2 Ajax验证\r\n 5.3 Struts验证 \r\n 5.4 Struts和Ajax的集成\r\n 5.4.1 Ajax驱动的验证\r\n 5.4.2 实现Struts \r\n 5.4.3 Struts和Ajax的设计考虑事项\r\n 5.5 Struts的未来\r\n 5.5.1 Struts 1.3及后续版本 \r\n 5.5.2 Shale \r\n 5.5.3 Struts 2 \r\n 5.6 小结 \r\n 第6章 Tapestry \r\n 6.1 什么是Tapestry\r\n 6.2 开始Tapestry之旅 \r\n 6.3 调用服务器 \r\n 6.4 Tapestry表单 \r\n 6.5 Tapestry 异常 \r\n 6.6 Tapestry和Ajax\r\n 6.6.1 Tacos组件\r\n 6.6.2 设置Tacos \r\n 6.6.3 使用组件 \r\n 6.6.4 启用调试信息 \r\n 6.6.5 修改表单例子 \r\n 6.7 小结\r\n 第7章 Spring与Ajax\r\n 7.1 什么是Spring\r\n 7.1.1 仅仅是另一个框架吗 \r\n 7.1.2 面向方面编程和依赖注入\r\n 7.2 开始Spring之旅 \r\n 7.2.1 Ajax与Spring\r\n 7.2.2 库存管理应用\r\n 7.3 小结\r\n 第8章 JSF \r\n 8.1 什么是JSF \r\n 8.2 开始JSF之旅 \r\n 8.3 动态导航 \r\n 8.4 JSF标签库 \r\n 8.5 验证和转换 \r\n 8.6 在IDE中开发JSF应用\r\n 8.7 其他JSF技术 \r\n 8.7.1 Apache Tomahawk \r\n 8.7.2 Facelets\r\n 8.7.3 Shale\r\n 8.7.4 Seam \r\n 8.8 JSF的生命周期\r\n 8.8.1 重建视图\r\n 8.8.2 应用请求值 \r\n 8.8.3 执行验证\r\n 8.8.4 更新模型\r\n 8.8.5 调用应用 \r\n 8.8.6 呈现响应 \r\n 8.9 JSF和Ajax \r\n 8.10 JSF的Ajax组件 \r\n 8.11 小结
在Ajax诞生之前,我们就已经开始通过浏览器部署和运行Web应用。对我们来说,这简直就是软件开发的“圣杯”。再不用担心在每次发布新版本时令人头痛的客户端安装过程了。
当然,那时的Web应用也有自己的问题,不仅用户界面的交互性大打折扣,而且每次与服务器交互都需要完全刷新页面。我们曾经一直以为,这是在所难免的。
但是,2005年,Google Suggest和Gmail等应用的出现使我们震撼不已。Ajax技术所带来的无需特殊插件,就能在任何现代Web浏览器中部署的高度交互性、类似于桌面的Web应用,显然代表了软件开发的主流趋势。我们很快产生了写一本Ajax图书的想法。这就是《Ajax基础教程》。它在2005年10月出版后很快成为国际性的畅销书 。
第一本书的成功使我们有了足够的信心,继续着手撰写一本针对Java平台上Ajax开发的深入指南。虽然Ajax本身是与平台无关的,但是作为Java程序员,我们深知在丰富的Java生态系统中,它可以与众多优秀技术相结合,发挥出更大潜力。而且,近来各种Ajax相关框架和Java Web框架的迅速发展,也使我们有了大展身手的空间。
本书概述
本书旨在为专业Java Web开发人员介绍在Web应用中增加Ajax功能所需的技术和工具。在写作中我们牢记:“你需要知道的我们都要介绍,你不需要知道的我们绝口不提。”我们会把重点放在你很可能不了解的新内容上:Ajax及相关的工具和技术。虽然是一本中高级图书,但为了保持自身的完整性,我们还是介绍了一些基础知识。已经阅读过《Ajax基础教程》的读者,可以快速浏览或直接跳过第1章、第2章中的部分小节。
第1章将带你很快见识一下Ajax。我们会介绍XMLHttpRequest对象的基础知识,以及Ajax开发中的一些常见的陷阱。我们还介绍了一些在Ajax开发中经常会用到的模式。
第2章介绍了能够简化Ajax应用开发的一些工具。我们会谈到JavaScript编辑器、格式器(formatter)和混淆器(obfuscator)。调试程序是一件很痛苦的事,这就是为什么我们给出了很多针对JavaScript的调试工具。对初学者来说,我们会为你展示如何记录日志而不使用警告对话框(alert)。当然,你也要测试你的代码,为此,我们介绍了JsUnit和Selenium,这说明并不是只有服务器端的代码才需要测试。
虽然Ajax确实不是什么高深的技术,但是凭一己之力去实现所有的功能是毫无意义的。在第3章中,我们会介绍各种不同的框架和工具包,你可以利用它们快速开发Ajax应用。我们将介绍Dojo、Prototype、script.aculo.us、Taconite和Yahoo!库。
第4章仍然将重点放在库上,只是这些库是专门为Java开发人员设计的。我们将介绍DWR和AjaxTags,使你了解每个库的强大功能。
本书的后半部分介绍了如何把Ajax技术集成到4个目前领先的Java框架中。第5章讨论了大受欢迎的Struts框架。我们将演示如何利用Struts的验证机制,并讨论集成Struts和Ajax时需要考虑的设计问题。
第6章介绍基于组件的Tapestry框架。在简单介绍Tapestry之后,我们将演示如何利用Ajax式的Tacos组件改进你的应用。
现如今,几乎总会遇到基于Spring的应用。在第7章中,我们就演示了如何在Spring中使用Ajax。我们将演示如何使用DWR来快速开发Ajax式的Spring应用。
当然,讨论Java网络框架而不谈JSF就不能算完整。在介绍过JSF的基础知识之后,我们将演示如何编写自己的Ajax组件,我们也将介绍一些现有的Ajax组件。
本书源代码
本书中的所有示例都可以从Apress网站的源代码(Source Code)部分免费得到 。在浏览器地址栏中输入www.apress.com,点击Source Code链接,在列表中找到Pro Ajax and JavaTM Frameworks,可以从Apress网站的本书主页下载源代码(zip文件)。源代码是按章组织的。
联系我们
我们非常重视你对本书内容和源代码示例的疑问和建议。请把所有问题和建议直接发到proajaxandjava@gmail.com,我们会尽快回复。不过要记住,我们(像你一样!)不可能马上就有回应。
谢谢你购买了这本书!我们希望你认为这是一本有价值的书,能像我们写书一样兴趣盎然地阅读这本书。
致以诚挚的问候
Nathaniel T. Schutta和Ryan Asleson
致谢
非常感谢Apress出版社又给了我们一次机会来表达对Ajax的狂热!感谢Chris Mills帮助我们把我们粗糙的想法精炼成图书。感谢Richard Dal Porto,他使得我们能够专注写作并按时完成。Gregg Bollinger和John Fallows提供了很有价值的反馈,使本书变得更完善。Hastings Hart承担了修正拼写或语法错误的体力活,对此我们深表感激。感谢Laura Esterman指导我们完成最后的成书过程。看着我们的作品通过文字处理软件从文字变成版式优美的图书,我们激动万分。我们还要感谢我们的代理商Laura Lewin及其工作室的员工们对我们工作自始至终的支持。
Nathaniel T. Schutta和Ryan Asleson
首先要感谢我的合著者Ryan——非常感谢你对这本书不知疲倦的努力;我不知道你是怎么坚持下来的!有你这样的朋友和工作伙伴,我感到非常荣幸和骄傲。感谢Sara和Adam对我的支持,谢谢你们促成了我和Ryan的(又一次)合作。非常感谢在我写作过程中,我的妻子对我一贯的容忍。如果没有你的爱和耐心,我根本不可能完成这本书。在我写作这本书的整个过程中,你从来没有不知所措过(甚至在我不知所措的时候),而且,你对我的信任让我觉得很踏实。通常,人们总是在某件事情发生后才能领悟到它的意义——要不是我经历过的一个项目,我将永远不会认识Nathan Good,而就是他带给了我最初的写作灵感。
我欠我的父母太多的恩情了,这辈子都无法报答。如果没有他们的深谋远虑,我可能都不会进入这个领域。谢谢你们帮我把握了未来并给我购买最新的硬件。你们满足了我对阅读的渴望,而这种渴望最终演化成了对写作的激情。谢谢你们,爸爸妈妈——这句话说多少次也不能表达我的感激之情!感谢在过去一年里Brent Ashley给我的所有支持和建议;他的忠告对我意义非凡。特别要感谢双子城Java用户小组(Twin Cities Java User Group)的Jeff Jensen、明尼苏达大学的John Collins、拉克罗斯市(La Crosse)威斯康星大学(University of Wisconsin)的Kasi Periyasamy、圣约翰大学的Jim Schnepf和Mike Heroux以及OTUG的Aleh Matus,谢谢你们提供传播Ajax知识的论坛。我们对你们的帮助深表感谢。我知道还有一些应该感谢的人,但是我要衷心地表示歉意——篇幅所限,我无法一一列出他们!再一次感谢这里提及的以及我牢记在心的每个人。
Nathaniel T. Schutta
我要感谢我的朋友也是合著者Nate,他把写书的过程变得如此令人愉快。怎么谢你都不过分啊!你是最棒的工作伙伴。谢谢你为这本书付出的辛勤工作和无比的奉献。Christine,谢谢你让我和Nate能再次共事。
没有话语能表达我对我妻子Sara的爱和感谢,在有时会使人筋疲力尽的写作过程中,她一直贤淑地支持着我。没有你坚定的支持和理解,我不可能完成这本书。我的儿子Adam带给我很多欢乐,我真的很需要这种远离电脑的愉悦。
我还要感谢那些在我生命中十分重要的人,他们帮助我成为了如今的我。我无法把这些人都列在这里,但是你们肯定知道我的谢意!最后,我要感谢我的爸爸妈妈,感谢他们这些年来为我所做的一切;没有他们的爱和鼓励,我的一切都不可能发生。
Ryan Asleson
无封面