博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Structs工作原理

Posted on 2012-06-19 10:59  徐正柱-  阅读(7717)  评论(0编辑  收藏  举报

 

                                                               Struts 的体系结构与工作原理
  
   MVC Model-View-Controller 的缩写,是一种常用的设计模式。 MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。 MVC 的工作原理 , 如下图-1 所示:
  
                                   
                                                            图-1

  
   Struts MVC 的一种实现,它将 Servlet JSP 标记(属于 J2EE 规范)用作实现的一部分。 Struts 继承了 MVC 的各项特性,并根据 J2EE 的特点,做了相应的变化与扩展。 Struts 的体系结构与工作原理如下图 2 所示:
  
                
                                                                 图-2
 
  图-2 中我们可以知道, Struts 的体系结构包括模型( Model ),视图( View )和控制器( Controller )三部分。
  
  下面让我们从 MVC 角度来看看 struts 的体系结构( Model 2 )与工作原理:
  
   1 )模型( Model
  
  在 Struts 的体系结构中,模型分为两个部分:系统的内部状态和可以改变状态的操作(事务逻辑)。内部状态通常由一组 Actinform Bean 表示。根据设计或应用程序复杂度的不同,这些 Bean 可以是自包含的并具有持续的状态,或只在需要时才获得数据(从某个数据库)。大型应用程序通常在方法内部封装事务逻辑(操作),这些方法可以被拥有状态信息的 bean 调用。比如购物车 bean ,它拥有用户购买商品的信息,可能还有 checkOut() 方法用来检查用户的信用卡,并向仓库发定货信息。 小型程序中,操作可能会被内嵌在 Action 类,它是 struts 框架中控制器角色的一部分。当逻辑简单时这个方法很适合。 建议用户将事务逻辑(要做什么)与 Action 类所扮演的角色(决定做什么)分开。
  
   2 )视图( View
  
  视图主要由 JSP 建立, struts 包含扩展自定义标签库( TagLib ),可以简化创建完全国际化用户界面的过程。目前的标签库包括: Bean Tags HTML tags Logic Tags Nested Tags 以及 Template Tags 等。
  
   3 )控制器( Controller
  
  在 struts 中,基本的控制器组件是 ActionServlet 类中的实例 servelt ,实际使用的 servlet 在配置文件中由一组映射(由 ActionMapping 类进行描述)进行定义。对于业务逻辑的操作则主要由 Action ActionMapping ActionForward 这几个组件协调完成的,其中 Action 扮演了真正的业务逻辑的实现者, ActionMapping ActionForward 则指定了不同业务逻辑或流程的运行方向。 struts-config.xml 文件配置控制器。 
       流程:Struts中,用户的请求一般以*.do作为请求服务名,所有的*.do请求均被指向ActionSevletActionSevlet根据Struts-config.xml中的配置信息,将用户请求封装成一个指定名称的FormBean,并将此FormBean传至指定名称的ActionBean,由ActionBean完成相应的业务操作,如文件操作,数据库操作等。每一个*.do均有对应的FormBean名称和ActionBean名称,这些在Struts-config.xml中配置。

 核心:Struts的核心是ActionSevletActionSevlet的核心是Struts-config.xml

  
   Struts 体系结构中的组件
   
              
                                                                          图-3

  
        图-3 显示了 ActionServlet (Controller) Actionform (form State) Action (Model Wrapper) 之间的最简关系。
  体系结构中所使用的组件如下表:
   ActionServlet   控制器
   ActionClass    包含事务逻辑
   Actionform    显示模块数据
   ActionMapping   帮助控制器将请求映射到操作
   ActionForward   用来指示操作转移的对象
   ActionError    用来存储和回收错误
   Struts 标记库  可以减轻开发显示层次的工作  
     .NET 中如何使用 Struts 的设想
   1 )模型( Model
  
   这里写业务层。
  
   2 )视图( View
  
  视图当然指的是 .apsx 文件。
  
   3 )控制器( Controller
        这里是一个转向控制器,由 xml 配置完成,就像真正的 struts 一样。
这里提的是一个简化的,精炼 struts 思想的 .net 版本使用方法。
例子如下:
一个用户注册系统,用户通过网页输入相关信息:注册 ID 号,密码, EMAIL ,若注册成功,则返回成功提示信息,反之出现注册失败提示信息。
注册页面: reguser.aspx
配置文件:   Struts-config.xml
   <Struts-config>
  

   <forward name="failure" path="/ messageFailure.aspx"/>
  

   <forward name="success" path="/ messageSuccess.aspx"/>
       </Struts-config>
核心代码:
如果,注册成功,转向 “success” ,而 “success” 是什么页面由配置文件决定;这样就分离了 view (界面层)和 Controller (控制层),有业务层( Model )由控制层来访问,这样界面层就可以专心于其美工设计。也许你会说这只不过是个页面导航。
关于页面导航,我认为那将是今后的一个发展方向,事实上,这样做,使系统的脉络更加清晰。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。尤其是当另一批开发者接手这个项目时,这种优势体现得更加明显。