TURING 图灵程序设计丛书 Java系列 MANMING Struts 2 in Action Struts 2 实战 Donald Brown [美]Chad Michael Davis ScottStanlick 马召等译 人民邮电出版社 POSTS & TELECOM PRESS
译者序 我从2002年开始接触Java。虽然Java是我选修的一门课程,但是当第一次看到Java简洁语法 背后的强大功能时,我就被它深深地吸引了。而真正认识Java Web开发是在2003年。那年暑假 我找了一份不错的兼职工作,为国内某一大型企业开发后台管理系统。记得当时使用的是 WebLogic Portal7,主要的开发方式是前台JSP调用后台的EB。正好有一个从美国工作回来的“大 虾”负责带我,我从他那里第一次听说了Struts、.Spring、Hibernate等 一系列的开源技术,于是开 始了对这些技术的研究。可惜的是,毕业之后我没有选择进入那家公司工作,也就失去了向那位 “大虾”继续学习的机会,现在回想起来还蛮后悔的 时间一晃到了2007年,我已经工作了3年,工作经验的丰富和对技术的热爱让我终于决定要写 一本技术书,同时也为开源社区做一些贡献。在这3年中,我一直从Suts中受益,但是也饱受Suts 的煎熬。清晰的MVC框架 、JSP文件的逻辑命名、功能强大的SP标签都让我备感轻松,同时 FormBea即与域对象的重复、烦琐的配置文件、机械的开发方式也让我吃够了苦头。当时正好 WebWork与Struts结合的产物Struts2也开始成熟起来,在我肤浅地研究这些内容之后,就决定开始写 本关于Struts2的书,这也正是我的博客htp:blog.csdn.net/struts2产生的直接原因。从2007年7月30 日第一篇文章开始到现在,我的博客已经累计了几十篇文章,其中有些是从Sus2宫方网站直接翻 译过来的内容,有些是自己工作经验的总结,但是每一篇文章都凝聚了我对Suts2的热爱与推崇。 2008年6月11日 我收到了人民邮电出版社图灵公司编辑傅志红女士的一封来信,问我是否 愿意翻译Manning出版社久负盛名的in Action.系列的图书之一Snu2 in Action 我高兴都来不及 怎么能不愿意呢?于是在简短的过程性事务之后,我就正式开始了本书的翻译,同时也放弃了自 己写书的想法。这本书写得这么好,我为什么还要班门弄斧呢?能够翻译出来让喜欢Struts2的读 者一起分享,我已经很满足了。此后的无数个深夜,这个世界上就又多了 盏昏暗的灯和 一颗澎 湃的心。也正是经历了这本书的翻译历程,我才知道翻译一本书远比想象的要辛苦。但是毕竟我 是第一次翻译技术书籍,英语基础又不是很好,所以其中肯定会有错误或者不合适的地方,还请 大家多多谅解,多多指点。大家可以上我的博客直接评论。非常感谢大家能够阅读本书,相信本 书一定能够让大家深入了解Struts2。 本书的中文版本能够出版要非常感谢以下人员 口那位“大虾”,出于个人隐私的原因,我没有说明他是谁,但是如果“大虾”看到的话。 他肯定会知道的。如果没有他带我迈进ava的门槛,或许我现在还在门外徘徊。 口我可爱的媳妇儿,她通读了全书,找出了很多明显的错误和不合适的表述。 口我所就职的公司以及各位领导和同事,是他们给了我学习和成长的机会。 马召
前 言 2006年年中,我开始做一个新项目。由于这是一个我自己公司开发的项目,所以我很高兴可 以自己来选择所用的技术。之前,我一直在使用Suts1,这个框架让我坚信没有框架就无法工作, 但是我却不再认为这个框架是最好的选择。对于这个新项目来说,我想选用一个新的、第二代的 Web应用程序开发框架 老实说,我也想不起来当时为什么选择了Struts2。我记得也曾经考虑过使用Spring的MVC 框架,但是,肯定有些什么原因使我最终选择了Struts2。大概是因为我判断这个项目会更需要 Struts2,所以选择了它。至少,最初这个决定并未令我充满激情。但实际开发之后,我简直不能 相信这个框架的功能竟然如此强大。这个框架是对软件工程领域的一个完美贡献,把架构的组件 化和灵活性推向新的高度,并且积极主动接受其他技术的发展成果。虽然很多人喜欢比较不同的 开发框架,争辩到底哪个框架最好。但是我认为,任何一个强有力的竞争者都会很快地吸收其他 技术的长处。Struts2所遵循的“约定优于配置”的原则正好印证了上述观点。 那年底,我已经完全被Struts2吸引了。正好那个时候Manning出版社联系我,问我是否愿意 和Don Brown-一起为他们的实战系列(In Action)写一本Struts2方面的书。虽然来年的工作非常 忙,但是,正像他们说的那样,我不能拒绝这个机会。我很荣幸能够跟Do合作,而且能够向他 讨教关于Struts2的技术细节本身就是一件乐事。单凭这点我参与写作就非常值得了。 最初的计划是重写Patrick Lightbody和Jason Carreira合著的形eb形%ork In Action。你应该知道 Struts2的核心架构直接来源于WebWork。在还没有任何介绍Struts2的书籍时,很多开发人员,也 包括我,都通过那本书来学习Struts2。当我们开始写本书时,由于有高度活跃的社区的支持,Struts 2已经远远地超越了WebWork.这个核心。最终,我们写出了一本全新的关于Struts2的书。尽管如 此,由于是通过阅读We形b%ork In Action学习Struts2的,因此我对那本书满怀敬意 从那以后,时光飞逝。在接下来的一年中,我们抽出大量时间写书,修订,从审稿人和Manning 新书预读项目参与者中收集反馈,之后从头再来。到了后来,我们发现如果得不到某些帮助,将 永远也完成不了这本书。我们很幸运地找到了Scott Stanlick,他是Struts2强有力的倡导者和积极 分子,帮助我们完成了非常重要的几章。最终,我们完成了这个写作计划。 现在书写完了,就在你手里。好好享受吧。我希望我们为之付出了辛勤汗水的书能够帮你轻 松地进入Struts2的世界。请登录Manning出版社的作者在线论坛给我们反馈信息,并与整个社区 分享你的见解。 Chad Davis
致 谢 我们非常感谢在摆写这本书的过程中所有做出重大贡献的人。首先,如果没有Manning出版 社的Jackie Carter、Michael Stephens和Marjan Bace,这本书根本不会开始。其次,本书所表现出 来的连贯性和一致性要归功于开发编辑Cynthia Kane。我们也非常感谢Benjamin Berg、Dottie Marsico、Mary Piergies、Karen Tegtmeyer、Katie Tennant、Anna Welles,,以及所有Manning出版社 的其他工作人员,他们的贡献不太为人所知。 我们还要感谢那些花费了大量的时间阅读原稿,并从中挑出了所有的问题的开发人员。尤其 要感谢的是技术审稿人Wes Wannemacher,,在印刷之前,他最后审阅了一遍原稿。以下审稿人的 宝贵建议使得本书得以从初稿变为值得大家花费时间和金钱的图书,他们是:Christopher Schultz Jeff Cunningham、Rick Evans、Joseph Hoover、Riccardo Audano、Matthew Payne、Bill Fly、Nhoel Sangalang、Matt Michalak、Jason Kolter、.Patrick Steger、.Kiryl Martsinkevich、.Maggie Niemann Patrick Dennis、Horaci Macias Viel、.Tony Niemann、Peter Pavlovich、Andrew Shannon、Bas Vodde 和Wahid Sadik。 最后,我们诚挚地感谢那些参加Manning新书预读项目的读者,特别是在作者在线论坛上留 下反馈意见的读者,他们的参与极大地提高了本书的最终质量。 我们非常感谢Matthew Lindsey,他提供了文本资源的西班牙语翻译 谢谢大家 Donald Brown 这本书最初始于Struts in Action,Second Edition,我们准备在Ted Husted编写的非常畅销的第 一版基础上追加一些新的内容,由普就职于Manning出版社的天才编辑Jackie Carter负责,合著者 是值得信赖的Nick Heudecker。当书都快写完三分之二的时候,我向编辑忐忑不安地承认我已经 开始使用Struts2了。不用说,很快会过时的内容被废止了,于是开始了这个新计划。主题变了, 我们也迎来了一位大家强烈推荐的新合作者Chad Davis,他后来一次又一次证明了他的价值。为 了帮助我们尽快地出版这本书,精力充沛的Scott Stanlick也加入了进来,而且推动事情顺利进展 非常感谢我们的开发编辑和产品团队,他们的一丝不苟和无私奉献给我留下了深刻印象。 如果没有Struts和WebWork社区的辛勤工作,就不会有Struts2的今天。这是开源领域中少有 的合作产物之一。它的成功是两个社区品质的见证。由衷地感谢这个项目的创始人CigR McClanahan (Struts).Richard Oberg (WebWork 1).Jason CarreiraPatrick Lightbody (WebWork 2),感谢他们的远见卓识和对这项事业的执著推动。当开始将Web Work2的代码整合进Apach
2致谢 Struts2时,Web Work的核心开发人员Rene Gielen、Rainer Hermanns、TobyJee、Alexandru Popescu. lan Roughley,还有Jason和Patrick,花费了大量的时间成功开发了Struts2。非常感谢让人信赖的 Struts开发人员Ted Husted、Martin Cooper、.James Mitchell、Niall Pemberton、Laurie Harper、Paul Benedict和Wendy Smoak,他们在整合过程中发挥了作用。从那以后,BobLee、Musachy Barroso, Antonio Petrelli、Nils_Helge Garli、.Philip Luppens、Tom Schneider、.Matt Raible、Dave Newton. Brian Pontarelli、Wes Wannemacher和Jeromy Evans等社区贡献者继续推动着Struts2的发展。他们 开发了一系列的关键特性,例如插件系统、Portlet支持、基于约定的配置,以及很多集成插件。 最后,我个人非常感谢我的妻子也是最好的朋友Juli,以及我快乐的源泉一我的儿子 Mkoa。非常感谢我的父母培养了我持续挑战自我并且保持心态平和的性格。非常感谢BAE系统 公司的Rudy Rania、Atlassian公司的合作创始人Mike Cannon-Brooks和Scott Farquhar,.感谢他们对 开源项目的支持,以及对我参与Struts的支持。非常感谢Apache软件基金会所有伟大的志愿者 谢谢Struts开源社区。 Chad Davis 首先感谢我的凄子Mry,过去的一年中她一个人工作,独立支撑着整个家庭。我也非常感 Coskun Bayrak博士,他在几年前就不断提议要我把写作技巧与计算机知识结合起来。我也非常 感谢我的父母,他们让我相信我能够完成所有的事情。最后我非常感谢Don Brown和Scot Stanlick,他们是如此好的合作伙伴,期待着与他们见上一面。 Scott Stanlick 我要感谢以下这些人,他们帮助我获得提写本书的机会、忍耐写书的过程,并且最终完成本书, 非常感谢享有盛名的Ted Husted,他推荐我参与编写本书,非常感谢Manning出版社的编辑 Michael Stephens,是他牵线搭桥才有了这次合作 感谢Cynthia Kane和Chad Davis的帮助,让我能够使用Gmail最大的免费空间。即便是站在警 察局抓来的一排嫌疑犯里你都不会指认出的人,却可以因种种机缘巧合去认识了解,这是多么地 有意思。当然,我这么说并不是指他们有任何法律上的纠葛。 感谢邮件列表上的很多人,例如Davc(d)、Laurie、Wes,帮我解决了很多我没有说清楚的代 码问题。 非常感谢我的妻子Jamie Kay,当我为本书每天泡在办公室里写作、咒骂和编码的时候,她 总是鼓励我,并且让我在晚间和周末张弛有度。她安静地照顾着所有的一切,从来没有过一句怨 言。每次我觉得狂躁的时候,Norah Jones、Neil Young以及Sheryl Crow.总能让我理智起来。54街 的烧烤酒吧给我提供了美酒和自助烧烤作为我的夜宵。多少个夜晚,当我在书房写作时,远在天 堂的慈父让我感受到温暖的亲情。那些极好的日本橡木鼓槌在我击鼓宣泄的打鼓疗法中也能够经 久耐用。虽然我一年都没有跟那些好朋友联系了,但是他们还是很理解我。星巴克的咖啡和红牛 饮料让我坚持了下来。还有止疼药、Google、必胜客,以及为了开始使用Struts2而正在读这本书 的你。我希望你在使用Struts2的过程中能更加地顺手,并且能够开始慢慢地享受Struts2
关于本书 欢迎来到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数据转移拦截器: