Struts2和Struts1的不同
转载(没看懂)
Action 类
◆Struts1要求Action类继承一个抽象基类org.apache.struts.action.Action。Struts1的一个普遍问题是使用抽象类编程而不是接口。
◆Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现 常用的接口。Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象。
线程模式
◆Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能做的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的。
◆Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。(实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题)
Servlet 依赖
◆Struts1 Action 依赖于Servlet API ,因为当一个Action被调用时HttpServletRequest和HttpServletResponse 被传递给execute方法。
◆Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。如果需要,Struts2 Action仍然可以访问初始的request和response。但是,其他的元素减少或者消除了直接访问HttpServetRequest 和 HttpServletResponse的必要性 (HttpServletRequest) ActionContext.getContext().get(StrutsStatics.HTTP_REQUEST)。
可测性
◆测试Struts1 Action的一个主要问题是execute方法暴露了servlet API(这使得测试要依赖于容器)。一个第三方扩展--Struts TestCase--提供了一套Struts1的模拟对象(来进行测试)。
◆Struts 2 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。
捕获输入
◆Struts1 使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类org.apache.struts.action.ActionForm。因为其他JavaBean不能用作ActionForm,开发者经常创建多余的类捕获输入。动态Bean(DynaBeans)可以作为创建传统ActionForm的选择,但是,开发者可能是在重新描述(创建)已经存在的JavaBean(仍然会导致有冗余的javabean)。
◆ Struts 2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己(子)属性的rich对象类型。Action属性能够通过web页面上的taglibs访问。Struts2也支持ActionForm模式。rich对象类型,包括业务对象,能够用作输入/输出对象。这种ModelDriven 特性简化了taglib对POJO输入对象的引用。
表达式语言
◆Struts1 整合了JSTL,因此使用JSTL EL。这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱。
◆Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言--"Object-Graph Navigation Language" (OGNL对象图导航语言).
绑定值到页面(view):
◆ Struts 1使用标准JSP机制把对象绑定到页面中来访问。
◆Struts 2 使用 "ValueStack"技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。
类型转换
◆Struts 1 ActionForm 属性通常都是String类型。Struts1使用Commons-Beanutils进行类型转换。每个类一个转换器,对每一个实例来说是不可配置的。
◆Struts2 使用OGNL进行类型转换。提供基本和常用对象的转换器。
校验
◆Struts 1支持在ActionForm的validate方法中手动校验,或者通过Commons Validator的扩展来校验。同一个类可以有不同的校验内容,但不能校验子对象。
◆Struts2支持通过validate方法和XWork校验框架来进行校验。XWork校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性
Action执行的控制
◆Struts1支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期。
◆Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用。
转载于:https://www.cnblogs.com/sara-gcj/p/3307463.html
Struts2和Struts1的不同相关推荐
- Struts2与Struts1的对比
Struts2与Struts1的对比 Action 类: • Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口. • Struts 2 Acti ...
- Struts2和Struts1.x的全面比较
Struts2和Struts1.x的全面比较 为了对Struts2和Strtus1.x进行全面的比较,让读者了解这两种框架各自的优缺点,以便于在自己的项目中,根据实际情况,选择合适的框架,对它们两者进 ...
- Struts2与Struts1的对比学习(一)
写在前面: Struts1官方已经停止更新,现在用的也比较少,但是了解Struts1可以帮助我们更好的理解Struts2. 我们不能简单的把Struts2理解为Struts1的升级,甚至可以说这样理解 ...
- Struts2和Struts1.x的全面比较一
转载自:http://www.blogjava.net/sterning/archive/2007/07/17/130892.html 特性 Struts1.x Struts2 Action类 Str ...
- struts2与struts1整合,java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
原因:我往项目的WEB-INF/lib中导入了struts2基本的包,还有struts1的core包,以及struts2-strut1-plugin的包,但是没有导入commons-loggin-1. ...
- Struts2与Struts1的区别
Struts2是基于WebWork的一个全新框架. 不过有了Struts1的基础,学Struts2更方便. Struts2主要改进是取代了Struts1的Servlet和Action. Struts2 ...
- struts2和struts1认识
1.Struts 2基本流程 Struts 2框架本身可以大致分3部分:核心控制器FilterDispatcher.业务总监Action与用户实现企业业务逻辑组件. 核心控制器FilterDispat ...
- Struts2前身Struts1是如何转起来的呢
Struts1运行原理: 在启动时通过前端总控制器ActionServlet加载struts-config.xml并进行解析当用户在jsp页面发送请求被struts1的核心控制器ActionServl ...
- Struts1和Struts2对照
最近学习Struts1和Struts2.好多人.提到非常多的信息. Struts2不从Struts1进化. Struts2的前身WebWork. 呢,看了一些资料,下边就来比較比較. 一.架构分析 S ...
最新文章
- Java 之String、StringBuffer 和 StringBuilder 三者区别介绍
- 提升码农90%学习效率的10大学习工具
- matlab-基础 size 获取矩阵的行数与列数
- php中请写出定义变量的两种方法,php定义变量几种
- Skip宏块与Direct预测模式浅析
- 字节跳动测试开发4轮面试_字节跳动测试开发工程师一面总结
- JavaScript-函数
- 电商美工中秋节电商淘宝页面设计模板素材,临摹参考框架
- linux 创建交换文件格式,Linux系统下的交换分区和交换文件的含义 (创建交换分区文件基本文件的swap)...
- CppCheck C++静态代码检查工具在Visual Studio(VS)下的配置和使用
- 智能语言处理之依存树计算句子结构相似度计算
- 谈谈 MVX 中的 Model
- jsp内置对象-session对象
- 4ARM-PEG-DA 4Arm-PEG-ACRL 四臂PEG丙烯酸酯
- Foxdisk11-小字库显示汉字2
- windows11 数字键无法使用 修复办法 已解决
- Firefox的安装
- font-variant-numeric
- 腾讯零反射全动态Android插件框架Shadow解析
- 联邦学习框架 FederatedScope(1)快速入门