本人最近在自学struts1,但后来又发现还有struts2,但不是很清楚两者有什么区别,请大家指教

解决方案 »

  1.   

    Action类 
    Struts 1要求Action类要扩展自一个抽象基类。Struts 1的一个共有的问题是面向抽象类编程而不是面向接口编程。 
    Struts 2的Action类实现了一个Action接口,连同其他接口一起实现可选择和自定义的服务。Struts 2提供一个名叫ActionSupport的基类实现一般使用的接口。虽然,Action接口不是必须的。任何使用execute方法的POJO对象可以被当作Struts 2的Action对象使用。 程模型 
    Struts 1 Action类是单例类,因只有一个示例控制所有的请求。单例类策略造成了一定的限制且给开发带来了额外的烦恼。Action资源必须是程安全或者同步的。 
    Struts 2 Action对象每一个请求都实例化对象,所以没有程安全的问题。(实践中,servlet容器生许多丢的对象对于每一个请求,多于一个的对象并不影响垃圾收集) Servlet 依赖 
    Struts 1的Action类依赖于servlet API以HttpServletRequest和HttpServletResponse作参数传给execute方法当Action被调用时。 
    Struts 2的Action不和容器有关。Servlet上下文被表现简单的Maps,允许Action被独立的测试。Struts 2的Action可以访问最初的请求和相应,如果需要的话。然而,其他的架构元素少或者排除直接访问HttpServletRequest或者HttpServletResponse的需要。 易测性 
    测试Struts 1的主要障碍是execute方法暴露了Servlet API。第三方的扩展,Struts测试用例,提供Struts 1的集合对象。 
    Struts 2的Action可以通过实例化Action测试,设置属性,然后调用方法。依赖注入的支持也是测试变得更简单。 接受输入 
    Struts 1使用ActionForm对象捕获输入。象Action一样,所有的ActionForm必须扩展基类。因其他的JavaBean不能作ActionForm使用,开发者经常创建多余的类捕获输入。DynaBeans可以被用来作替代ActionForm的类创建。但是开发者可以重新描述已经存在的JavaBean。 
    Struts 2 Action属性作输入属性,排除第二个输入对象的需要。输入属性可能有丰富的对象类型这些类型有他们自己的属性。Action的属性可以通过标签库访问。Struts 2也支持ActionForm形式。丰富的对象类型,包含业务或者域对象,可以被当作输入或者输出对象使用。馍型驱动特性简化标签对POJO输入对象的引用。 表达式语言 
    Struts 1整和JSTL,所以它使用JSTL的表达式语言。表达式语言有基本的图形对象移动,但是相对很弱的集合和被索引的属性支持。 
    Struts 2使用JSTL,但是框架也支持更大和更灵活的表达式,叫做“对象图形符号语言”(OGNL)。 将值绑定要视图上 
    Struts 1使用标准JSP机制来绑定对象到页面上下文。 
    Struts 2使用“ValueStack”技术了标签库可以不用链接你的视图到对象的表现类型访问值。ValueStack策略允许重用视图。 类型转换 
    Struts 1的ActionForm属性经常都是String的。Struts 1使用Commons-Beanutils类型转换。转换每一个类,不是每一个实例配置。 
    Struts 2使用OGNL类型转换。框架包含转换器基本的和共同的对象类型和原始类型。 验证 
    Struts 1支持手动验证凭借ActionForm的validate方法,或者通过扩展的公用验证器。类可以有不同的验证上下文未相同的类,但是不能不能包括验证子对象。 
    Struts 2支持手动验证凭借validate方法和XWork验证框架。Xwork验证框架支持一连串的验证子属性使用的验证了属性类的类型和严正上下文而定义。 Action执行的控制 
    Struts 1支持独立的请求处理器对于每一个模型,但是所有在模型中的Action必须共享同一个生命周期。 
    Struts 2支持在每一个Action基础上凭借拦截栈创建不同的生命周期。自定义栈可以被创建且使用不同的所需 的Action。 
      

  2.   

    区别:1.只是名字比较相近,不是一个东西,struts2是webwork的升级。2.struts2默认支持ognl表达式。3.struts2是线程安全的,每次请求都创建一个ActionContext。
      

  3.   

    1.struts2每个action都会创建一个新的实例
    线程安全
    2.struts2摆脱了httprequest httpresonse的一些限制
    不过你也可以在代码中调用
    3.struts2 action可以实例化,直接测试
    其他忘记了
      

  4.   

    上面说了很多了.我就说一点吧...Struts2里面的Action 是每次请求就实例一个.是有状态的..
      

  5.   

    我觉得最大区别struts1是依赖web服务器,serlvet api..而且struts1 action是单例类,以多线程的方式运行的,安全性很不好。struts2它为每个请求都分配一个action,安全性好
      

  6.   

    Struts2的请求都是先交给Action代理处理
      

  7.   

    Action类 
    Struts 1要求Action类要扩展自一个抽象基类。Struts 1的一个共有的问题是面向抽象类编程而不是面向接口编程。 
    Struts 2的Action类实现了一个Action接口,连同其他接口一起实现可选择和自定义的服务。Struts 2提供一个名叫ActionSupport的基类实现一般使用的接口。虽然,Action接口不是必须的。任何使用execute方法的POJ……
      

  8.   

       最简单的区别就是struts1是重量级框架,侵入性高。但是struts2更轻量级,对于移植性、扩展性都比较好
      

  9.   

    struts1 和struts2最大的区别是struts1没有struts.xml配置文件
      

  10.   

    struts基于servlet struts基于filter
      

  11.   

    !2年前有过struts2,现在一直用struts1.还真不知道1的action是单例模式的,2是线程安全的。