Struts框架详解
1、Struts应⽤框架介绍
(1)框架
框架最简单的形式是指已开发过并已测试过的软件的程序块,这些程序块可以在多个软件开发⼯程中重⽤。框架提供了⼀个概括的体系结构模版,可以⽤这个模板来构建特定领域中的应⽤程序。
Framework概念并不是很新了,伴随着软件开发的发展,在多层的软件开发项⽬中,可重⽤、易扩展的,⽽且是经过良好测试的软件组件,越来越为⼈们所青睐。这意味着⼈们可以将充裕的时间⽤来分析、构建业务逻辑的应⽤上,⽽⾮繁杂的代码⼯程。
于是⼈们将相同类型问题的解决途径进⾏抽象,抽取成⼀个应⽤框架。这也就是我们所说的Framework。Framework的体系提供了⼀套明确机制,从⽽让开发⼈员很容易的扩展和控制整个framework开发上的结构。
(2)为什么会出现应⽤框架
您只要细⼼地研究真实的应⽤程序,就会发现程序⼤致上由两类性质不同的组件组成,⼀类与程序要处理的具体事务密切相关,我们不妨把它们叫做业务组件;另⼀类是应⽤服务。
⽐如说:⼀个税务征管系统和⼀个图书管理系统会在处理它们的业务⽅⾯存在很⼤的差异,这些直接处理业务的组件由于业务性质的不同不⼤可能在不同的系统中重⽤,⽽另⼀些组件如决定程序流向的控制、输⼊的校验、错误处理及标签库等这些只与程序相关的组件在不同的系统中可以很好地得到重⽤。
⼈们⾃然会想要是把这些在不同应⽤程序中有共性的⼀些东西抽取出来,做成⼀个半成品程序,这样的半成品就是所谓的程序框架,再做⼀个新的东西时就不必⽩⼿起家,⽽是可以在这个基础上开始搭建。实际上,有些⼤型软件企业选择⾃⼰搭建这样的框架。
(3)为什么要⽤框架?
因为软件系统发展到今天已经很复杂了,特别是服务器端软件,设计到的知识,内容,问题太多。在某些⽅⾯使⽤别⼈成熟的框架,就相当于让别⼈帮你完成⼀些基础⼯作,你只需要集中精⼒完成系统的业务逻辑设计。⽽且框架⼀般是成熟,稳健的,他可以处理系统很多细节问题,⽐如,事物处理,安全性,数据流控制等问题。还有框架⼀般都经过很多⼈使⽤,所以结构很好,所以扩展性也很好,⽽且它是不断升级的,你可以直接享受别⼈升级代码带来的好处。
框架⼀般处在低层应⽤平台(如J2EE)和⾼层业务逻辑之间的中间层。
(3)Struts Web应⽤框架
Struts 是 Apache 软件基⾦会(Apache Software Foundation)资助的⼀个为开发基于MVC模式应⽤架构的开源框架,是利⽤Java Servlet 和JSP、XML等⽅⾯的技术来实现构建Web应⽤的⼀项⾮常有⽤的技术,它也是基于MVC模式的Web应⽤最经典框架。
Struts框架的主要架构设计和开发者是Craig R.McClanahan。Struts 是⽬前Java Web MVC框架中不争的王者。经过长达五年的发展,Struts 已经逐渐成长为⼀个稳定、成熟的框架,并且占有了MVC框架中最⼤的市场份额。
Struts把Servlet、JSP、⾃定义标签和信息资源(message resources)整合到⼀个统⼀的框架中,主要由⼀系列的框架类、辅助类和定制的JSP标记库构成。开发⼈员利⽤其进⾏开发时不⽤再⾃⼰编码实现全套MVC模式,极⼤的节省了时间。
2、框架的组成
⼀个设计良好的框架⼀般分为三层:
(1)接⼝层
这⼀层要尽量使⽤interface,在这⼀层中你要考虑到你现在的、将来的可能⽀持的功能,但不需要去实现它,只定义到接⼝层次就可以了。如Struts中的插件接⼝PlugIn。
(2)抽象层
这⼀层要针对你当前的需求做定制,对你的需求中的通⽤逻辑做实现。这⼀层应该出现⼤量的抽象类。如Struts中的ActionServlet、Action 和ActionForm等类。
(3)实现层
不⽤说了,把前⾯两层没有做掉的事情在这⼀层都做了吧。如Struts中后台实现的各种功能
3、为什么要提出Struts
(1)背景
由于我们开发Web应⽤的复杂度随着系统的复杂度的要求越来越来复杂。特别是在代码重⽤,代码移植、代马可插扒等问题上出现了许多重复开发、维护困难等。从⽽提出了Struts开发框架。它的设计⽬的是从整体上减轻构造企业Web应⽤的负担,并提供国际化和数据库连接池⽀持。
Struts 是⼀组相互协作的类、servlet 和 JSP 标记,它们组成⼀个可重⽤的 MVC 2 设计。这个定义表⽰ Struts 是⼀个框架,⽽不是⼀个库,但 Struts 也包含了丰富的标记库和独⽴于该框架⼯作的实⽤程序类。
(2)采⽤Struts的优点
在实际开发中,MVC框架开发相当费时,Struts 实现了MVC这种框架,但⼜扩充了该MVC框架。这样使得系统的开发就像“填空”⼀样进⾏,相当快速。
l  采⽤Strust可以加快开发速度、增强系统的灵活性、降低系统的藕合性(因为它的三个应⽤层松散地耦合在⼀起)和易于系统的维护。
l  分⼯明确:业务层与表⽰层分开,使得管理⼈员可以在⼩组内分配责任。⽹页设计⼈员与JAVA程序员各司其职。
l  简化页⾯:使⽤标记,把逻辑处理的代码分离开来。
l  通过将问题划分为更⼩的组件,当技术空间或问题空间中出现变化时,您就有更多的机会重⽤代码。
(3)Struts的缺点
l  有限的适⽤范围:Struts 是⼀种基于 Web 的 MVC 解决⽅案,所以必须⽤ HTML、JSP ⽂件和 Servlet 来实现它。
l  J2EE 应⽤程序⽀持
l  复杂性:在将问题分为⼏个部分的同时也引⼊了复杂性(在强健性增强的同时,也意味着复杂性的增加)。
4、Struts压缩包内容
下载后的*.zip包⽂件包含两个⽬录,lib和webapps。在lib⽬录中有使⽤struts创建应⽤程序是所需的⽂件:
⽂件描述
jdbc2_0-stdext.jar包含JDBC2.0 Optional Package API类。如果我们要使⽤struts提供
的数据资源,就需要将这个⽂件拷贝到WEB-INF\lib下
Struts.jar包含struts中所有的java类。同样也需要拷贝到WEB-INF\lib下
*.tld标记库描述器⽂件,描述了多个struts标记库中的⾃定义标记。同样要
拷贝到WEB-INF\lib下
struts框架是干什么的在webapps⽬录下有如下⽂件:
Web应⽤程序描述
Struts-blank.war⼀个简单的web应⽤程序
Struts-documentation.war包含struts站点上所有struts⽂档
Struts-example.war Struts很多特性的⽰范
Struts-exercisetaglib.war主要⽤于对⾃定义标签库进⾏增加⽽使⽤的测试页,但也可以
⽰范如何使⽤struts标记
Struts-template.war包含struts模板标记的介绍和范例
Struts-upload.war⼀个简单的例⼦,⽰范如何使⽤struts框架上传⽂件
5、Struts的整体框架
(1)Struts框架的MVC组件结构图
在struts框架中,模型分为两个部分:系统的内部状态和可以改变状态的操作(事务逻辑)。内部状态通
常由⼀组ActinForm JavaBean表⽰。根据设计或应⽤程序复杂度的不同,这些Bean可以是⾃包含的并具有持续的状态,或只在需要时才获得数据(从某个数据库)。
⼤型应⽤程序通常在⽅法内部封装事务逻辑(操作),这些⽅法可以被拥有状态信息的bean调⽤。⽐如购物车bean,它拥有⽤户购买商品的信息,可能还有checkOut()⽅法⽤来检查⽤户的信⽤卡,并向仓库发定货信息。
⼩型程序中,操作可能会被内嵌在Action类,它是struts框架中控制器⾓⾊的⼀部分。当逻辑简单时这个⽅法很适合。建议⽤户将事务逻辑(要做什么)与Action类所扮演的⾓⾊(决定做什么)分开。
Struts为Model部分提供了Action和ActionForm两种Bean对象:所有的Action处理器对象都是开发者从Struts的Action类派⽣的⼦类。Action 处理器对象封装了具体的处理逻辑,调⽤业务逻辑模块,并且把响应提交到合适的View组件以产⽣响应。
Struts提供的ActionForm组件对象,它可以通过定义属性描述客户端表单数据。开发者可以从它派⽣⼦类对象,利⽤它和Struts提供的⾃定义标记库结合可以实现对客户端的表单数据的良好封装和⽀持,Action处理器对象可以直接对它进⾏读写,⽽不再需要和request、response对象进⾏数据交互。
(2)Struts框架的处理流程
l  ⾸先,控制器(ActionServlet)进⾏初始化⼯作,读取配置⽂件(l),为不同的Struts模块初始化相应的ModuleConfig对象。⽐如配置⽂件中的Action映射定义都保存在ActionConfig集合中。相应地有ControlConfig集合、FormBeanConfig集合、ForwardConfig 集合和MessageResourcesConfig集合等。
l  Struts框架的处理流程清楚的体现了MVC系统的特点,所有的页⾯请求都将发送到Struts的前端控制器ActionServlet中(因此如果要进⾏前置处理,可以继承ActionServlet并重写process()⽅法),同时ActionServlet也将根据l配置⽂件中的设置(<action>标签)来决定转向到那个后端控制器Action类。
l  当页⾯中的Form表单被提交时,ActionForm将⾃动地封装和处理该Form表单中的数据。同时在Action的⼦类中可以存取存储在ActionForm中的Form表单数据。
l  Action的⼦类将处理所获得的存储在ActionForm中的Form表单数据,处理和响应客户请求,它还调⽤后台的JavaBean组件完成具体的业务逻辑。同时也按照在l⽂件内的forward标签内容(如<forward name="sayHello" path="/sayHello.jsp"/>),将结果交由某个JSP页⾯显⽰。
(3)Struts体系组成
Struts体系可以看成两个相对独⽴的部分:
第⼀个部分是Struts API,⽤于编写⽀持Struts的应⽤组件;
第⼆部分是Struts的JSP标记库,由html、bean、logic和template四个标记组成。
Struts的两个部分有着各⾃不同的⽤户。对于规模较⼩的项⽬,同⼀个⽤户可能同时使⽤这两个部分;但对于规模较⼤的项⽬,通常开发者使⽤API组件,⽽负责HTML页⾯布局的⼈使⽤标记库。
(4)l配置⽂件
框架中的模型(M)、视图(V)、控制器(C) 三个部分是通过l配置⽂件将其联系在⼀起。⼀个标准的struts-config⽂件包含如下结构,有⼀点要引起⼤家的注意的,就是,l中配置的各个项⽬是有⼀定的顺序要求的,⼏个主要项⽬的顺序⼤致是这样的:<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
注意:各个标签项⽬是有⼀定的顺序要求的!
"/struts/dtds/struts-config_1_1.dtd >
<struts-config>
<data-sources /> // 定义数据源
<form-beans /> // 定义ActionForm
<global-exceptions /> // 定义全局异常
<global-forwards /> // 定义全局转向url
<action-mappings /> // 定义action
<controller /> // 配置Controller
<message-resources /> // 配置资源⽂件
<plug-in /> // 配置资源⽂件
</struts-config>
(5)Struts与其它框架的不同
在Struts应⽤中,有⼀个称为ActionServlet的主调度程序(或称为分配器)。不过,并⾮所有的请求都必须通过
ActionServlet(以“*.do”结尾的URL都是Struts请求)。⽤户的请求⽬标可以是⾮Struts的页⾯,也可以是那些使⽤了Struts标记库但不使⽤Struts请求分配服务的页⾯。这正是Struts体系的优点之⼀:按需使⽤。许多编程框架要求你要么不⽤,要么全部使⽤,⽽且⼀旦你决定使⽤,以后要悔改从前的错误就会付出⾼昂的代价。Struts按需使⽤的优点与这类系统形成了强烈对⽐。

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