3 S TRUTS 详解 (1)
3.1.1  传统的Model 1和Model 2 (2)
3.1.2  MVC 及其优势 (3)
3.2  S TRUTS 概述 (4)
3.2.1  Struts 的起源 (4)
3.2.2  Struts 的体系结构 (4)
3.3  S TRUTS 的下载和安装 (5)
3.4  S TRUTS 入门 (6)
3.4.1  基本的MVC 示例 (6)
3.4.2  Struts 的基本示例 (13)
jsp帮助文档3.4.3  Struts 的流程 (16)
3.5  S TRUTS 的配置 (17)
3.5.1  配置ActionServlet (17)
3.5.2  配置ActionForm (19)
3.5.3  配置Action (20)
3.5.4  配置Forward (21)
3.6  S TRUTS 程序的国际化 (22)
3.6.1  Java 程序的国际化 (23)
3.6.2  Struts 的国际化 (26)
3.7  使用动态A CTION F ORM (30)
3.7.1  配置动态ActionForm (30)
3.7.2  使用动态ActionForm .............31    3.8  S TRUTS 的标签库.....................................32 3.8.1  使用Struts 标签的基本配置....32 3.8.2  使用html 标签库......................33 3.8.3  使用bean 标签库.....................35 3.8.4  使用logic 标签库..................42 3.9  S TRUTS 的数据校验.................................53 3.9.1  ActionForm 的代码校验.........54 3.9.2  Action 的代码校验...................57 3.9.3  结合commons-validator.jar 的校验...........................................................58 3.10  S TRUTS 的异常框架...............................66 3.11  几种常用的A CTION ..............................69 3.11.1  DispatchAction 及其子类......70 3.11.2  使用ForwardAction ..............74 3.11.3  使用IncludeAction ................74 3.11.4  使用SwitchAction ..................75 3.12  S TRUTS 的常见扩展方法.......................76 3.12.1  实现PlugIn 接口....................76 3.12.2  继承RequestProcessor ..........77 3.12.3  继承ActionServlet .................79 本章小结 (80)
3 Struts 详解
从实际应用开发的角度而言,Struts 应该是MVC 框架的第一选择。因为它具有稳定性,以及成熟的开发体和丰富的信息资源,保证了企业应用的稳定开发。经过长达六年的发展,Struts 已经成长为稳定、成熟的框架,并且是所有MVC 框架中应用最广的框架。
近来,WebWork 也加入到Struts 阵营,更提高了Struts 的竞争力。
如今,Struts 作为全世界第一个开源MVC 框架,具有高度的成熟性和广泛的项目应用,保证了其应用的稳定性。
3.1  MVC简介
MVC架构的核心思想是:将程序分成相对独立,而又能协同工作的三个部分。通过使用MVC架构,可以降低模块之间的耦合,提供应用的可扩展性。另外,MVC的每个组件只关心组件内的逻辑,不应与其他组件的逻辑混合。
MVC并不是Java所独有的概念,而是面向对象程序都应该遵守的设计理念。
3.1.1传统的Model 1和Model 2
在JSP技术的发展初期,由于它便于掌握,以及可以快速开发的优点,很快就成了创建Web站点的热门技术。在早期的很多Web应用里,整个应用主要由JSP页面组成,辅以少量JavaBean来完成特定的
重复操作。在这一时期,JSP页面同时完成显示业务逻辑和流程控制。因此,开发效率非常高。
这种以JSP为主的开发模型就是Model 1。其应用具体的实现方法如图3.1所示。
Application Server Enterprise Servers/Data Sources
图3.1  Model 1模型图
在Model 1中,JSP页面接收处理客户端请求,对请求处理后直接作出响应。其间可以辅以JavaBean处理相关业务逻辑。
Model 1这种模式的实现比较简单,适用于快速开发小规模项目。但从工程化的角度看,它的局限性非常明显:JSP页面身兼View和Controller两种角,将控制逻辑和表现逻辑混杂在一起,从而导致代码的重用性非常低,增加了应用的扩展性和维护的难度。
Model 2已经是基于MVC架构的设计模式。在Model 2架构中,Servlet作为前端控制器,负责接收客户端发送的请求,在Servlet中只包含控制逻辑和简单的前端处理;然后,调用后端JavaBean来完成实际的逻辑处理;最后,转发到相应的JSP页面处理显示逻辑。其具体的实现方式如图3.2所示。
由于引入了MVC模式,使Model 2具有组件化的特点,更适用于大规模应用的开发,但也增加了应用开发的复杂程度。原本需要一个简单的JSP页面就能实现的应用,在Model 2中被分解成多个协同工作的部分,则需花更多时间才能真正掌握其设计和实现过程。
Data Sourees
图3.2  Model 2模型图
3.1.2MVC及其优势
MVC是Model、View、Controller三个词的缩写,三个词分别代表应用的三个组成部分:模型、视图与控制器。三个部分以最少的耦合,协同工作,从而提高应用的可扩展性及可维护性。
起初,MVC模式是针对相同的数据需要不同显示的应用而设计的,其整体的效果
如图3.3所示。
在经典的MVC模式中,事件由控制器处理,控制器根据事件的类型改变模型或视
图,反之亦然。具体地说,模型维护一个视图列表,这些视图为获得模型变化通知,通
常采用观察者模式登记给模型。当模型发生改变时,模型向所有登记过的视图发送通知;
接下来,视图从对应的模型中获得信息,然后更新自己。
概括起来,MVC有如下特点。
y多个视图可以对应一个模型。按MVC设计模式,一个模型对应多个视图,可以减少代码的复制及代码的维护量,一旦模型发生改变,也易于维护。
y模型返回的数据与显示逻辑分离。模型数据可以应用任何的显示技术,例如使用
JSP 页面、Velocity 模板或者直接产生Excel 文档等。
y  应用被分隔为三层,降低了各层之间的耦合,提供了应用的可扩展性。
y  控制层的概念也很有效,由于它把不同的模型和不同的视图组合在一起,完成不同的请求。因此,控制层可以说是包含了用户请求权限的概念。
y  MVC 更符合软件工程化管理的精神。不同的层各司其职,每一层的组件具有相同的特征,有利于通过工程化和工具化产生管理程序代码。
3.2  Struts 概述
随着MVC 模式的广泛使用,催生了MVC 框架的产生。在所有的MVC 框架中,出现最早,应用最广的就是Struts 框架。
3.2.1  Struts 的起源
Struts 是Apache 软件基金组织Jakarta 项目的一个子项目,Struts 的前身是Craig R.McClanahan 编写的JSP Model 2架构。
Struts 在英文中是“支架、支撑”的意思,这表明了Struts 在Web 应用开发中的巨大作用,采用Struts 可以更好地遵循MVC 模式。此外,Struts 提供了一套完备的规范,以及基础类库,可以充分利用JSP/Servlet 的优点,减轻程序员的工作量,具有很强的可扩展性。
Struts 1.0版本于2001年6月发布,目前最新的版本是此Struts1.2.9。Struts 的作者Craig R.McClanahan 参与了JSP 规范制定以及Tomcat 4的开发,同时还领导制定了J2EE 平台的Web 层架构的规范。受此影响,Struts 框架一经推出,立即引起了Java 开发者的广泛兴趣,并在全世界推广开
来,最终成为世界上应用最广泛的MVC 框架。
3.2.2  Struts 的体系结构
Struts 作为MVC 模式的典型实现,对Model 、View 和Controller 都提供了对应的实现组件,其具体的实现如图3.4所示。
HTTP Request ActionServlet Dispatch Action
Model JSP Get HTTP Response l
invoke
Client 图3.4  Struts 框架结构图
下面结合该图对Struts架构的工作原理简单介绍。
1.Model部分
Struts的Model部分由ActionForm和JavaBean组成。其中ActionForm用于封装用户请求参数,所有的用户请求参数由系统自动封装成ActionForm对象;该对象被ActionServlet转发给Action;然后Action根据ActionForm里的请求参数处理用户请求。
而JavaBean则封装了底层的业务逻辑,包括数据库访问等。在更复杂的应用中,JavaBean所代表的绝非一个简单的JavaBean,可能是EJB组件或者其他的业务逻辑组件。该Model对应图3.4的Model部分。
2.View部分
Struts的View部分采用JSP实现。Struts提供了丰富的标签库,通过这些标签库可以最大限度地减少脚本的使用。这些自定义的标签库可以实现与Model的有效交互,并增加了显示功能。对应图3.4的JSP部分。
整个应用由客户端请求驱动,当客户端请求被ActionServlet拦截时,ActionServlet 根据请求决定是否需要调用Model处理用户请求,当用户请求处理完成后,其处理结果通过JSP呈现给用户。
3.Controller部分
Struts的Controller由两个部分组成。
y系统核心控制器
y业务逻辑控制器
其中,系统核心控制器对应图3.4中的ActionServlet。该控制器由Struts框架提供,继承HttpServlet类,因此可以配置成一个标准的Servlet。该控制器负责拦截所有HTTP 请求,然后根据用户请求决定是否需要调用业务逻辑控制器,如果需要调用业务逻辑控制器,则将请求转发给Action处理,否则直接转向请求的JSP页面。
业务逻辑控制器负责处理用户请求,但业务逻辑控制器本身并不具有处理能力,而是调用Model来完成处理。业务逻辑控制器对应图3.4中的Action部分。
3.3  Struts的下载和安装
Struts目前的最新版本是1.2.9,笔者所有的代码都基于该版本运行通过,建议读者也下载该版本。下载和安装Struts请按如下步骤进行。
(1)在浏览器的地址栏输入mirror.vmmatrix/apache/struts/binaries/struts- 1.2.9- bin.zip,下载Struts1.2.9。
(2)将下载到zip文件解压缩,解压缩后有如下文件结构。
y contrib:包含了Struts表达式的依赖类库,如JSTL等类库。
y lib:包含Struts的核心类库,Struts自定义标签库文件以及数据校验的规则文件等。该文件夹下的文件是Struts的核心部分。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。