StrutsStruts2的区别

首先看一张Struts2的发展路线图:

      从Struts2的发展过程来看,Struts2继承了Struts与Webwork的特性,形成了新的框架。但是它的称呼只是在“Struts”后面添加一个“2”,显然Struts2还是更多的继承了Struts的设计思想,并加入了WebWork的特点。下面将从十个方面来说明Struts与Struts2之间的不同点:

(1)Action

在Struts中都是使用抽象类编程而不是接口,因此它要求开发的Action类继承一个抽象基类,如DispatchAction等;

Struts2则基于接口编程,我们的Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现常用的接口。更加强大的是,在Struts2中Action接口不是必需的,任何有execute()函数的POJO对象都可以用作Struts2的Action类来使用。

(2)线程模式

Struts的Action是单例模式并且是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了StrutsAction能做的事,并且要在开发时特别小心,Action资源必须是线程安全的或者同步的;

Struts2的Action对象为每一个请求产生一个实例,因此没有线程安全的问题。

(3)Servlet依赖

Struts的Action依赖于ServletAPI,当一个Action被调用时,HttpServletRequest和HttpServletResponse被传递给执行的方法;

Struts2的Action不依赖于容器,运行Action脱离容器单独被测试。如果需要,Struts2的Action仍然可以访问初始的request和response。

(4)可测试性

测试StrutsAction的一个主要问题是,execute()方法暴露了ServletAPI,这使得测试要依赖于容器。

Struts2Action的类是POJO类,因此可以直接编写测试类来进行测试,只需要在测试类中为Action注入属性即可。

(5)捕获输入

Struts使用ActionForm对象捕获用户输入,所有的ActionForm必须继承一个基类ActionForm。因为其他的JavaBean不能用作ActionForm,开发者经常创建多余的类捕获输入。动态表单可以作为创建传统ActionForm的选择,但是,开发者可能是在重新创建已经存在的JavaBean,仍然会导致有冗余的JavaBean;

Struts2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己子属性的rich对象模型。Action属性能够通过Web页面上的taglibs访问。同时,Struts2也支持ActionForm模式。

(6)表达式语言

Struts整合了JSTL,这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱;

Struts2可以使用JSTL,但是也支持一个更强大和灵活表达式语言OGNL。

(7)绑定值到页面

Struts使用标准JSP机制把对象绑定到页面中来访问;

Struts2使用ValueStack(值堆栈)技术,使taglib能够访问值,而不需要把你的页面和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面。

(8)类型转换

Struts的ActionForm属性通常都是String类型,并使用Commons-Beanutils进行类型转换。每个类提供一个转换器,对每一个实例来说都是不可配置的;

Struts2使用表达式语言OGNL进行类型转换,提供了基本和常用对象的转换器。

(9)数据校验

Struts支持在ActionForm的validate()方法中手动校验,或者通过Commons Validator的扩展来校验。同一个类可以有不同的校验内容,但不能校验子对象;

Struts2支持通过validate()方法和XWork校验框架来进行校验,XWork校验框架使用属性类型定义的校验和内容校验,来支持chain校验子属性。

(10)Action执行的控制

Struts支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期;

Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期,堆栈能够根据需要和不同的Action一起使用。

     总之,从实际开发的角度来说,Struts框架和Struts2框架的主要不同点在于Action类不同。

Struts与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. 关于SpringMVC和Struts2的区别

    1.    与struts2不同 1.  springmvc的入口是一个servlet即前端控制器,而struts2入口是一个filter过虑器. 2. springmvc是基于方法开发,传递参数是通 ...

  4. Struts1和Struts2的区别和对比

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

  5. Struts1与Struts2的区别

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

  6. springmvc的原理架构,Struts2运行原理,springmvc和Struts2的区别

    springmvc原理: 1.用户发起请求到控制器 DispatcherServlet(前端控制器) 2.前端控制器去handlerMapper查找Handler对象 3.HandlerMapper返 ...

  7. springmvc与struts2的区别

    1)springmvc的入口是一个servlet,即前端控制器,例如:*.action    struts2入口是一个filter过虑器,即前端过滤器,例如:/* 2)springmvc是基于方法开发 ...

  8. struts1和struts2的区别2

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

  9. Struts2之初识篇(一)——与struts的区别和基本配置

    正在学习Struts2,该类博客作为笔记整理之用,错误的地方望指正,后期还会不断修改完善. Struts2资源: Struts官方地址:http://struts.apache.org/ 我这里下载了 ...

最新文章

  1. php禁止组合热键,cad组合快捷键命令有哪些
  2. leetcode算法题--Can I Win
  3. 秀尔算法:破解RSA加密的“不灭神话” --zz
  4. jQuery和AngularJS的区别小分析
  5. html用bmob做留言,bmob js-sdk 在vue中的使用教程
  6. express 创建ejs项目,使用html
  7. java图形界面重写坐标_重写自由软件和计算机图形的历史
  8. STL库的内存配置器(allocator)
  9. SSM-水果商城-项目架构-学习-3
  10. 《那些年啊,那些事——一个程序员的奋斗史》四
  11. 多功能AD杀手AD7124 效果理想 原理图经验分享+实物图
  12. [渝粤教育] 新乡医学院三全学院 医学分子生物学 参考 资料
  13. 【CodeChef-LYRC】Music Lyrics【AC自动机】
  14. 指数型基金基本信息 API 数据接口
  15. 抖音上超火系列的透明头像是怎么弄的?操作原来如此简单
  16. Failing because I am unlikely to write too排查方案
  17. 幽默感也有套路:可用数学模型量化
  18. 修改Linux下只读文件的权限
  19. 2018辽大计算机拟录取,四川大学计算机学院2018年硕士研究生招生拟录取名单及成绩公示...
  20. 《性能之巅—洞悉系统、企业与云计算》读书笔记---第二章

热门文章

  1. python dict批量选择_这一定是你见过最全面的python重点
  2. idea 断点下一步快捷件_Intellij IDEA 创建控制台项目,断点调试快捷方式
  3. 计算机算法知识点总结,2021计算机考研知识点总结(1)
  4. eggjs增删改查MySQL,nodejs操作mysql实现增删改查
  5. css img 适配尺寸_img图片自适应布局_HTML5教程_郭隆邦技术博客
  6. android 程序更换字体,Android修改自己程序字体的方法详解
  7. 1157 全是1的最大子矩阵
  8. MySQL安装过程中出现的vcruntime140.dll缺失
  9. 中公事业单位计算机模拟试题,事业单位考试计算机基础知识模拟试题汇总—单选题(2)...
  10. jquery清除所有cookie