转载自:http://www.blogjava.net/sterning/archive/2007/07/17/130892.html

特性

Struts1.x

Struts2

Action

Struts1.x要求Action类要扩展自一个抽象基类。Struts1.x的一个共有的问题是面向抽象类编程而不是面向接口编程。

Struts2的Action类实现了一个Action接口,连同其他接口一起来实现可选择和自定义的服务。Struts2提供一个名叫ActionSupport的基类来实现一般使用的接口。当然,Action接口不是必须的。任何使用execute方法的POJO对象可以被当作Struts 2的Action对象来使用。

线程模型

Struts1.x Action类是单例类,因为只有一个实例来控制所有的请求。单例类策略造成了一定的限制,并且给开发带来了额外的烦恼。Action资源必须是线程安全或者同步的。

Struts2 Action对象为每一个请求都实例化对象,所以没有线程安全的问题。(实践中,servlet容器给每一个请求产生许多丟弃的对象,并且不会导致性能和垃圾回收问题)。

Servlet 依赖

Struts1.x的Action类依赖于servlet API,当Action被调用时,以HttpServletRequest和HttpServletResponse作为参数传给execute方法。

Struts2的Action和容器无关。Servlet上下文被表现为简单的Maps,允许Action被独立的测试。Struts2的Action可以访问最初的请求(如果需要的话)。但是,尽可能避免或排除其他元素直接访问HttpServletRequest或HttpServletResponse。

易测性

测试Struts1.x的主要问题是execute方法暴露了Servlet API这使得测试要依赖于容器)。第三方的扩展,如Struts TestCase,提供了一套Struts1的模拟对象(来进行测试)。

Struts2的Action可以通过初始化、设置属性、调用方法来测试。依赖注入的支持也是测试变得更简单。

捕获输入

Struts1.x使用ActionForm对象来捕获输入。象Action一样,所有的ActionForm必须扩展基类。因为其他的JavaBean不能作为ActionForm使用,开发者经常创建多余的类来捕获输入。DynaBeans可以被用来作为替代ActionForm的类来创建。但是,开发者可能是在重新描述(创建)已经存在的JavaBean(仍然会导致有冗余的javabean)。

Struts2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己(子)属性的rich对象类型。Action属性能够通过web页面上的taglibs访问。Struts2也支持ActionForm模式。rich对象类型,包括业务对象,能够用作输入/输出对象。这种ModelDriven 特性简化了taglib对POJO输入对象的引用。

表达式语言

Struts1.x整合JSTL,所以它使用JSTL的表达式语言。表达式语言有基本的图形对象移动,但是对集合和索引属性的支持很弱。

Struts2使用JSTL,但是也支持一个更强大和灵活的表达式语言--"Object Graph Notation Language" (OGNL)。

将值绑定到页面

Struts1.x使用标准JSP机制来绑定对象到页面上下文。

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

类型转换

Struts1.x的ActionForm属性经常都是String。Struts 1.x使用Commons-Beanutils来进行类型转换。转换每一个类,而不是为每一个实例配置。

Struts2使用OGNL进行类型转换。提供基本和常用对象的转换器。

验证

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

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

Action执行控制

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

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

Struts2和Struts1.x的全面比较一相关推荐

  1. Struts2与Struts1的对比

    Struts2与Struts1的对比 Action 类: • Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口. • Struts 2 Acti ...

  2. Struts2和Struts1.x的全面比较

    Struts2和Struts1.x的全面比较 为了对Struts2和Strtus1.x进行全面的比较,让读者了解这两种框架各自的优缺点,以便于在自己的项目中,根据实际情况,选择合适的框架,对它们两者进 ...

  3. Struts2与Struts1的对比学习(一)

    写在前面: Struts1官方已经停止更新,现在用的也比较少,但是了解Struts1可以帮助我们更好的理解Struts2. 我们不能简单的把Struts2理解为Struts1的升级,甚至可以说这样理解 ...

  4. Struts2和Struts1的不同

    转载(没看懂) Action 类 ◆Struts1要求Action类继承一个抽象基类org.apache.struts.action.Action.Struts1的一个普遍问题是使用抽象类编程而不是接 ...

  5. struts2与struts1整合,java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory

    原因:我往项目的WEB-INF/lib中导入了struts2基本的包,还有struts1的core包,以及struts2-strut1-plugin的包,但是没有导入commons-loggin-1. ...

  6. Struts2与Struts1的区别

    Struts2是基于WebWork的一个全新框架. 不过有了Struts1的基础,学Struts2更方便. Struts2主要改进是取代了Struts1的Servlet和Action. Struts2 ...

  7. struts2和struts1认识

    1.Struts 2基本流程 Struts 2框架本身可以大致分3部分:核心控制器FilterDispatcher.业务总监Action与用户实现企业业务逻辑组件. 核心控制器FilterDispat ...

  8. Struts2前身Struts1是如何转起来的呢

    Struts1运行原理: 在启动时通过前端总控制器ActionServlet加载struts-config.xml并进行解析当用户在jsp页面发送请求被struts1的核心控制器ActionServl ...

  9. Struts1和Struts2对照

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

最新文章

  1. 【Qt】错误处理:error: undefined reference to `qMain(int, char**)‘
  2. sql array 数组基本用法(三)
  3. Python - 字符串
  4. springboot的自动配置原理
  5. Refer to the WebSite
  6. DotNetty 实现 Modbus TCP 系列 (三) Codecs Handler
  7. Flutter AnimatedSwitcher 动画切换组件的基本使用
  8. Django案例:显示图书信息
  9. linux 文本操作
  10. nodejs应用转换png,jpg,gif为webp图片格式
  11. 05人月神话阅读笔记
  12. bzoj 1800: [Ahoi2009]fly 飞行棋
  13. mysql报错:You must at least set –server-id to enable either a master or a slave
  14. OpenHarmony AI图像识别开发—基于润和Hi3516开发套件
  15. 周志华团队和蚂蚁金服合作:用分布式深度森林算法检测套现欺诈
  16. esp8266 接入 Amazon alexa智能家居
  17. mysql redo 结构_MySQL redo log 格式解析
  18. 一个月薪 12000 的北京程序员的真实生活 !
  19. 使用jupyter环境在数据集处理中遇到.ipynb_checkpoints no such file or directory的问题
  20. PostgreSQL的学习心得和知识总结(十九)|数据库游标详细使用说明及特性总结(全网最精细最详尽 仰望星空也要脚踏实地)

热门文章

  1. DAO、Service、Controller及View层级结构梳理
  2. [洛谷P2124] 奶牛美容
  3. Raspberry学习——raspberry pi 3 截图及查看
  4. linux网口驱动实现(待续)
  5. Android 开发工具类 02_DensityUtils
  6. 关于Panel隐藏横向滚动条
  7. 软件工程综合实践专题第三次个人博客作业
  8. Spring @Configuration 和 @Bean 注解
  9. 2018-2019 20165227《信息安全系统设计基础》第三周学习总结
  10. C# Newtonsoft.Json 应用