Struts 的体系结构与工作原理
MVC 即 Model-View-Controller 的缩写,是一种常用的设计模式。 MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。 MVC 的工作原理 , 如下图-1 所示:
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请求均被指向ActionSevlet,ActionSevlet根据Struts-config.xml中的配置信息,将用户请求封装成一个指定名称的FormBean,并将此FormBean传至指定名称的ActionBean,由ActionBean完成相应的业务操作,如文件操作,数据库操作等。每一个*.do均有对应的FormBean名称和ActionBean名称,这些在Struts-config.xml中配置。
核心:Struts的核心是ActionSevlet,ActionSevlet的核心是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>
<forward name="failure" path="/ messageFailure.aspx"/>
<forward name="success" path="/ messageSuccess.aspx"/>
</Struts-config>
核心代码:
如果,注册成功,转向 “success” ,而 “success” 是什么页面由配置文件决定;这样就分离了 view (界面层)和 Controller (控制层),有业务层( Model )由控制层来访问,这样界面层就可以专心于其美工设计。也许你会说这只不过是个页面导航。
关于页面导航,我认为那将是今后的一个发展方向,事实上,这样做,使系统的脉络更加清晰。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。尤其是当另一批开发者接手这个项目时,这种优势体现得更加明显。