Struts的体系结构

来源:互联网 发布:威客网络兼职怎么赚钱 编辑:程序博客网 时间:2024/06/03 19:27
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
Struts体系结构
www.5272.com  2002-12-6  5272


Struts体系结构
Struts Framework Architecture)
胡长城(银狐999)
关键字
Struts,Framework,Architecture,Componennt,MVC
预备知识
在开始学习Struts以前,以下的知识点,需要有所了解: 模型-视图-控制的软件构架模式,JSP/Servlet的web层应用,J2EE体系结构。如果对客户标签类(Customer TagLib)有所了解也许更容易理解Struts本身的TagLib。

概述
本文主要从概念上讲解什么是Struts framework,它的框架结构,组件结构,以及简单的配置讲解。对于其应用请参考后面的“Struts安装及应用”和“Struts实用案例分析”。
文章的包括了如下四大部分:
一、 Framework的概念和体系简介 (Framework Conception and Architecture)
二、 Struts的概念和体系结构Struts Conception and Architecture)
三、 Struts的工作原理和组件(Struts Componennts)
四、 Struts配置文件简介(Struts Deployment Description)

一、 Framework概念
一直以来我们都说Struts是一个web framework。那么让我么先来看看什么是Framework。(我想用“框架”一词来翻译framework,可是后来越来越发现不太理想和完备,所以就直接用Framework一词)
Framework概念并不是很新了,伴随着软件开发的发展,在多层的软件开发项目中,可重用、易扩展的,而且是经过良好测试的软件组件,越来越为人们所青睐。这意味着人们可以将充裕的时间用来分析、构建业务逻辑的应用上,而非繁杂的代码工程。于是人们将相同类型问题的解决途径进行抽象,抽取成一个应用框架。这也就是我们所说的Framework。
Framework的体系提供了一套明确机制,从而让开发人员很容易的扩展和控制整个framework开发上的结构。 通常,framework的结构中都有一个“命令和控制”组件("command and control" component)——Framework Factory and Manager。

图片(2):Framework体系


通过基于请求响应(Request-Response)模式的应用framework,基本上有如下几个表现逻辑结构组成。
(1)控制器(Controller)——控制整个framework中各个组件的协调工作。
(2)业务逻辑层(Business Logic)——这是framework所希望解决问题的关键。当然对framwork本身来说,这里仅仅只是概念和几个提够服务的基础组件,真正的实现与客户的业务逻辑接轨,还需要开发人员在framework上再次扩展。
(3)数据逻辑层(Data Logic)——绝大应用系统都需要涉及到数据交互,这一层次主要包括了数据逻辑和数据访问接口。对于数据逻辑来说,如果你了解数据建模(Data Modeling)可能就很容易理解。

下面就进入我们的正题——Struts的结构

二、 Struts的概念和体系结构
Struts有一组相互协作的类(组件)、Serlvet以及jsp tag lib组成。基于Struts构架的web应用程序基本上符合JSP Model2的设计标准,可以说是MVC设计模式的一种变化类型。根据上面对framework的描述,我们很容易理解为什么说Struts是一个web framwork,而不仅仅是一些标记库的组合。但 Struts 也包含了丰富的标记库和独立于该框架工作的实用程序类。
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/servlet一样,存在于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,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,但是对于业务逻辑的操作则主要由Action、ActionMapping、ActionForward这几个组件协调完成(也许这几个组件,应该划分到模型中的业务逻辑一块)。其中,Action扮演了真正的业务逻辑的实现者,而ActionMapping和ActionForward则指定了不同业务逻辑或流程的运行方向。

2.3 Struts的基本组件包
整个Struts大约有15包,近200个类所组成,而且数量还在不断的扩展。在此我们不能一一介绍,只能列举几个主要的简要的介绍一下。下表说明了目前Struts api中基本的几个组件包,包括action,actions,config,util,taglib,validator。图片(5)则显现了这几个组件包之间的关系。其中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版本中的部分动态增删FromBean的类,也在Struts1.1中被Action包的DynaActionForm组件所取代
org.apache.Struts.config
提供对配置文件Struts-config.xml元素的映射。这也是sturts1.1中新增的功能
org.apache.Struts.util
Strtuts为了更好支持web application的应用,体统了一个些常用服务的支持,比如Connection Pool和Message Source。详细信息请参考http://jakarta.apache.org/Struts/api/org/apache/Struts/util/package-summary.html
org.apache.Struts.taglib
这不是一个包,而是是一个客户标签类的集合。下面包括Bean Tags,HTML Tags,Logic Tags,Nested Tags,Template Tags这几个用于构建用户界面的标签类。
org.apache.Struts.validator
Struts1.1 framework中增加了validator framework,用于动态的配置from表单的验证。详细信息请参阅 http://home.earthlink.net/~dwinterfeldt/

<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>