struts 1与struts 2对比

Strut1

1. 核心控制器是核心控制器ActionServlet,必须继承抽象基类Action,

2. 代码和ServletAPI大量耦合,单元测试必须通过启动Web容器,

3. 只支持JSP作为视图展现。

4. 单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求,需要注意Action的资源。

Struts1是单例模式,也就是所,Web容器(例如:Tomcat)启动的时候,就会实例化一个Action对象,那么所有请求都是用的这个对象。所以当遇到2个请求并发的时候,那么其实他们调用的是同一个类,这个时候当你在Action内部定义属性的时候,就会产生线程同步的问题。

例如:

你在Action定义了一个 int i = 0;

然后在这个Action里面的某一个方法里面对这个i进行操作。当并发的时候就会遇到问题。

所以:我们在用struts1的时候不能在action里面定义属性,要用到只的话只能在方法里面定义。

扫描二维码关注公众号,回复: 783115 查看本文章

 

Strut2

1. 核心控制器是核心控制器ServletDispatcher,

2. 代码更像是一个普通的POJO,ServletAPI相关的返回值都是Map,Strut2的系列拦截器会对其进行自动转换。

3. 可以降低代码的污染和更好的复用,支持多种试图展现。

4. 整合了OGNL语言,值栈。

5. 为每一个请求产生一个实例,不存在线程安全问题。

Struts 2 Action对象为每一个请求产生一个实例,因此没有线程安全问题 。所以我们可以在Struts2的Action里面去定义属性。

但是Struts2由于 Action和普通的Java类没有任何区别(也就是不用像Struts1里面那样去实现一个Struts的接口,有兴趣的朋友可以自己去了解),所以我们可以用Spring去管理Struts2的Action,这个时候我们就要注意了,因为当我们在spring里面去定义bean的时候,spring默认是Singleton,我们要改成Prototype。

转载自:http://www.cnblogs.com/NicholasLee/archive/2012/07/08/2581507.html

猜你喜欢

转载自leafca.iteye.com/blog/1743956