struts2被淘汰的原因
Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个Servlet。在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts2是Struts的下一代产品,是在Struts1和WebWork的技术基础上进行了合并的全新的Struts2框架。其全新的Struts2的体系结构与Struts1的体系结构差别巨大。Struts2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts2可以理解为WebWork的更新产品。虽然从Struts1到Struts2有着太大的变化,但是相对于WebWork,Struts2的变化很小。
Struts2在其流行的几年可谓是非常热门,不管你去哪个公司面试,都要求会SSH(Spring+Struts2+Hibernate),这里的SS指的是Spring和Struts2。但是现在,曾经风靡一时的Struts2最终被SpringMVC所取代,为什么会是这样的结果呢?如果你做了五年以上的开发了,那肯定是接触过Struts2,你一定会知道Struts2的配置文件可谓是最头疼的,如果项目大了,那Servlet和配置会让人疯掉。另外,Struts还有一个通病就是他的请求是基于类的,而SpringMVC是基于方法的,请求域的范围不一样,相比之下SpringMVC要灵活得多。
随着Spring快速的发展,使用SpringMVC的人也会随之增多。从另外一个角度来看,SpringBoot大家都很熟悉吧,零XML配置,全部采用JavaBean的形式,为什么SpringBoot能够快速的代替SpringMVC的xml配置呢,就是因为他减去了xml的配置,使维护起来更加方便。Struts2相比之下则显得十分臃肿,配置项太多。
如果说SpringMVC是初步淘汰了Struts2,那么SpringBoot的崛起基本上是彻底淘汰了Struts2,除了一些老项目还在维护之外,其他的新项目基本上都在用SpringBoot,谁也不想去用一个维护复杂,配置众多的项目。
这里列出几点:
1.Struts2的安全漏洞不胜枚举,曾经传言京东数据泄漏就是Struts2搞的鬼。
2.Struts2就是一个Web控制器框架,个人感觉最不好的一点就是,对post、get参数并没有区分对待,天然不支持RESTful API,导致xss攻击的更难防御。
3.Struts2对每一个Web请求,都会创建一个Action实例,耗时耗资源。
4.对于高并发业务,传统Web容器tomcat通常是顶不住的,很多团队会自己开发异步、并行、高性能网络通信引擎,这时候Struts2通常就会比较鸡肋了,一般会根据自身业务特点自行开发控制器框架。
5.Spring MVC和Spring是无缝的。从这个项目的管理和安全上也比Struts2高(当然Struts2也可以通过不同的目录结构和相关配置做到SpringMVC一样的效果,但是需要xml配置的地方不少)。
6.由于Struts2需要针对每个request进行封装,把request,session等servlet生命周期的变量封装成一个一个Map,供给每个Action使用,并保证线程安全,所以在原则上,是比较耗费内存的。
7.SpringMVC开发效率和性能高于Struts2。
......
最后总结来说,业务适合的框架才是好框架啦,Struts2被淘汰还是因为SpringMVC框架太厉害了。
"随着年龄的增长,人总会变得越来越宽容,很多事情到最后并不是真的解决了,而是【算了吧】。"