Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 7382|回复: 8

Struts1和struts2的区别

  [复制链接]

该用户从未签到

发表于 2011-10-9 17:27:52 | 显示全部楼层 |阅读模式
struts1.2和struts2最大的不同是,struts2集成了Webwork。

区别相当大,2.0改进很多,整合webwork,去掉了一些不常用得标签,

struts2.x是在webwork2的基础上构建的,集成了大量的东西,像什么拦截器,校验框架等,相当复杂,struts1.x相对来说就显得小得多了,东西就那么几个。

特性
Struts 1。2
Struts 2 .0

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



声明:该篇为本人转载的 觉得说的挺详细的 有点意思
回复

使用道具 举报

该用户从未签到

发表于 2014-12-4 16:21:46 | 显示全部楼层

类:
Struts1 要求 Action 类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口。
Struts2 Action 类可以实现Action 接口,也可以实现其他的接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport 基类去实现常用的接口。Action接口不是必须的。任何有execute标识的POJO对象都可以用作Struts2的Action对象。
线程模式:
     Struts1 Action是单例模式并且是线程安全的。因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action 能做的事,并且要在开发的时特别的小心。Action资源必须是线程安全的或同步的。
       Struts2  Action对象为每一个请求产生一个实例,因此没有线程安全问题
Servlet 依赖:
     Struts1 Action 依赖于Servlet API ,因为当一个Action被调用时HttpServletRequest 和HttpServletResponse被传递给execute方法
     Struts2 Action 不依赖于容器,允许Action脱离容器单独被测试。如果需要,Struts2 Action仍然可以访问初始的request和response.但是,其他的元素减少或者消除了直接访问HttpServletRequest 和HttpResponse的必要性。
可测性:
   测试Struts1 Action 的一个主要问题是execute方法暴露了servlet  API(使得测试要依赖于容器).一个第三方扩展-------Struts TestCase ----提供了一套Struts1的模拟对象(来进行测试)
   Struts2 Action 可以通过初始化,设置属性,调用方法来测试,“依赖注入”支持也使测试更容易。
回复 支持 反对

使用道具 举报

  • TA的每日心情
    难过
    2020-5-1 08:53
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2014-12-12 15:18:53 | 显示全部楼层
    学习了 谢谢
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-4-12 11:09
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2014-12-25 20:45:30 | 显示全部楼层
    学习了。。。
    回复

    使用道具 举报

    该用户从未签到

    发表于 2014-12-27 12:23:32 | 显示全部楼层
    还没学到这里
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-1-15 18:13:54 | 显示全部楼层
         Struts2以Filtedispatcher作为核心控制器,用来处理用户请求的Action实例,并不是用户实现了业务控制器,
         而是Action代理.因为用户实现了业务控制器并没有与servlet耦合,显然无法处理用户请求,而Struts2提供了一系列的拦截器,
         该拦截器负责将HttpServletRequset请求中的参数解析出来,传入到Action中,并回调Action中的execute()方法来处理用户请求,
         显然Struts2用的AOP思想
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-4-12 10:11:57 | 显示全部楼层
    区别相当大,2.0改进很多
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-11-18 09:50:47 | 显示全部楼层
    不错不错,说的挺详细的
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2016-4-29 02:43:55 | 显示全部楼层
    谢谢楼主!!!!













    人生感悟美文美句摘抄       
    陆战型设计图       
    黑科技       
    老年人养生保健       
    历史       
    地神之战袍护腿       
    聚合阅读       
    英语美文100翻译       
    音质最佳       
    微信美文素材       
    军事历史       
    家长互联       
    600字美文摘抄赏析       
    龙虎道人青虚       
    第二十六届奥运会       
    健康养生食谱       
    霍拉提奥普雷格塔曲       
    服务       
    黄帝内经养生名言       
    保加利亚科内利亚诺
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-20 00:18 , Processed in 0.475922 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表