之前的两篇博文分别介绍了Struts1和Struts2这两个框架的概念和简单的使用流程,但是没有对这个两个框架之间的不同进行详细的说明,接下来就来看看两者到底有哪些不同的地方吧。

区别一:Struts1的Action类必须要继承Action,而Struts2的则可以不继承

在使用Struts1进行开发的时候,必须要继承Struts1的抽象基类Action,并且要重写抽象类的execute()方法,这就导致了其Action必须要依赖ServletAPI,因为每当访问Action的时候,必须要调用execute方法,这就需要两个参数request和response,这样就造成了Struts1模式下的Action很难测试,必须要Servlet容器的支持才可以。

而Struts2可以不继承任何类或者接口,这就保证了Action类的独立性,当然可以实现一个Action接口(在Struts2中Action是一个接口),也可以实现其他的接口,使得可选和定制服务成为了可能,Struts2提供了一个ActionSupport基类去实现常用的接口,但是Action接口不是必须的,任何有execute方法(没有参数)的POJO对象都可以作为Struts2的Action对象去使用。这样一来,Action就可以通过初始化、属性设置、调用方法等进行测试,可测性大大的提高,同时消除了对Servlet API的依赖,使得Action无需依赖容器而可以单独进行测试。

区别二:Struts1是线程不安全的,而Struts2是线程安全的

Struts1的Action是单例模式,在运行的时候,只有一个Action实例来处理所有的请求,单例模式的策略限制了Action的功能,因此我们在开发的过程中必须要保证Action资源是线程安全的或者同步的,否则会出现线程安全问题。

而Struts2的Action是多例的,会为每一个请求创建一个实例,因此不存在线程安全问题。

区别三:Struts1使用ActionForm接收表单数据,而Struts2直接让Action来收集表单数据

Struts1收集数据通常使用ActionForm,而ActionForm还需要继承。使ActionFrom的复用率降低,如果项目非常大的话就会产生大量的ActionForm,这给维护工作带了非常大的工作量,但是其好处是将数据的收集和控制进行了很好的分离。

Struts2在收集表单数据方面可采用的方式就比较多了,可以直接让Action来收集表单数据,但也可以采用类似于ActionForm的方式来收集数据,Struts2采用了ModelDriven的方式来支持类似Struts1的ActionForm方式,当然了Struts2也支持使用ActionForm的方式,因此Struts2更加的灵活

区别四:Struts1和Struts2常用的表达式语言不同

Struts1中我们通常使用JSTL表达式语言,这种标签库是集成在Struts1框架里面的,因此多数人使用JSTL EL表达式去操作页面的数据,这种EL支持基本对象的图遍历,但是对集合和索引属性的支持就比较弱了。

而Struts2既可以使用JSTL,但是增加了更加强大和灵活的表达式语言——“Object Graph Notation Language”(OGNL),它通过简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。因此Struts2将OGNL作为了默认的表达式语言。

区别五:两者的类型转换不同

Struts1中对ActionForm的类型转换采用commons-beanutils工具,而定义一个转换器,将会对所有的ActionForm起作用,因此无法针对某一个ActionForm来配置是否使用该类型的转换器。

Struts2则使用OGNL进行类型转换,功能更加强大,可以实现针对不同的类型进行不同的配置,并且提供了基本和常用对象的转换器,无需我们自己写。

区别六:校验方式不同

Struts1采用覆盖ActionFrom中的validate()方法或者采用验证框架commonsvalidator进行验证

而Struts2支持使用覆盖validate()方法来完成验证,同时也支持使用XWork验证框架进行验证

区别七:后台向页面传值技术不同

Struts1使用标准的JSP机制把对象绑定到页面中去,而Struts2则引入了“ValueStack”技术,这样就可以使用tiglib去访问值,不用去把对象和页面绑定起来。

区别八:Action的执行控制不同

Struts1支持一个模块一个单独的RequestProcessors(生命周期),但是模块中的所有Action必须共享相同的生命周期。

Struts2则引入了拦截器机制,有了拦截器栈的概念(Interceptor Stacks),通过拦截器栈可以为每一个Action配置不同的生命周期,这样一来能够根据需求提供不同的方案,更加灵活方便了。

小结一下:

Struts2仍然是一个基于请求驱动的MVC框架,但是并不是Struts1的升级版,从上面可以看出Struts2与Struts1的体系结构差异非常大。相反,Struts2采用了另一个优秀的MVC框架WebWork的核心设计,因此Struts2是WebWork的一个升级版,虽然兼容Struts1,但是大家要清楚它并不是Struts1的升级版。

【Struts】:Struts1和Struts2的区别与联系相关推荐

  1. Struts1和Struts2的区别和对比(完整版)

    struts2不是struts1的升级,而是继承的webwork的血统,它吸收了struts1和webwork的优势. 先看struts的Action官方注释(struts1.3.8源代码) /** ...

  2. Struts1和Struts2的区别和对比(完整版)(转)

    Struts1和Struts2的区别和对比(完整版)(转) Struts1和Struts2的区别和对比: Action 类:  • Struts1要求Action类继承一个抽象基类.Struts1的一 ...

  3. Struts1和Struts2的区别和对比

    2019独角兽企业重金招聘Python工程师标准>>> 类: •Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口. • Str ...

  4. Struts1与Struts2的区别

    Action 类:  • Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口.  • Struts 2 Action类可以实现一个Action接口 ...

  5. struts1和struts2的区别2

    1) 在Action实现类方面的对比:Struts 1要求Action类继承一个抽象基类:Struts 1的一个具体问题是使用抽象类编程而不是接口.Struts 2 Action类可以实现一个Acti ...

  6. Struts1、Struts2及SpringMVC对比

    Struts2其实并不是一个陌生的Web框架,Struts2是以Webwork的设计思想为核心,吸收了Struts1的优点,因此,可以认为Struts2是Struts1和Webwork结合的产物. 简 ...

  7. Struts1与Struts2对比分析

    Struts2其实并不是一个陌生的Web框架,Struts2是以Webwork的设计思想为核心,吸收了Struts1的优点,因此,可以认为Struts2是Struts1和Webwork结合的产物. 简 ...

  8. Struts与Struts2的区别

    Struts与Struts2的区别 首先看一张Struts2的发展路线图:       从Struts2的发展过程来看,Struts2继承了Struts与Webwork的特性,形成了新的框架.但是它的 ...

  9. Struts1和Struts2对照

    最近学习Struts1和Struts2.好多人.提到非常多的信息. Struts2不从Struts1进化. Struts2的前身WebWork. 呢,看了一些资料,下边就来比較比較. 一.架构分析 S ...

  10. struts1,struts2,springMVC对比

    struts1,struts2,springMVC对比 [参考原文:http://blog.csdn.net/xiaokui008/article/details/8980429] Struts1官方 ...

最新文章

  1. cordova版本更新_ionic4 APP版本更新
  2. IDEA界面太丑??尝试一下这几个插件!
  3. Linux的Nginx三:类型|特点
  4. cocos2d-x android 入门
  5. 大额存单20万起存,一次性存入40万能得到双倍利息吗?
  6. P3288-[SCOI2014]方伯伯运椰子【0/1分数规划,负环】
  7. 为什么选择SpringBoot?
  8. 作者:刘玮(1977-),男,中国科学院计算技术研究所网络数据中心、烟台中科网络技术研究所工程师。...
  9. poto——剧院魅影——phantom of the opera
  10. Python UnicodeEncodeError: ‘gbk‘ codec can‘t encode character 解决方法
  11. 【OpenCV学习笔记】【教程翻译】五 (车牌识别之OCR分割)
  12. 三天,我通过了Apsara Clouder基础技能认证:阿里巴巴Android开发规范
  13. 多家国产独立游戏厂商发布反淘宝盗版联合声明
  14. 突破与升维,技术赋能下的新时代企业营销攻略(附报告下载)
  15. Vim常用技巧--查看不可见字符
  16. python自动填表格_Windows下使用python3 + selenium实现网页自动填表功能
  17. 电路的网孔电流法建模 matlab,第3节 网孔电流法
  18. 谁是谷歌想要的人才--面试
  19. 用Python可视化分析全球火山分布,发现了这些有趣的现象
  20. 基于javaweb+mysql的网上图书商城网上书店(java+SSM+Jsp+MySQL+Redis+JWT+Shiro+RabbitMQ+EasyUI)

热门文章

  1. 微信小程序获取用户手机号异常的问题解决
  2. PowerDesigner 下载地址
  3. uchome二次开发
  4. WiFi万能钥匙要做人与场景的连接器
  5. java混淆工具zelix比较_Java混淆器和java混淆编译
  6. 暗组2007 专业版 V6.1 800MB超大容量!迅雷 BT下载
  7. Clean Code(代码整洁之道)-有意义的命名
  8. 如何保存html文件中的照片,如何保存网页上的文字和图片?
  9. flash 调试版本
  10. erdas几何校正_erdas几何校正学习.doc