-核心控制器不同:SpringMVC入口是一个servlet前端控制器(DispatcherServlet),Struts2入口是一filter过滤器(StrutsPrepareAndExecuteFilter);
-拦截器实现机制上:Struts2有以自己的interceptor机制,SpringMVC用的是独立的AOP方式,这样导致Struts2的配置文件量还是比SpringMVC大。
-拦截层级不同:
(1)Struts2是类级别的拦截:每次请求就会创建一个Action,一个Action对应一个request和response上下文,在接收参数时,可以通过属性接收,这说明属性参数是让多个方法共享的,而Action中,一个方法可以对应一个url,而其类属性却被所有方法共享,导致无法确定或标识“属性”所属的方法,只能设计为prototype多例,确保一次Action请求,请求参数和请求Action一一对应,以确保请求的准确性,同时也有效的避免了高并发。
(2)SpringMVC是方法级别的拦截:一个方法对应一个Request上下文,参数的传递是直接注入到方法中的,独享request,response数据,所以默认对所有的请求,只会创建一个Controller。
-性能:SpringMVC和Spring是无缝的,并集成了Ajax,使用非常方便,只需一个注解@ResponseBody就可以实现,然后直接返回响应文本即可, 而Struts2拦截器集成了Ajax,在Action中处理时一般必须安装插件或者自己写代码集成进去, 使用起来也相对不方便,与SpringMVC相比,配置繁琐,使用麻烦,且效率也低
总结:SpringMVC开发效率和性能高于Struts2