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。