关于本书 欢迎来到Struts2的世界!既然你拿起了这本书,那么你可能是个听说过Struts2的Java Web 开发人员。你或许曾经使用过Struts1(Struts1x),或许使用过其他的Web开发框架,当然也有可 能是第一次涉足Java Webl应用程序开发的领域。但是不管如何,你可能正在寻找一本介绍Struts2 的好书。本书不但介绍了Struts2的基本概念,而且详细讲解了如何使用Struts2进行开发。当然, 如果你从来没有听说过Struts2也不要紧,本书会带你了解Suts2非常基本的内容。如果你已经了 解了Suts2能做什么,但想更深入地了解Struts2是如何做的,这本书也很适合你 Struts2是一个基于Java的Web应用程序开发框架。你知道,Java涵盖的内容非常广泛,而且 Struts2涉及Java世界里非常广泛和深入的内容。因此,写一本介绍Struts2的书所面临的最大的挑 战,就是决定应该写哪些内容。关于本书的内容,我们收到了很多很好的建议,但是如果都采纳 的话,那么其厚度会是现在的3倍。有些建议是针对日常开发的,本书没有包含这些内容,在此 我们诚恳地表示歉意。请相信我们在决定取舍的时候也非常地慎重。 Struts2不仅仅是Struts1的一次版本升级。如果你不了解Suts2,根据名字,可能会认为它 是Struts1这个经典开发框架的一个新版本。但事实并非如此。Struts2和Struts1的关联在于它们 -致的开发思想,而不在于一致的基础代码。Struts 1是一个面向动作的Web开发框架,它使用 MVC(Model-View.Controller)模式把各层关注的内容有效地分离开来。Struts2是一个全新的 面向动作的、基于MVC模式的Web开发框架的实现。对于Struts 1的开发人员来说,从外表上看 Struts2会感觉很熟悉。但是新的框架包含了许多架构上的变更,这些变更可以让Struts2的MVG 模式更加清晰、整洁,使开发流程更加有效。本书从基础讲起,占用一些篇幅详尽地介绍这个新 的开发框架,并努力说明其内部的结构。 本书将循序渐进地向你讲述Struts2。开始会有一些预备章节来介绍Struts2的技术背景,讲解 架构的宏观概念,以及提供一个朴实无华的HelloWorld示例应用程序来帮助你建立开发环境。 简单的介绍之后,会有一系列章节来逐一深入地讲解Sus2核心的概念和组件。本书会花费一定 的篇幅来深入讲解每一个组件的功能,并且提供了一个全功能的Struts2Wcb示例应用程序:Struts2 公文包示例应用程序。最后几章讲解从核心组件中挑选出来的高级技术,以及一些框架的高级特 性,例如插件以及与Spring集成。以下是本书各章内容的概要。 路线图 第1章带你平稳起步。首先简单地介绍了Struts2产生的背景,以及Web应用程序和开发框架
2关于本书 之后从宏观角度给出一个非常必要和抽象的架构。如果你不了解WebWork(Struts2基础代码的来 源),那么关于这个框架的宏观介绍将向你呈现一种新颗有趣的开发思路。高级读者可以跳过第1 章,直接阅读后面的章节。 第2章使用了简单的HelloWorld程序来印证第1章中讲解的架构原理。这一章使用了两个版本 的Hello World程序。首先展现了如何使用XML来声明Struts2架构的元数据,然后又使用Java注解 (annotation)完成了同样的任务。这两个Struts2应用程序既强化了架构的概念,又展现了Struts2 Wb应用程序的基本结构。 第3章开始讲解本书的核心内容,主要讲解Struts2的动作(action)组件。动作组件是Struts2 的核心,讲解Suts2就应该由此入手。这一章除了解释动作核心组件的内部工作原理之外,还开 始开发一个全功能的Suts2公文包示例应用程序。 第4章继续讲解Struts2的核心内容,讲解这个框架最重要的一个部分一拦截器(interceptor)。 Struts2中几乎所有的重要功能都是使用拦截器实现的。这一章将让你了解什么是拦截器,它们是 如何工作的,以及什么时候需要考虑实现自定义的拦截器。 第5章不再讲述Suts2的基本内容,而主要讲解系统的数据转移机制。Suts2的一个最具创 新意义的特性就是在HTTP和Jav领域之间自动地转移和转换数据。一些非常难理解但是很重要 的特性,例如OGNL、ValueStack以及ActionContext,将逐个在这一章揭开神秘的面纱,变 成可以被普通的开发人员所掌握的武器 第6章开始讲解Struts2的视图层技术,也就是Suts2 Tag API。.这一章主要讲解如何使用 OGNL表达式语言来操作ValueStack和ActionContext中的数据,并介绍了向呈现的视图页面 注入数据要用到的基本标签,以及掌控呈现视图页面流程的控制标签。最后介绍了OGNL表达式 语言,它在你的日常标签开发工作中将会非常有用。 第7章讲解Suts2标签中非常重要的另外一部分 一Struts2UI(用户界面)组件。UI组件是 用来建立Wb应用程序的用户界面的标签。UI组件包括表单组件、文字字段组件等。但是千万不 要把Struts2UI组件和上一代人使用的HTML标签混为一谈。 第8章结束Suts2视图层技术的讲解,介绍结果(result)组件。这个核心组件充分展现了 Suts2的灵活性。使用这个高度分离的结果组件,你可以完全摆脱动作的束缚来构建合适的结 果。在简单的讲解之后,将构建一个可以基于任意动作组件准备的数据返回JSON流的JSON结果 组件(该动作组件根本不需要知道SON),以此来阐述结果组件高度分离的含义。这-一章会使用 这个示例为Struts2公文包示例应用程序追加Ajax功能。 第9章开始讲解如何使构建的Struts2应用程序符合业界标准。重点讲解了如何使用Struts2 Spring插件将依赖注入机制引入到Struts2应用程序。之后再接再厉,讲解如何使用Spring集成将 应用程序升级到PA/Hibernate持久化访问层,以及利用Spring对各种技术的出色支持对该层进行 管理 第10章继续把示例wb应用程序做得更加精致。这一章利用Suts2的数据验证框架以元数据 驱动的方式来验证应用程序的数据。 第11章讲解Suts2对国际化和本地化的支持,并且向你详细介绍所有的细节。 第12章讲解Struts2插件架构。像其他设计优良的软件一样,Suts2能够在不改变已有代码的
1.1Web应用程序:快速学习3 有益的。深入理解像Suts2这样的web应用程序框架的技术背景,可以让你更自然地理解框架在 技术构架上的取舍。另外,也为后续的讨论建立一个共同的词汇表,便于阅读本书。 Wb应用程序是运行在Wb上的简单(或者不是那么简单)的应用程序。随着网速、连接技术 客户/服务器技术的快速发展,Wb已经成为了用来构建各种应用程序的日益强大的平台,从标准 的面向商业的企业级解决方案到个人软件。最终,Wb应用程序必然会像传统的桌面应用程序一样 功能完善且易于使用。然而,不管构建在Wb平台上的应用程序多么变化多端,这些应用程序的核 心工作流仍然非常一致,这为重用提供了绝佳的机会。像Struts2这样的框架通过提供一个核心的 Wb应用程序工作流的可重的架构方案,努力将开发人员从对领域的普通关注点中解放出来。 1.1.2基础技术简介 现在快速地浏览一下构建Wb应用程序所依赖的两个非常重要的组成部分。从某种意义上 说,wb很简单—像所有优秀的解决方案一样,如果它不简单,就不可能成功。图1-1简单展示 了使用Struts2的环境 Java Servlet规范 HTTP 图1-】Java Servlet API将HTTP客户/服务器协议公开给Java平台,Struts2构建在它上面 如图1-l所示,Struts2建立在两个重要的技术之上。所有Struts2应用程序的核心都是HTTP 协议的客户/服务器数据交换。而Java Servlet APL又负责将这些低级的HTTP通信公开给Java语 言。虽然可以通过直接根据Java Servlet API编码来编写Web应用程序,但这通常不是一个好的实 践。从根本上来说,Struts2使用Java Servlet API就是为了让你不必使用它们。不在Struts2应用程 序代码中使用Servlet API是一个好主意,这样即使你不了解底层技术,照样能够轻松自在地开发 Struts2应用程序。以下两节提供了更多与HTTP和Java Servlet相关内容的介绍。 1.HTTP 大多数的Wb应用程序运行在HTTP之上。这个协议是一系列无状态的客户/服务器消息交 换。通常情况下,客户是一个Wb浏览器,服务器是一个Web服务器或者是应用程序服务器。客 户通过向服务器发送一个对特定资源的请求而发起通信。这个资源可以是一个存储在服务器本地 文件系统中的静态HTML文档,也可以是一个需要通过复杂计算而动态生成的文档。 关于HTTP协议,及其在这个领域中的工作方式,有很多内容可以讲解。但是,我们只关注 那些与Wb应用程序相关的重要内容。首先我们必须声明,HTTP协议原本不是为满足Web应用程 序开发人员的需求而设计的。它是为请求和处理静态的HTML文档而设计的。所有基于HTTP的
4关于本书 论,询问技术问题,也可以从作者或者其他用户那里得到帮助。你可以使用以下地址访问或者订 阅这个论坛www.manning.com/Struts2 2inAction。这个页面解释了注册之后如何登录,可以得到哪 些帮助,以及论坛内的行为规范等。 Manning出版社许诺提供一个空间,让读者之间、读者和作者之间可以畅所欲言。Manning 不保证作者参与的程度,作者在这里的贡献是自愿的,并且是免费的。建议你询问作者一些有挑 战性的问题,让大家保持兴趣。 在这本书发行期间,作者在线论坛的最新内容和以前讨论的存档都是可以访问的。 关于书名 实战系列(In Action.)图书通过将一系列的入门介绍、概要、实例组织起来,帮助大家学习 并牢记。根据对认知科学的研究,通过自发地研究而获得的知识最容易被记住。 虽然Manning出版社的工作人员没有谁是认知科学专家,但是我们坚信要想学会并记住一样 东西,必须经历一些探索、使用的阶段,而且要回味自己学到了什么。人们在积极的探索之后才 能理解并记住新事物,也就是掌握它们。人类通过实战学习。实战系列图书的 一个本质的特点就 是示例驱动。它鼓励读者自己去尝试新事物,尝试新代码,尝试新想法。 采用这个书名还有另一个更为现实的理由:我们的读者都很忙。他们看书是为了完成一项 作,或者解决一个问题。他们期望书能够允许他们方便地跳着看他们想看的内容。他们期望书能 够帮他们在实战中成功。本系列中的图书就是为这些读者准备的。 关于封面图片 本书封面图片是波尔多野外一个牧羊人的造型,题为“Berger des Landes de Bordeaux”。波 尔多地区位于法国的西南部,有很多阳光明媚、适合葡萄生长的小山丘,而且有很多开阔的湿地, 其中零星地遍布者小农场和放牧的羊群。站在高跷上,牧羊人不但可以在沼泽中行走,而且可以 及时地掌控羊群的方向。 这个封面图片来源于J.GSt.Saveur编写的一本法国旅行书,《旅行百科》(Encyclopedie des Voyages),1796年出版。在那时休闲旅游成为一个新生的社会现象,像这样的旅游指南非常流行, 并且把旅游者和在家的神游者引向法国的其他地方或者国外。 《旅行百科》中多样性的插图,生动地说明了200年前世界上城镇、地区之间的特点与个性。 这是一个通过大家的衣者习惯就可以把大家区分到不同地区的时代,哪怕他们之间只是相隔几十 英里。这本旅游指南活灵活现地反映出那个时代的隔离感和距离感,其实除了当今这个信息发达, 无处不联系的时期外,历史上的所有时期都存在若这种距离感。 从那以后,随着衣着习惯的改变,当时普遍存在的地域多样性已经逐渐消失。现在想从衣着 上区分来自五大洲的居民几乎是不可能的。正面地看这个变化,文化和视觉上的多样化被个人生 活的多样化所取代,我们正在享受一个多样化而有趣的知识和技术生活。 Manning出版社选择两个世纪以前的插图作为封面,来为富有创意、进取精神和有趣的计算 机行业喝彩,同时这个插图也让久远的生活多样性重现在我们眼前
目 录 第一部分Strut2:一个全新的框架 3.2打包动作 39 第1章Sus2:现代Web框架 3.21 Struts2公文包示倒应用程序…39 3.2.2组织你的包 *…39 11Wcb应用程序:快速学习 3.2.3使用struts-default 1.1.1 构建Web应用程月 …2 包中的组 .41 112基出技术简介 3 33实现动作 “43 113深入研密… 6 3.3.1可选的Act10n接口44 12Web应用程序框架 …7 3.3.2 Actions pport类 .45 12.】什么是框架 44…51 1.2.2为什么使用框架 34向对象传递数据… 34.1对象支持的JavaBean属性…52 1.3 Struts2框架 3.4.2 ModelDriven动作 …54 1.3.】Suts2简史 343城对象用作数据转移的潜在 1.3.2Suts2概览:MVC模式…10 危险 1.3.3 Struts2的工作原理 3.5案例研究:文件上传 …56 1.4小结 …14 3.5.1通过struts-.default包获 第2章初识Stus2 16 得内建的支持 2.1声明性架构… 16 3.5.2 fileUploa 拦藏器做什么…5S7 2.1.1两种配置… +16 3.53Sus2公文包示例代码研究…58 2.12声明架构的两种方式 17 3.6小结 44460 2.1.3智能默认值: 20 第4章使用拦截器追加工作流 -61 2.2简单的HelloWorld示例- +61 2.2.1 部署示例应用程序 20 4.1为什么要拦截请求 41理VC 61 2.2.2探索HelloWorld应用程序…24 4.12 从栏藏器受益 6 2.3使用注解的HelloWorld-…31 4.】3开发拦截器+44…64 2.4小结 33 42 拦截器的工作原理 .64 第二部分核心概念:动作、拦截器 4.2.l总指挥ActionInvocation 64 和类型转换 422t和何独发经黄六4**:6叫 67 第3章使用Struts2动作 36 4.3研究内建的Struts2拦截器 4.3.1 工具拦藏器 …67 3.1 Struts2动作简介 36 432数据转移拦截器: