2.2.2 Spring MVC和Struts 2的区别
- 从机制上来说,
Spring MVC
的入口是Servlet
,而Struts 2
的入口是filter
,这样就导致了二者的机制不同。 - 从性能上来说,
Struts 2
是基于类的设计,每发一次请求都会创建一个Action
实例,每个Action
都会被注入属性;- 而
Spring MVC
是基于方法的设计,粒度更细,一个方法对应一个request
上下文,而方法同时又跟一个URL
对应,从架构本身上Spring MVC
就非常容易实现RESTful URL
,而Struts 2
的架构实现起来相对麻烦,因为Struts 2
中Action
的一个方法可以对应一个URL
,但是类属性却被所有方法共享,这也就无法用注解或其他方式标识属性所属的方法。由于Struts 2
需要针对每个request
进行封装,把request
、session
等Servlet
生命周期的变量封装成一个一个的Map
,提供给每个Action
使用,并保证线程安全,所以在原则上,Struts 2
是比较耗费内存的,所以Spring MVC
在性能上高于Struts 2
。
- 从参数上来说,
Spring MVC
的方法之间基本上是独立的,独享工request
和response
数据,请求数据通过参数获取,处理结果通过Model
交回给框架,方法之间不共量;而Struts 2
虽然方法之间也是独立的,但其所有Action
变量是共享的,每次来了请求就创建一个Action
,一个Action
对象对应一个request
上下文. - 从设计思想上来说,
Strut s2
使用的是拦截器
(Interceptor
)机制,而Spring MVC
使用的是独立的AOP
方式,这样导致Struts 2
的配置文件量还是比Spring MVC
大,Spring MVC
的使用更加简洁。 - 从数据验证上来说,
Spring MVC
的验证功能是一个亮点,支持JSR303
,处理Ajax
的请求更是方便,只需一个注解@ResponseBody
,然后直接返回响应文本即可,而Struts2
的验证则比较烦琐。 - 从配置上来说,在实际项目开发中使用
Struts 2
时大多采用传统的配置文件的方式,Spring MVC
除了配置springmvc-servlet.xml
文件之外,已经是100%的零配置开发,所以在开发效率上高于Struts2
。