Struts的基本概念

来源:互联网 发布:搜索引擎源码 编辑:程序博客网 时间:2024/06/08 05:54

Part 1 MVC模式

     模型-视图-控制器(MVC模式)是一种非常经典的软件架构模式,在UI框架和UI设计思路中扮演着非常重要的角色。从设计模式的角度来看,MVC模式是一种复合模式,它将多个设计模式在一种解决方案中结合起来,用来解决许多设计问题。MVC模式把用户界面交互分拆到不同的三种角色中,使应用程序被分成三个核心部件:Model(模型)、View(视图)、Control(控制器)。它们各自处理自己的任务。 
Part 2 structs是基于mvc的web框架

这里写图片描述 
Part 3 structs的优点

1)程序更加规范化 

2)程序开发的效率提高 

3)程序的可读性增加 
Part 4 structs与structs2:
      4.1  struts1是成熟的框架,应用很广泛,有很好的群众基础,使用它开发风险很小,成本更低!struts2虽然基于这个框架,但是应用群众并多,相对不成熟,未知的风险和变化很多,开发人员相对不好招,使用它开发项目的风险系数更大,用人成本更高! 
     4.2   Struts2与Struts的区别 
     从Struts2的发展过程来看,Struts2继承了Struts与WebWork的血脉,Struts2取两者之精华,形成新德框架,但是struts2还是更多的继承了struts的设计思想,并加入了WebWork的优点。在了解Struts2体系之前,让我们先看看struts2对struts做了哪些修改。 
Struts2与struts的不同主要体现在以下几个方面。 
     (1) Action类 
       1》在struts中都是使用抽象类编程而不是接口,因此他要求开发Action类继承一个抽象的基类,如DispatchAction等。 
       2》Struts2则基于接口编程,我们的Action类可以实现一个Action接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现常用的接口。更加强大的是,在struts2中Action接口不是必需的,任何有execute()函数的pojo对象都可以用作struts2的Action类来使用。 
     (2) 线程模式 
       1》 struts的Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单列策略限制了struts Action能做的事,并且要在开发时特别小心,Action资源必须是线程安全的或同步的; 
       2》 struts2的Action对象为每一个请求产生一个实例,因此没有线程安全问题。 
     (3) Servlet依赖 
       1》 struts的Action依赖于Servlet API,当一个Action被调用时,HttpServletRequest和HttpServletResponse被传递给执行方法,例如: 
publicActionForward execute(Actionmapping mapping,ActionForm Form,HttpServletRequestrequest,HttpServletResponse response){ 

       2》 struts2的Action不依赖与容器,允许Action脱离容器单独被测试。如果需要,Struts2的Action任然可以访问初始的request和response。例如下面的这个类MyAction.Java,他可以通过ActionContext对象取得Session值,也可以通过ServletActionContext对象取得request对象。 

public class MyAction{   protected Object getSession(String key){   return ActionContext.getContext().getSession(key);   }   protected HttpServletRequest getRequest(){   return (String)ServletActionContext.getRequest();   } }
     (4) 可测试性 

        1》 测试Struts Action的一个主要问题是,execute()方法暴露了Servlet API,这使得测试要依赖于容器。虽然有第三方的软件struts TestCase能够使用模拟对象来进行测试,但显然会让我们的测试变得更加复杂。 

        2》 Struts2 Action的类是POJO对象,因此可以直接编写测试类来测试Action类,只需要在测试类中注入属性即可。 
     
  (5) 捕获输入 
         1》 struts使用ActionForm对象捕获用户输入,所有的ActionForm必须继承一个基类ActionForm。因为其他的JavaBean不能用作ActionForm,开发者经常创建多余的类捕获输入。动态表单可以作为创建传统ActionForm的选择,但是,开发者可能是再创建已经存在的JavaBean,仍然会导致有冗余的JavaBean; 
         2》 struts2直接使用Action属性作为输入属性,消除对第二个输入对象的需求。输入属性可能是有自己子属性的rich对象类型。Action属性能够通过Web页面的taglibs访问。同时,struts2也支持ActionForm模式。 
       (6) 表达式语言 
         1》 struts整合了JSTL,这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱 
         2》 struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言OGNL 
        (7) 绑定值到页面 
         1》 struts使用标准jsp机制把对象绑定到页面中来访问 
         2》 struts2使用ValueStack(值堆栈)技术,使taglib能够访问值,而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view) 
         (8) 类型转换 
          1》 struts的ActionForm属性通常都是String类型,并不使用 Commons-Beanutils进行类型转换。每个类提供一个转换器,对每个实例来说是不可配置的; 
          2》 struts2使用OGNL进行OGNL进行类型转换,提供了基本和常用对象转换器。 
         (9) 数据校验 
          1》 struts支持在ActionForm的Validate方法中手动校验,或者通过Commons Validator来扩展校验。同一个类可以有不同的校验内容,但不能校验子对象; 
          2》 struts2支持通过validata()方法和XWork校验框架来进行校验,XWork校验框架使用为属性类型定义的校验和内容校验,来支持chain校验子属性。 
         (10) Action执行的控制 
          1》 struts支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须提供相同的生命周期; 
          2》 struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期,堆栈能够根据需要和不同的Action一起使用

0 0
原创粉丝点击