本质区别:
1、 springMVC基于方法的开发,我们可以通过我们的代码中,我们没有所谓的数据域对象,除了引用的service就只有方法,而Struts2是基于类的开发,该类中有各种各样的全局变量,因此我们说Struts2基于类的开发。
2、 springMVC可以单例开发,并且建议单例开发,因为springMVC通过controller的形参接收数据,方法结束后形参数据销毁;而Struts2则是通过模型驱动或者属性驱动获取数据,而且这些变量都是全局变量,因此Struts2是多例开发。
3、 经常会说Struts2框架性能不好,是由于使用了Struts2的标签,从而加载很多的服务导致所谓的框架慢,所以我们建议使用页面使用jstl
4、 所谓框架的性能,是与提供的服务的多少有关,而不是根据包的大小有关。
为什么Struts2中的action要配置成多例:
struts 2的Action是多实例的并非单例,因为一个Action中包含很多方法,也就是每次请求action中的一个方法时,就会产生一个Action的对象。原因是:struts 2的Action中包含数据,例如你在页面填写的数据就会包含在Action的成员变量里面。如果Action是单实例的话,这些数据在多线程的环境下就会相互影响,例如造成别人填写的数据被你看到了。
springMvc有多个请求一个controller时,是同一个controller,是单例。但是对应的方法里面的局部变量不是单例,每次进来对应的是不同的model。