《深入浅出 Struts 2》
一、 Struts概述
Struts是一个用来开发 Model 2应用程序的框架。这个框架可以提高开发工作的速度,因为它提供的下面这些功能解决了 Web应用程序开发过程中的一些常见问题:
- 对页面导航活动进行管理;
- 对来自用户的输入数据进行合法性验证;
- 统一的布局;
- 可扩展性;
- 国际化和本地化;
- 支持 Ajax技术。
因为 Struts是一个 Model 2框架,所以在使用 Struts时还应该遵守以下几条不成文的规定。
- 不要在 JSP页面里嵌入 Java代码,应该把所有的业务逻辑包含在一些被称为“动作类”( action class)的 Java类里。
- 在 JSP页面里使用 Expression Language( OGNL)去访问有关的模型对象。
- 尽量避免编写自定义标签(因为自定义标签的代码比较难以编写)。
二、升级到 Struts 2
你也许用过 Struts 1编程,这里提供了一个关于 Struts 2 新功能的简要介绍。
- 在 Struts 1里需要使用一个像 ActionServlet 类这样的东西作为 servlet控制器; Struct 2使用了一个过滤器来完成同样的任务。
- 在 Struts 2里没有任何动作表单。在 Struts 1里,每个 HTML表单都对应着一个 ActionForm 实例,你可以从动作类访问这个动作表单,并用它来填充数据传输对象。在 Struts 2 里, HTML表单将被直接映射为一个 POJO,而不再需要你创建一个数据传输对象,因为没有动作表单,维护工作变得简单容易了,你不再需要与那么多的类打交道。
- 问题来了:没有了动作表单,怎样才能在 Struts 2里通过编程对用户输入进行合法性验证呢?答案是把验证逻辑编写在动作类里。
- Struts 1通过几个标签库提供了一批定制标签供程序员在 JSP页面里使用,其中最重要的是 HTML标签库、 Bean标签库和 Logic标签库。 Servlet 2.4里的 JSTL和 EL( Expression Language ,表达式语言)经常被用来代替 Bean和 Logic标签库。 Struts 2为程序员准备了一个应有尽有的标签库,你不再需要 JSTL,但在某些场合你可能仍需要 EL。
- 在 Struts 1里,你还需要用到一些 Struts配置文件,其中最主要的是存放在各 Web应用程序里的 WEB-INF子目录里的 struts-config.xml(默认文件名)。在 Struts 2里,你仍需要用到多个配置文件,但必须把它们存放在 WEB-INF/classes子目录或它的某个下级子目录里。
- 要想使用 Struts 2 ,你的系统里必须有 Java 5 和 Servlet 2.4 (或更高版本)。之所以需要有 Java 5,是因为 Java 5里新增加的注解在 Struts 2里扮演着重要角色。我们撰写本书时, Java 6已经发布, Java 7也指日可待,你很可能已经在使用 Java 5或 Java 6了。
- 在 Struts 1 里,动作类必须扩展自 org.apache.struts.action.Action 类。在 Struts 2 里,任何一个 POJO 都可以是一个动作类。不过,我们将在本书第 3 章说明,在 Struts 2 里最好对 ActionSupport 类进行扩展。在此基础上,可用一个动作类来完成相关的动作。
- Struts 2在 JSP页面里使用 OGNL来显示各种对象模型,而不再是 JSP EL和 JSTL。
- 原本是 Struts 1组件之一的 Tiles现在已经发展为一个独立的 Apache项目。它在 Struts 2里仍可以作为一个插件使用。
三、本书各章内容概述
本书的目标读者是那些希望学习开发 Struts应用程序的人。不过,我们并不只是介绍如何开发,我们还会花一些篇幅介绍编写高效 Struts应用程序的方法。为了使本书名副其实,我们在编写本书时一直力求做到清晰易懂、可读性强。
下面是本书各章内容的概述。
第 1章: Model 2应用程序
该章对 Model 2模型的体系结构进行解释,并提供了两个 Model 2应用程序示例,其中一个使用的是 servlet控制器,另一个使用的是过滤器调度程序。
第 2章:初识 Struts
该章对 Struts进行了简要的介绍。我们将学习 Struts框架的各主要组件和如何配置 Struts应用程序。
第 3章:动作与结果
Struts解决了 Web应用程序开发工作中的许多常见问题,如页面导航、输入验证等。因此,你可以把精力集中在最重要的开发任务上:在各个动作类里编写各种业务逻辑。这一章将介绍怎样才能编写出高效的动作类,还有其他相关主题,如默认结果类型、全局异常映射、通配符映射、动态方法的调用技巧等。
第 4章: OGNL
该章对用来访问各种动作对象和页面内容对象的 OGNL(一种表达式语言)进行讨论。 OGNL是一种功能强大又易于使用的语言。除了访问各种对象, OGNL还可以用来创建各种列表和映射关系。
第 5章:表单标签
Struts自带了一个标签库来提供 UI标签和非 UI标签(通用标签)。这一章将介绍表单标签,它们是一些用来输入表单数据的标签。你将了解使用这些标签的好处以及如何使用每一种标签。
第 6章:通用标签
该章对非 UI标签进行解释。非 UI标签分为两大类:控制标签和数据标签。
第 7章:类型转换
HTTP没有“类型”的概念,在 HTTP请求里发送的值都是字符串。在把表单字段映射到非 String 类型的动作属性时, Struts会自动对这些值进行必要的转换。这一章将解释 Struts如何完成这类转换,你还将学到如何为更加复杂的情况(当 Struts 2内建的转换器帮不上忙时)编写你自己的转换器。
第 8章:输入验证
该章对输入数据进行验证的细节进行探讨。
第 9章:消息处理与国际化
该章讨论消息的处理问题,这也是应用程序在开发过程中最重要的任务之一。发展到现在,能够显示国际化和本地化的消息已逐渐成为应用程序必须具备的一项功能。 Struts 2从研发之初就已经考虑到了国际化和本地化的问题。
第 10章 : Model Driven和 Preparable拦截器
该章对两种用来把动作和模型分离开来的重要的拦截器进行讨论。你将发现有许多动作都需要这些拦截器。
第 11章:持久层
该章研究存储各种数值对象所需要的持久层。持久层可以让它的客户(就本书讨论的问题而言,持久层的客户主要是有关的 Struts动作对象)无需关心访问数据库时的复杂性。持久层可以实现为 entity bean、 DAO( Data Access Object,数据访问对象)模式,或者是使用 Hibernate等。这一章将详细演示如何实现 DAO模式。这类模式有许多种变体,你可以根据有关项目的具体情况和要求进行选择。
第 12章:文件的上传
该章对现有的 Web编程图书普遍没有给予足够重视的一个重要问题进行了讨论。 Struts通过与 Jakarta Commons FileUpload 库的无缝集成来支持文件上传操作。本章将讨论如何在 Struts框架下实现这个编程任务。
第 13章:文件的下载
该章讨论文件的下载问题,并演示如何把二进制数据流发送给浏览器。
第 14章:提高 Struts应用程序的安全性
你将在这一章学习如何配置部署描述文件,才能对应用软件里的部分或全体资源的访问操作做出限制。“配置”在这里的含义是,你只需要修改部署描述文件,不需要进行任何编程。此外,你还将学到如何在 Struts配置文件里使用 action 元素的 roles 属性。这一章还将介绍一些如何编写 Java代码来保护 Web应用程序的技巧。
第 15章:防止重复提交
该章解释了如何利用 Struts的内建功能防止用户重复提交请求。重复提交有时是由于用户的错误操作,有时是因为表单处理时间过长而让用户不知如何是好。
第 16章:调试与性能分析
Struts应用程序的调试工作很容易进行。这一章将讨论怎样才能用好这个功能。
第 17章:进度条
这一章介绍 Execute和 Wait两个拦截器,它们可以用来为那些响应时间比较长的任务提供一个进度条。
第 18章:定制拦截器
这一章介绍如何编写你自己的拦截器。
第 19章:定制结果类型
Struts支持各种各样的结果类型,我们甚至可以自行编写出各种新的类型。这一章将演示怎样才能做到这一点。
第 20章 : Velocity
Velocity是一种比较流行的模板语言,这一章简要介绍 Velocity以及如何用它来代替 JSP。
第 21章 : FreeMarker
这一章简单介绍 Struts里默认使用的模板语言 FreeMarker。
第 22章 : XSLT结果类型
该章讨论 XSLT结果类型以及如何把 XML转换为另一种 XML、 XHTML或其他格式。
第 23章:插件
该章讨论如何把 Struts模块打包成插件,这可以让它们更便于发行和传播。
第 24章: Tiles插件
该章简要介绍 Tiles 2。 Tiles是一个开源项目,主要用于对 Web页面进行布局。
第 25章 : JFreeChart插件
该章讨论如何使用流行的 JFreeChart插件轻松地创建 Web图表。
第 26章 : 零配置
该章解释怎样才能开发出一个不需要配置的 Struts应用程序,以及 CodeBehind插件是如何使这个功能更加强大的。
第 27章: Ajax
Ajax技术是 Web 2.0的精髓所在,随着时间的推移,它正变得越来越流行。这一章将介绍 Struts框架为 Ajax技术提供的支持,并解释如何使用 Ajax定制标签来构建 Ajax组件。
附录 A: Struts配置
附录 A提供了一个关于如何编写 Struts配置文件的指南。
附录 B: JSP EL语言
当 OGNL语言和 Struts定制标签无法提供最佳的解决方案时,这种语言也许可以帮上大忙。
附录 C: Java注解
附录 C对 Java 5里的这个新功能进行讨论,这个功能在 Struts里用途很广。
四、系统最低配置要求和文件下载途径
要想使用 Struts 2,你的系统至少需要安装 Java 5 、 Servlet 2.4和 JSP 2.0。这本书里的所有示例程序都基于 Servlet 2.5 ,它目前是 Servlet的最新版本(在我撰写本书时, Servlet 3.0正处于草稿阶段)。你需要 Tomcat 5.5 或更高版本;如果选用其他的 Java EE容器,它们必须能够支持 Servlet 2.4或更高版本。
Struts的源代码发行版本和二进制发行版本可以从以下地址下载:
http://struts.apache.org/downloads.html
有多种不同的 ZIP文件可供下载。 struts-VERSION -all.zip文件(其中的 VERSION 是 Struts的版本号)包括了所有的库、源代码和样板程序,其长度大概有 86 MB;如果你有足够的带宽,我建议你下载这个文件。如果你的带宽不足,那就试试 struts-VERSION -lib.zip文件好了(只有 4 MB左右),该文件只打包了必要的库。
选择并下载了某个 ZIP文件之后,将它解压缩。你将发现 lib子目录会多出几十个 JAR文件。属于 Struts 2的 JAR文件的名字都以“ struts2”开头。在每一个 Struts JAR文件的名字里都包含版本信息。例如, core库被打包在 struts2-core-VERSION .jar文件里, VERSION 部分给出了相应的主版本号和次版本号。以 Struts 2.1.0为例,它的核心库的文件名是 struts2-core-2.1.0.jar。
要想使用 Struts,还需要安装一些来自其他项目的库文件。常用的 JAR文件来自 Apache Jakarta Common项目。你的系统里必须有这些常用的 JAR文件。此外, ognl-VERSION .jar文件包含 OGNL引擎,这是一个重要的必备品。 freemarker-VERSION .jar文件包含 FreeMarker模板引擎。即使你选用 JSP作为页面显示技术, FreeMarker模板引擎也是必需的,这是因为 FreeMarker是 Struts定制标签的配套模板语言。 xwork-VERSION .jar文件包含 XWork,而 Struts 2就建立在这个框架的基础上,千万不要忘记把这个 JAR文件安装上。
那些包含各种插件的 JAR文件不是必不可少的。它们的文件名都有着如下所示的格式:
struts2-xxx -plugin-VERSION .jar
其中的 xxx 是插件的名字。例如, Tiles插件被打包在 struts2-tiles-plugin-VERSION .jar文件里。
如果你的应用程序没有用到 Tiles插件所提供的功能,就不需要安装与 Tiles插件有关的 JAR文件。
五、样板程序
这本书里的所有示例程序代码都可以从图灵网站 www.turingbook.com本书网页免费注册下载。
这些示例程序的组成文件都按以下格式命名:
appXXy
其中 XX 是一个用两位数表示的章节数, y 代表那个示例程序对应那一章里的第几个示例程序。例如,第 1章里的第 2个示例程序的文件名是 app01b。
本书中的所有示例已经在 Tomcat 6环境下通过了测试。在我们的机器上,它们都运行在 8080号端口上。因此,所有的示例程序都需要这样启动:先写出 http://localhost:8080,然后写出示例程序的名字和相关 servlet的路径。
本书相关信息: http://www.cnblogs.com/turingbooks/archive/2009/04/03/1428711.html