Struts1与Struts2的那些事

一、概述


Struts1以ActionServlet作为核心控制器,由ActionServlet负责拦截用户的全部请求。Struts1框架有3个重要组成部分:Action、ActionForm和ActionForward对象。

ActionForm必须实现ActionForm的基类,设计上并非真正的POJO

ActionForward就是一个逻辑视图,通过在配置文件里定义ActionFoward的映射,完毕逻辑视图名和实际视图资源之间的映射


Struts2核心控制器:FilterDispatcher。它事实上并非一个陌生的Web框架,Struts2是以Webwork的设计思想为核心。吸收了Struts1的长处,因此。能够觉得Struts2是Struts1和Webwork结合的产物。

由此可见Struts1和Struts2有着藕断丝连的关系,先从断说起,Struts2并非Struts1的升级。它在实现原理和编程应用上与Struts1都全然不同。能够说彻底抛弃了Struts1的框架。何为连?尽管WebWork在设计上确实要比struts1先进,但因为用户习惯问题。所以非常难被普及,仅仅有挂羊头卖狗肉才会被市场逐步接受,基于这些原因。WebWork开发团队与Struts1开发团队開始合作。借struts1之名。行WebWork之实,推出了Struts2。

通过以上对二者的简单了解,主要从下面10点来说明他们之间有什么差别:

二、对照


特征


Struts 1


Struts 2


Action类


Struts1的action须要去继承一个抽象基类。一个普遍问题就是Struts1是面向抽象类编程来取代接口编程


Struts2的action能够实现一个Action接口,也能够同一时候实现一些其它的接口来添置一些附加的,经常使用的服务。Struts2提供一个基类ActionSupport实现了一些经常使用的接口。尽管Action接口不是必须的。不论什么附带execute方法的POJO对象都能够作为Struts2的action对象。


线程模型


Struts1的action是单例的并且必须是线程安全的。由于该类会仅仅有唯一一个引用来为action处理全部的请求。单例策略会限制Struts1的action的功能以及须要扩展的额外的功能(The singleton strategy places restrictions on what can be done with
Struts 1 Actions and requires extra care to develop)。

Struts1的action必须是线程安全的而且是同步的。


Struts2的Action对象是针对每个请求的,所以自然也就不存在线程安全问题了。

(实践中。servlet容器给每个请求产生很多丟弃的对象,而且不会导致性能和垃圾回收问题)


Servlet的依赖


Struts1的Action依赖于Servlet API,由于当Action被调用的时候HttpServletRequest和HttpServletResponse对象是通过execute方法进行处理的。


Struts2的Action和容器的连接并不紧密。通常servlet上下文被描绘成简单的Map映射。同意Action被单独測试。当然,假设须要的话Struts2的Action也能够通过訪问初始的request和response来完毕一些功能。

然而,其它的一些架构元素导致减少或者删除了直接訪问request和response的需求。


易測试性


測试Struts1的Action有一个大障碍就是execute方法是直接暴露于servlet API的。


Struts2的Action能够非常easy的通过设置属性调用方法来进行測试。

当然依赖注入的支持也使得測试变得简单。


输入处理


Struts1使用一个ActionForm对象来获取用户的输入。和action一样。全部的ActionForm都必须继承自一个基类。由于其它的javaBean不能被用作ActionForm,开发人员通常要写一些多余的类来获取用户输入。

DynaBean能够被用做生成ActionForm类的一个选择,可是开发人员须要对现有的javaBean进行重写。


Struts2使用Action属性作为输入属性,除掉了对于输入对象的需求。

输入属性能够是一个拥有他自己的属性的对象。

Action属性是通过标签和web页面交互。Struts2也支持ActionForm模型,就是POJO的Form对象和POJO的Action。

多数的对象类型。包含商业逻辑对象和领域对象都能够作为输入/输入对象。模式驱动特征简化了标签和POJO输入对象的关系。


表达式语言


Struts1和JSTL结合,所以他能够使用JSTL的EL。


Struts2也支持JSTL,可是这个框架也支持更加强大的表达式语言OGNL.


表现层和类型值的绑定


Struts1使用标准的JSP机制将对象绑定到page context来进行訪问。


Struts2使用”ValueStack”技术,所以标签不用将视图和表现的对象结合就能够得到值.ValueStack策略同意通过一系列可能具有同样属性名字可是不同属性类型的的类型来完毕视图的重用,


类型转换


Struts1的ActionForm通常都是String类型。Struts1通过Commons-Beanutils实现类型转换。


Struts2使用OGNL实现类型转换,框架包括了对基础和公共类型的转换器。


验证


Struts1支持通过ActionForm中的validate方法实现手工验证。也能够通过扩展通用的验证框架进行验证。对于同一个类能够有不同的验证。可是不能关联到子对象的验证。


Struts2也支持通过validate方法进行手工验证以及Xwork验证框架进行验证。Xwork验证框架支持将验证链接到子属性,子属性使用了为属性类型和验证上下文定义的验证。


Action运行的控制


Struts1支持为每个模块分配请求处理(生命周期)。可是一个模块中的全部Action必须分享同样的生命周期。


Struts2支持通过拦截器栈为每一个Action创建不同的生命周期。通常对于不同的Action依据须要都要有相应的栈被创建和使用。

三、总结

通过以上对Struts1和Struts2的对照。让我们更明白了它们各自的优缺点。非常显然Struts2是站在前辈的基础上设计出来。它会改善和完好Struts1中的一些缺陷,Struts1中的一些悬而未决问题在Struts2得到了解决。可是struts1是老牌框架,应用非常广泛。有非常好的群众基础,开发者比較好招。项目开发的风险小,成本更低。所以两者的选用视情况而定。

时间: 2024-08-25 14:12:47

Struts1与Struts2的那些事的相关文章

struts1,struts2,springMVC终极对比

最近做项目用到了struts2,之前一直是用struts1和springMVC.感觉到了struts2从很大程度上和这两个还是有很大区别的,所以今天搜集了些资料,给他们做一下对比. Struts1官方已经停止更新,现在用的也比较少,这里主要讲一下struts2和struts1比较都有哪些不同和进步.Struts2可以说不是完全从struts1改进来的,因为struts2原本就是举世闻名的Webwork2,在经历几年的发展之后,struts和WebWork社区决定合二为一,也就是今天的struts

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

Struts2其实并不是一个陌生的Web框架,Struts2是以Webwork的设计思想为核心,吸收了Struts1的优点,因此,可以认为Struts2是Struts1和Webwork结合的产物. 简单来说二者的区别是: 一个是Stuts1 ,一个是Stuts2,这是最大的区别,技术方面,Stuts1有个核心控制器,但是只提供了一个接口,也就是execute,还要配置actionform之类的,很麻烦,所以依赖性比较强:而Stuts2是针对拦截器开发的,也就是所谓的AOP思想,可以配置多个act

struts1与struts2的区别

Struts2其实并不是一个陌生的Web框架,Struts2是以Webwork的设计思想为核心,吸收了Struts1的优点,因此,可以认为Struts2是Struts1和Webwork结合的产物. 简单来说二者的区别是: 技术方面,Stuts1有个核心控制器,但是只提供了一个接口,也就是execute,还要配置actionform之类的,很麻烦,所以依赖性比较强:而Stuts2是针对拦截器开发的,也就是所谓的AOP思想,可以配置多个action,用起来比较方便,但是因为请求之前的拦截器有一些注入

struts1与struts2的差别

?? Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架.其全新的Struts 2的体系结构与Struts 1的体系结构区别巨大.Struts 2以WebWork为核心,採用拦截器的机制来处理用户的请求,这种设计也使得业务逻辑控制器可以与ServletAPI全然脱离开.所以Struts 2可以理解为WebWork的更新产品. struts1的工作原理图: 1.初始化:struts框架的总控制器ActionServl

Struts1和Struts2的区别和对比

Struts1和Struts2的区别和对比: Action 类: • Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口. • Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能.Struts2提供一个ActionSupport基类去 实现 常用的接口.Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象. 线程模式: • Stru

总结了Struts1与Struts2的12点区别

1) 在Action完成类方面的号码大全比照:Struts 1需求Action类承继一个笼统基类关键词挖掘工具:Struts 1的一个详细问题是运用笼统类编程而不是接口.Struts 2 Action类可以完成一个Action接口,也可以完成其他接口,使可选和定制的效劳成为可能.Struts 2供给一个ActionSupport基类去完成常用的接口.即便Action接口不是有必要完成的,只要一个包含execute办法的POJO类都可以用作Struts 2的Action. 2) 线程形式方面的比照

Struts1和struts2的区别(总结)?

struts1和Struts2的区别和对比:(欢迎补充) Action类: ?Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口. ?Struts2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能.Struts2提供一个ActionSupport基类去实现常用的接口.Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象. 线程模式: ?Strut

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

Struts1和Struts2的区别和对比: Action 类: • Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口,而struts2的Action是接口. • Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能.Struts2提供一个ActionSupport基类去 实现 常用的接口.Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Act

struts1与struts2的区别d

• Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口.• Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能.Struts2提供一个ActionSupport基类去 实现 常用的接口.Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象. 线程模式:• Struts1 Action是单例模式并且必须是线程安全的,因为仅有Actio