深入全面阐释Struts 2的方方面面
《深入浅出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
---------------------------------------------------------------------------------------
1.诚邀合作: 如果您想翻译、写作或是推荐IT类图书,我们将竭诚为您提供最专业的服务平台。
2.联系我们: yuany@turingbook.com(E-Mail)
3.欢迎加入图灵社区与作译者、业内人士进行交流: