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框架太厉害了。

"随着年龄的增长,人总会变得越来越宽容,很多事情到最后并不是真的解决了,而是【算了吧】。"

最新文章

  1. 微信第三方平台定时接收component_verify_ticket
  2. java 一些图片
  3. 正则化方法:L1和L2 regularization、数据集扩增、dropout
  4. svn使用--all-static编译,移植到其它系统上可能使setlocale等GLIBC相关库函数调用失败
  5. .Net Framework 3.5, 3.5 sp1 中文版离线安装
  6. Python (1) - 7 Steps to Mastering Machine Learning With Python
  7. innertext与innerhtml
  8. iOS开发——技术精华Swift篇&Swift 2.0和Objective-C2.0混编之第三方框架的使用
  9. [Gauss]POJ2065 SETI
  10. C#数组的使用
  11. 用Altium designer画PCB的一般心得
  12. Android学习笔记总结
  13. POJ 3685 二分套二分
  14. java网页爬数据获取class中的空格
  15. jQuery效果之封装一个文章图片弹出放大效果
  16. GetLastError
  17. python魔法方法
  18. [Mysql]——通过例子理解事务的4种隔离级别
  19. 行为模式--代理Proxy模式(Java)
  20. Aerospike系列:6:AerospikeTools & Utilities

热门文章

  1. 剑指 Offer——2. 替换空格
  2. php取整的几种方式,四舍五入,舍去法取整,进一法取整
  3. mysql判断是否包含某个字符的方法
  4. JMETER 用户变量作用域
  5. (转)linux内核虚拟文件系统浅析【转】
  6. qt需求
  7. 201871010107-公海瑜《面向对象程序设计(java)》第八周学习总结
  8. jenkins slave上执行脚本报错
  9. python中调用httpclient接口的实例代码
  10. uiautomator 调试例子