收藏 分销(赏)

Struts的标准体系结构.doc

上传人:天**** 文档编号:3024192 上传时间:2024-06-13 格式:DOC 页数:14 大小:34.54KB
下载 相关 举报
Struts的标准体系结构.doc_第1页
第1页 / 共14页
Struts的标准体系结构.doc_第2页
第2页 / 共14页
Struts的标准体系结构.doc_第3页
第3页 / 共14页
Struts的标准体系结构.doc_第4页
第4页 / 共14页
Struts的标准体系结构.doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

1、Struts体系结构-12-65272Struts体系结构(Struts Framework Architecture)胡长城(银狐999)关键字Struts,Framework,Architecture,Componennt,MVC预备知识在开始学习Struts以前,以下知识点,需要有所了解: 模型-视图-控制软件构架模式,JSP/Servletweb层应用,J2EE体系结构。假如对用户标签类(Customer TagLib)有所了解可能更轻易了解Struts本身TagLib。 概述本文关键从概念上讲解什么是struts framework,它框架结构,组件结构,和简单配置讲解。对于其应用请

2、参考后面“struts安装及应用”和“struts实用案例分析”。文章包含了以下四大部分:一、 Framework概念和体系介绍 (Framework Conception and Architecture)二、 Struts概念和体系结构(Struts Conception and Architecture)三、 Struts工作原理和组件(Struts Componennts)四、 Struts配置文件介绍(Struts Deployment Description)一、 Framework概念一直以来我们全部说struts是一个web framework。那么让我么先来看看什么是Fram

3、ework。(我想用“框架”一词来翻译framework,可是以后越来越发觉不太理想和完备,所以就直接用Framework一词)Framework概念并不是很新了,伴伴随软件开发发展,在多层软件开发项目中,可重用、易扩展,而且是经过良好测试软件组件,越来越为大家所青睐。这意味着大家能够将充裕时间用来分析、构建业务逻辑应用上,而非繁杂代码工程。于是大家将相同类型问题处理路径进行抽象,抽取成一个应用框架。这也就是我们所说Framework。Framework体系提供了一套明确机制,从而让开发人员很轻易扩展和控制整个framework开发上结构。 通常,framework结构中全部有一个“命令和控制

4、”组件(command and control component)Framework Factory and Manager。图片(2):Framework体系经过基于请求响应(Request-Response)模式应用framework,基础上有以下多个表现逻辑结构组成。(1)控制器(Controller)控制整个framework中各个组件协调工作。(2)业务逻辑层(Business Logic)这是framework所期望处理问题关键。当然对framwork本身来说,这里仅仅只是概念和多个提够服务基础组件,真正实现和用户业务逻辑接轨,还需要开发人员在framework上再次扩展。(3)

5、数据逻辑层(Data Logic)绝大应用系统全部需要包含到数据交互,这一层次关键包含了数据逻辑和数据访问接口。对于数据逻辑来说,假如你了解数据建模(Data Modeling)可能就很轻易了解。 下面就进入我们正题Struts结构二、 Struts概念和体系结构Struts有一组相互协作类(组件)、Serlvet和jsp tag lib组成。基于struts构架web应用程序基础上符合JSP Model2设计标准,能够说是MVC设计模式一个改变类型。依据上面对framework描述,我们很轻易了解为何说Struts是一个web framwork,而不仅仅是部分标识库组合。但 Struts 也

6、包含了丰富标识库和独立于该框架工作实用程序类。Struts有其自己控制器(Controller),同时整合了其它部分技术去实现模型层(Model)和视图层(View)。在模型层,Struts能够很轻易和数据访问技术相结合,包含EJB,JDBC和Object Relation Bridge。在视图层,Struts能够和JSP, Velocity Templates,XSL等等这些表示层组件想结合。2.1 Struts和Web App关系既然struts叫做web framework,那么其肯定关键基于web层应用系统开发。根据J2EE Architecture标准,struts应该和jsp/se

7、rvlet一样,存在于web container一层。图片(3)所显示图片(3): Struts和WebApp关系2.2 Struts体系结构我们说struts framework是MVC 模式表现,下面我们就从分别从模型、视图、控制来看看struts体系结构(Architecture)。图片(4)显示了struts framework体系结构响应用户请求时候,各个部分工作原理。图片(4):Struts体系结构2.2.1从视图角度(View)关键由JSP建立,struts本身包含了一组可扩展自定义标签库(TagLib),能够简化创建用户界面过程。现在包含:Bean Tags,HTML Tags

8、,Logic Tags,Nested Tags,Template Tags这多个Taglib。相关它们具体资料请参考struts用户手册2.2.2从模型角度(Model)模型关键是表示一个系统状态(有时候,改变系统状态业务逻辑操作也也划分到模型中)。在Struts中,系统状态关键有ActiomForm Bean表现,通常情况下,这些状态是非持久性。假如需要将这些状态转化为持久性数据存放,Struts本身也提供了Utitle包,能够方便和数据库操作2.2.3 从控制器角度(Controller)在Struts framework中, Controller关键是ActionServlet,不过对于

9、业务逻辑操作则关键由Action、ActionMapping、ActionForward这多个组件协调完成(可能这多个组件,应该划分到模型中业务逻辑一块)。其中,Action饰演了真正业务逻辑实现者,而ActionMapping和ActionForward则指定了不一样业务逻辑或步骤运行方向。2.3 Struts基础组件包整个struts大约有15包,近200个类所组成,而且数量还在不停扩展。在此我们不能一一介绍,只能列举多个关键简明介绍一下。下表说明了现在struts api中基础多个组件包,包含action,actions,config,util,taglib,validator。图片(5

10、)则显现了这多个组件包之间关系。其中action是整个struts framework关键org.apache.struts.action基础上,控制整个struts framework运行关键类、组件全部在这个包中,比如我们上面提到控制器ActionServlet。已经Action,ActionForm,ActionMapping等等。struts1.1比1.0多了 DynaActionForm 类。增加了动态扩展生成FormBean功效org.apache.struts.actions这个包是关键作用是提供用户http请求和业务逻辑处理之间特定适配器转换功效,而1.0版本中部分动态增删Fr

11、omBean类,也在struts1.1中被Action包DynaActionForm组件所替换org.apache.struts.config提供对配置文件struts-config.xml元素映射。这也是sturts1.1中新增功效org.apache.struts.utilStrtuts为了愈加好支持web application应用,体统了一个些常见服务支持,比如Connection Pool和Message Source。具体信息请参考org.apache.struts.taglib这不是一个包,而是是一个用户标签类集合。下面包含Bean Tags,HTML Tags,Logic Ta

12、gs,Nested Tags,Template Tags这多个用于构建用户界面标签类。org.apache.struts.validatorStruts1.1 framework中增加了validator framework,用于动态配置from表单验证。具体信息请参阅 dwinterfeldt/三、 Struts framework工作原理和组件对于Struts 怎样控制、处理用户请求,让我们经过对struts四个关键组件介绍来具体说明。这多个组件就是:ActionServlet。Action Classes,Action Mapping(此处包含ActionForward),ActionF

13、rom Bean。3.1 Struts ActionServletActionServlet继承自javax.servlet.http.HttpServlet类,其在Struts framework中饰演角色失控制器,参看上面“Struts体系图”。控制器ActionServlet关键负责将HTTP用户请求信息组装后,依据配置文件指定描述,转发到合适处理器。(在Struts1.1中新增了org.apache.struts.action.Action.RequestProcessor类,将处理请求功效从控制器功效中分离。根据Servelt标准,全部得Servlet必需在web配置文件(web.x

14、ml)申明。一样,ActoinServlet必需在Web Application配置文件(web.xml)中描述,相关配置信息,后面将会介绍。当用户向服务器端提交请求时候,实际上信息是首先发送到控制器ActionServlet,一旦控制器取得了请求,其就会将请求信息传交给部分辅助类(help classes)处理。这些辅助类知道怎样去处理和请求信息所对应业务操作。在Struts中,这个辅助类就是org.apache.struts.action.Action。通常开发者需要自己继承Aciton类,从而实现自己Action实例。3.2 Struts Action Classes 一个Action

15、类角色,就像用户请求动作和业务逻辑处理之间一个适配器(Adaptor),其功效就是将请求和业务逻辑分开。这么分离,使得用户请求和Action类之间能够有多个点对点映射。而且Action类通常还提供了其它辅助功效,比如:认证(authorization)、日志(logging)和数据验证(validation)。Action最为常见是execute()方法。(注意,以前perform方法在struts1.1中已经不再支持),还有一个execute()方法,请参考apidoc,在此不在说明。当Controller收到用户请求时候,在将请求转移到一个Action实例时,假如这个实例不存在,控制器会首

16、先创建,然后会调用这个Action实例execute()方法。Struts Framework为应用系统中每一个Action类只创建一个实例。因为全部用户全部使用这一个实例,所以你必需确定你Action 类运行在一个多线程环境中。下图显示了一个execute()方法怎样被访问:图片(6): Action实例execute()方法注意,用户自己继承Action子类,必需重写execute()方法,因为Action类在默认情况下是返回null。3.3 Struts Action Mapping上面讲到了一个用户请求是怎样被控制器转发和处理,不过,控制器怎样知道什么样信息转发到什么样Action类呢

17、?这就需要部分和动作和请求信息相对应映射配置说明。在struts 中,这些配置映射信息是存放在特定XML文件(比如struts-config.xml)。 这些配置信息在系统开启时候被读入内存,供struts framework在运行期间使用。在内存中,每一个元素全部和org.apache.struts.action.ActionMapping类一个实例对应。下表就显示了一个登陆配置映射。上面配置表示:当能够经过/logonAction.do(此处假设配置控制器映射为*.do)提交请求信息时候,控制器将信息委托com.test.LogonAction处理。调用LogonAction实例execu

18、te()方法。同时将Mapping实例和所对应LogonForm Bean信息传入。其中name=LogonForm,使用form-bean元素所申明ActionForm Bean。相关form-bean申明以下显示。元素则表示了当Action实例execute()方法运行完成或,控制器依据Mapping可将响应信息转到合适地方。如上面现实,假如用户登陆成功,则调用welcome forward,将成功信息返回到/welcome.jsp页面。在你execute()方法结尾能够使用下面实例代码而返回welcome forward。当然你welcome forward必需在action元素属性中定

19、义,正如上面所申明那样。在此稍稍说一下相关global-forwards概念。其在配置文件中描述了整个应用系统能够使用ActionForward,而不是仅仅是一个特定Action。3.4 Struts ActionForm Bean在上面讲解ActionServlet,Action Classes和Action Mapping时候,我们全部提到了ActionForm Bean概念。一个应用系统消息转移(或说状态转移)非持久性数据存放,是由ActionForm Bean负责保持。ActionForm关键功效就是为Action操作提供和用户表单相映射数据(假如在用户指定情况下,还包含对数据进行校验

20、)。Action负责对系统数据状态保持,而Action则负责依据业务逻辑需要,对数据状态进行修改,在改变系统状态后,ActionForm则自动回写新数据状态并保持。注意:在struts1.1中,ActionForm校验功效,逐步被剥离出来(当然仍然能够使用)。使用了validator framework对整个应用系统表单数据验证进行统一管理。相信信息请参考:dwinterfeldt在ActionForm使用中,Struts提倡使用到值对象(Value Object)。这么将用户或开发人员,对数据状态和对象状态能够愈加清楚了解和使用。对于每一个用户请求,Struts framework在处理Ac

21、tionForm时候,通常需要经历以下多个步骤:()检验Action映射,确定Action中已经配置了对ActionForm映射()依据name属性,查找form bean配置信息()检验Actionformbean使用范围,确定在此范围下,是否已经有此form bean实例。()假如目前范围下,已经存在了此form bean实例,而是对目前请求来说,是同一个类型话,那么就重用。()不然,就重新构建一个form bean实例()form beanreset()方法备调用()调用对应setter方法,对状态属性赋值()假如validatede属性北设置为true,那么就调用form beanva

22、lidate()方法。注意:直接从ActionFrom类继承reset()和validate()方法,并不能实现什么处理功效,所以有必需自己重新覆盖。假如validate()方法没有返回任何错误,控制器将ActionForm作为参数,传给Action实例execute()方法并实施。有必需提一下相关org.apache.struts.action.DynaActionForm。这是struts1.1新增特征。其继承自ActionForm,在struts早先版本中,我们必需人为结构特定ActionFrom子类,不过利用DynaActionForm,能够依据属性集而动态创建from bean。相关

23、其具体资料,请参考四、Struts其它组件Struts framework本身提供了很多可扩展组件或sub framework,方便开发人员在其构架上构建web层应用系统。比如upload,collections ,logging等等。让我们来看看两个比较关键组件:validationg framework和struts taglib。相关其它组件请参考Struts用户手册()。在stuts1.0中有些很不错概念和组件,比如benaUtils,Collections等等,以后被Jakarta Commons项目组吸收而独立处struts framework。不过struts仍然需要依靠这些组件

24、才能正常工作。4.1 Validation Framework for Struts在struts1.1中,新增了validation framework。增加了对form数据提交验证。将原本需要在ActionFrom Beanvalidate()进行验证经过配置文件描述进行验证。相关其具体信息,请参考dwinterfeldt 。个人提议对于小型应用系统能够采取这种配置方法,不过对于应用系统中有大量web层表单应用系统,而且业务需求变动比较大,使用validation framework 可能会加重开发难度、系统维护难度。能够借鉴validation frameworkJavascript V

25、alidator Tag。 4.2 Struts TagLibstruts提供了一组可扩展自定义标签库(TagLib),能够简化创建用户界面过程。现在包含:Bean Tags,HTML Tags,Logic Tags,Nested Tags,Template Tags这多个Taglib。相关Struts Taglib结构和使用,能够参考前面相关Cutomer Tag Lib介绍,相关起具体资料,请参考4.3 BeanUtils 这个组件全称是Bean Introspection Utilites。是属于Jakarta Commons项目组。关键是帮助构建javabean属性操作(getter,

26、setter),已经提供一个动态定义和访问bean属性。相关具体信息,请参考。假如各位对这方面有很爱好,能够参考部分相关java反射(Reflectio)方面资料。44 Collections这个组件关键是提供了部分集合或列表对象,在原有java collections framework基础上进行了扩展。具体资料请参考:checkout/jakarta-commons/collections/STATUS.html?rev=1.1345 Digester这个组件翻译成汉字意思是“汇编”。其关键功效是依据xml配置文件,初始化系统部分java类对象。Digester帮助你指定XML和java对

27、象之间映射模型,而且许可用户话定制映射规则(rules)。具体资料请参考 46 其它相关组件因为篇幅问题,还有部分组件就不一一介绍了,包含Database Connection Pool,Upload,Logging,Pool,Services。基在struts用户手册全部有具体介绍,请参考。五、 Struts配置文件介绍(Deployment Description)struts framework依据配置文件指定(更确切说,是控制器),才使得ServletAction,ctionMapping,Action,ActionForm这多个不一样层次组件相互交互,协调工作。前面也提到了,这些配置

28、文件是在系统开启时候,读入导内存中,供控制器使用。Struts framework关键包含三部分配置描述,一个是指定相关Struts Controller及其相关配置描述(Initialization Parameters),一个时对struts tag lib描述,一个是struts组件(ctionMapping,Action,ActionForm)之间相互映射协调关系5.1相关Struts Controller及其相关配置描述因为Struts Controller关键类ActionServlet是继承自HttpServlet,所以必需像配置一个Servlet那样配置ActionServle

29、t类及其访问映射。具体信息请参考:5.2 相关struts tag lib配置描述假如你web application计划使用Strutstaglib,那么你有必需在web.xml中对struts taglib进行配置描述。相关具体描述和说明请参考5.3 相关Struts Action Mapping配置描述Struts本身有一个配置文件,通常情况为struts-config.xml。相关其DTD文档描述,请参考(或struts-config_1_0.dtd)通常struts-config(version1.1)包含了以下多个部分:(1)form-bean(2)global-forwards(

30、3)action-mappings(4)data-sources相关具体信息请参阅有必需提一下是,在struts1.1中,提出了对Multiple Application Support。在struts早先版本中,只有一个struts配置文件,通常叫struts-config.xml。不过,对于越来越复杂应用系统发展,只有一个地方存放这个一个文件,对大型项目来说,使用和修改这个配置文件,使其成为了一个应用瓶颈问题。在struts1.1中,你能够定义多了配置文件协同工作。总结期望经过以上对Struts Framework讲解,读者能够对Struts整体结构有个比较清楚认识,对其怎样处理用户请求,怎样进行业务逻辑处理和自动流转能够有个概念上认识。Resource Struts官方网站: Struts用户手册(User Guide) ARTICLE - Framework save the day ARTICLE - Building a Java servlet framework using reflection Validation Frameworkdwinterfeldt/ ARTICLE - Struts1.1,Should I upgrade?原作者:胡长城来 源:java汉字网共有6957位读者阅读过此文

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服