别在学Struts了
Posted IT老哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了别在学Struts了相关的知识,希望对你有一定的参考价值。
前言:
目前大部分人的简历上面都写了熟悉ssh框架,尤其是刚才学校走出来或者刚从培训机构出来的学生。但是学校讲的Java都是按照教科书来讲,教科书更新速度慢,赶不上互联网发展的速度,一般讲的都是几年前流行的技术。这个时候学生就需要自学,那么自学的教程就来源于网上的各种培训机构,有些大型培训机构技术更新还不错,赶上互联网的步伐。但是有些小培训机构,没有那么强的师资力量,这个时候就比较坑爹了,对于完全外行的人都是简单培训了基本的java语法、Java web,在教一下ssh,ssm的使用,然后在做一个简单的实战项目,帮你做好简历,就算完成了培训。小型培训机构最擅长的不是技术,而是吹牛和洗脑,最后等你培训完出来面试,发现好像过了一个世纪,默默的问自己,怎么培训的和企业里要求的不一样。
ssh在很多年前确实挺火,但现在struts已经没落 ,spring很春天,hibernate不温不火,个人觉得现在培训机构还在教这个是有点过时了, 花费了学生的时间,并且出去可能也找不到工作,因为现在互联网企业里,已经很少用Struts了,除非是很老的项目,可能还在用Struts维护着,但是你去做很老的项目,有什么用?
一、Struts简介
Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个Servlet。在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts2是Struts的下一代产品,是在Struts1和WebWork的技术基础上进行了合并的全新的Struts2框架。其全新的Struts2的体系结构与Struts1的体系结构差别巨大。Struts2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts2可以理解为WebWork的更新产品。虽然从Struts1到Struts2有着太大的变化,但是相对于WebWork,Struts2的变化很小。
二、Struts从兴盛到衰落
Struts2在其流行的几年可谓是非常热门,不管你去哪个公司面试,都要求会SSH(Spring+Struts2+Hibernate),这里的SS指的是Spring和Struts2。但是现在,曾经风靡一时的Struts2最终被SpringMVC所取代,如果你做了五年以上的开发了,那肯定是接触过Struts2,你一定会知道Struts2的配置文件可谓是最头疼的,如果项目大了,那Servlet和配置会让人疯掉。另外,Struts还有一个通病就是他的请求是基于类的,而SpringMVC是基于方法的,请求域的范围不一样,相比之下SpringMVC要灵活得多。随着Spring快速的发展,使用SpringMVC的人也会随之增多。从另外一个角度来看,SpringBoot大家都很熟悉吧,零XML配置,全部采用JavaBean的形式,使维护起来更加方便。Struts2相比之下则显得十分臃肿,配置项太多。
如果说SpringMVC是初步淘汰了Struts2,那么SpringBoot的崛起基本上是彻底淘汰了Struts2,除了一些老项目还在维护之外,其他的新项目基本上都在用SpringBoot,谁也不想去用一个维护复杂,配置众多的项目。
主要还是Struts本身有问题,加上spring家族实在是强大,这就是所谓的弱肉强食。
三、Struts漏洞
我们举两个比较著名的漏洞:S2-045(CVE-2017-5638)和S2-046(CVE-2017-5638)。漏洞消息公布后,在互联网界引起了轩然大波。
编号S2-045是基于Jakarta plugin插件的Struts远程代码执行漏洞。该漏洞会造成RCE远程代码执行,恶意用户可在上传文件时通过修改HTTP请求头中的Content-Type值来触发该漏洞,进而执行系统命令,可直接造成系统被控制。黑客通过Jakarta文件上传插件实现远程利用该漏洞执行代码。
编号S2-046的漏洞则是攻击者可通过Content-Length或者Content-Disposition构造恶意的OGNL内容,同样会造成远程代码执行。
还有很多其他的漏洞,几乎每个漏洞都很致命,所以这就是为什么企业都放弃了Struts,这也是我为什么不让你们学Struts的原因。老哥跟你们说的都是良心话,不会害你们的,所以千万别被不良的培训机构洗脑。如果有些公司让你搞Struts,那这种公司也没什么前途了,赶紧逃离吧。
以上是关于别在学Struts了的主要内容,如果未能解决你的问题,请参考以下文章
Eclipse搭建SSH(Struts2+Spring+Hibernate)框架教程