目前企业中的项目开始大部分使用Spring+SpringMVC+MyBatis,很少有使用Struts2了,除了一些老的传统项目去使用。

Struts2框架是类级别的拦截,每次请求就会创建一个Action,然后通过Action自带的setter,getter方法把请求的数据注入到Action类的属性。

而SpringMVC是方法级别的拦截,一个方法对应一个Request上下文,所有方法直接基本上是独立的,独享Request,Response数据。而每个方法同时又和一个URL对应,参数的传递是直接注入到方法中的,是方法所独有的。

在Struts2框架中,虽然方法之间也是独立的,Action的一个方法可以对应一个URL,而其类属性却被所有方法共享,每次来了请求就创建一个Action,一个Action对象对应一个Request上下文,所以在原则上,是比较耗费内存的。而SpringMVC默认对所有的请求,只会创建一个Controller,所以相比而言,SpringMVC更高效。

另外,还有不可忽略的生态问题,SpringMVC和Spring是无缝的,从项目的管理和安全上也比Struts2高很多。Struts2框架漏洞真是触目惊心,更是造成其短命的直接杀手。