struts1和struts2的区别

来源:互联网 发布:mac mpv 安装 编辑:程序博客网 时间:2024/06/07 02:08

struts1的缺点

struts1主要有三个缺点:

(1)支持的表现层技术比较单一;

 (2)和servlet api严重耦合,难于测试;

(3)属于嵌入式设计,影响代码重用。

struts2和struts1的区别

struts2是在struts1和webwork的基础之上发展起来的。它的核心其实是webwork。

struts2基本上改进了上面struts1的缺点。
他们的区别主要有以下几个方面:

ACTION类

struts1要求Action类扩展自一个抽象基类,他的一个共有的问题就是面向抽象类编程而不是面向接口编程;
struts2的Action类实现了一个ACTION接口,连同其他的接口一起来实现可选择和自定义的服务。当然struts2的Action接口并不是必须的。任何execute()方法的POJO对象都可以被当做struts2的Action对象来使用。

线程模型

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

  struts2的action对象为每一个请求都实例化对象,所以没有线程安全的问题。

servlet依赖

struts1的action类依赖于servlet API,当action被调用时,以httpservletrequest和httpservletresponse作为参数传给execute方法。

struts2的action和容器无关,servlet上下文被表现为简单的maps,允许action被独立的测试,struts2的action可以访问最初的请求,但是,应该尽可能的避免其他元素直接访问httpservletrequest和httpservletresponse。

易测性

测试struts1的主要问题是execute方法暴露了servlet API,这使得测试要以来容器。

struts2的action可以通过初始化、设置属性和调用方法来测试。依赖注入色支持也使得测试变得更加简单。


捕获输入

struts1使用ACTIONFORM对象来捕获输入。和action一样,所以actionform必须扩展基类,因为其他的javabean不能作为actionform使用,开发者经常创建多余的类来捕获输入。
struts2直接使用ACtion属性作为输入属性,消除了对第二个输入对象的需求,Action属性能够通过web页面上的taglibs访问。struts2也支持actionform模式,简化了taglib对POJO输入对象的引用。

表达式语言

struts1整合了JSTL,所以使用JSTL的表达式语言,表达式语言支持基本的图形对象移动,但是对集合和所以属性的支持很弱。
struts2使用JSTL,但是ahi支持一个更强大的OGNL。

类型转换


struts1的Actionform属性经常都是string,struts1使用common-beanutils来进行类型转换,转换每个类,而不是对每个实例进行配置。
struts2内置了转换器,对于日期、整数或者浮点数等类型会自动调用相对于的转换器进行类型转换。

视图支持


struts1只支持JSP作为其表现层技术,没有提供对目前流行的freemaker/velocity的支持;
struts2支持freemaker/velocity等,配置简单。
原创粉丝点击