java web開發(fā)大致有這么幾個(gè)歷程:
CGI 程序
基于java web的api和程序包,自己開發(fā)CGI程序这吻,這樣做的好處是完全自己控制網(wǎng)絡(luò)的監(jiān)聽琳轿、請(qǐng)求、響應(yīng)转培,壞處是沒有任何規(guī)范恶导,開發(fā)量大,并且容易產(chǎn)生各種問題堡距,等于是拋棄java web的發(fā)展成果甲锡,一切從頭開始。
Servlet程序
為了解決CGI階段的問題羽戒,比如低開發(fā)效率缤沦,無規(guī)范,問題多易稠。sun在j2ee標(biāo)準(zhǔn)中缸废,添加了Servet Api,為Java Web開發(fā)提供了一個(gè)統(tǒng)一、規(guī)范的解決方案企量。其Api的包名為javax.servlet测萎。
其中javax.servlet.http包提供了Servet基于Http協(xié)議的實(shí)現(xiàn),也是我們最常用的Api接口届巩。
定義了Servlet規(guī)范之后硅瞧,就出現(xiàn)了很多Servlet容器,能夠基于配置自動(dòng)裝載恕汇、運(yùn)行Servet程序腕唧。其中包括Tomcat、Netty等瘾英。
在這個(gè)階段枣接,底層的網(wǎng)絡(luò)通信協(xié)議實(shí)現(xiàn)和接口封裝由容器來實(shí)現(xiàn),web程序?qū)W⒂谡{(diào)用Servlet Api缺谴,來完成業(yè)務(wù)邏輯但惶。
Servlet階段和CGI階段比較,一方面簡化了應(yīng)用開發(fā)湿蛔,一方面提供了Java Web程序的Api標(biāo)準(zhǔn)膀曾,一方面解決了CGI階段容易產(chǎn)生的性能等問題。
Spring 框架
基于Servlet Api開發(fā)的Web 應(yīng)用煌集,依然會(huì)存在很多常見的問題妓肢。
- 軟件耦合,難以擴(kuò)展
- 接口復(fù)雜苫纤,一些通用功能碉钠,比如日志、事務(wù)卷拘、審計(jì)喊废、鑒權(quán)等在每個(gè)業(yè)務(wù)接口里都要實(shí)現(xiàn)
- 數(shù)據(jù)庫操作復(fù)雜,每個(gè)數(shù)據(jù)請(qǐng)求接口都要實(shí)現(xiàn)對(duì)應(yīng)業(yè)務(wù)邏輯的數(shù)據(jù)庫的操作栗弟、數(shù)據(jù)的轉(zhuǎn)換
- 業(yè)務(wù)邏輯混雜污筷,視圖操作、模型定義乍赫、業(yè)務(wù)邏輯控制等都在一起實(shí)現(xiàn)瓣蛀,難以維護(hù)
針對(duì)這些問題,Spring框架提供了它的解決方案雷厂。
- Spring IOC
- Spring AOP
- Spring Data
- Spring MVC
除此之外,Spring框架還有一些其他的Core技術(shù):
- Spring Resource
- Spring Validation
- Spring DataBinding
- Spring TypeConversion
- Spring Expression Language SpringEL
除了Spring的核心框架惋增,Spring還開發(fā)或整合了很多Java Web中常用的組件,便于集成和使用改鲫,避免二次開發(fā)诈皿。詳情見
Spring Projects林束。
Spring 可以說是Java Web的全能小王子,為各種需求都整合了解決方案稽亏,并且基于框架壶冒,提供了豐富、完善的整合和配置能力截歉,理解Spring的設(shè)計(jì)哲學(xué)有利于我們更好的使用這個(gè)框架胖腾,它包括:
Provide choice at every level.
Accommodate diverse perspectives.
Maintain strong backward compatibility.
Care about API design.
Set high standards for code quality.
翻譯過來就是:
- 在每一個(gè)層級(jí)上都提供選擇
- 適應(yīng)多種不同的視角
- 提供很好的后向兼容性
- 仔細(xì)設(shè)計(jì)API
- 保證高代碼質(zhì)量
如果想看原文鏈接,可以點(diǎn)
這里怎披。
Spring Boot
Spring在提供了強(qiáng)大的框架功能和資源整合能力的同時(shí)胸嘁,也帶來一個(gè)弊端。一個(gè)完整的Spring的項(xiàng)目凉逛,可能需要配置非常多的信息,才能實(shí)現(xiàn)整合和運(yùn)行群井。特別是基于IOC機(jī)制的Bean配置和整合状飞,實(shí)現(xiàn)起來是非常繁瑣的。
基于這個(gè)問題书斜,Spring Boot框架提供了Spring各個(gè)模塊的默認(rèn)配置诬辈,基于默認(rèn)大于配置的思想,提供了自己的Web框架荐吉,讓W(xué)eb應(yīng)用開發(fā)啟動(dòng)焙糟,變得更加的快速和方便。它甚至整合了Servlet容器样屠,提供了內(nèi)置的Tomcat穿撮、Netty、Undertow等容器實(shí)現(xiàn)痪欲,只要打包SpringBoot程序?yàn)镴ar悦穿,就可以直接在服務(wù)器上部署。
Spring Boot同樣提供了CLI工具业踢,支持在命令行里直接運(yùn)行程序栗柒,并通過參數(shù)進(jìn)行定制化。
Spring 和 Spring Boot都提供了 maven 知举、 Gradle 工程管理工具的插件瞬沦,可以直接使用管理工具運(yùn)行應(yīng)用程序,添加倉庫依賴雇锡。
Spring Boot并沒有重新實(shí)現(xiàn)Spring中的功能模塊逛钻,并且也支持Spring的各種配置功能,它只是針對(duì)框架和功能模塊遮糖,提供了一個(gè)合理的配置绣的,在Spring框架要求顯示聲明配置的地方,提供了缺省時(shí),由框架推測用戶意圖屡江,直接基于默認(rèn)配置運(yùn)行的能力芭概。
使用SpringBoot有利有弊,弊端是需要理解SpringBoot的缺省配置邏輯惩嘉,要學(xué)習(xí)怎樣替換缺省配置罢洲。有點(diǎn)是可以快速啟動(dòng)開發(fā),項(xiàng)目配置簡潔文黎∪敲纾總體來說,如果先使用Spring框架耸峭,了解各種配置方式的話桩蓉,是利大于弊的。
Spring Cloud
Spring Could 是基于Spring Boot框架擴(kuò)展的一個(gè)微服務(wù)框架劳闹。它是在Spring原有的功能模塊上院究,增加了微服務(wù)所需的功能模塊,主要包括:
- Eureka 云端服務(wù)發(fā)現(xiàn)
- Feign 遠(yuǎn)程服務(wù)調(diào)用
- Hystrix 熔斷器本涕、容錯(cuò)管理工具
- Zuul 動(dòng)態(tài)路由
- Ribbon 云端負(fù)載均衡
Spring Could主攻的微服務(wù)框架业汰,在國內(nèi)也有一款,就是阿里退出的Dubbo框架菩颖,不過他的維護(hù)者稱样漆,相對(duì)于Spring Could而言, Dubbo 功能更加的簡單晦闰,只專注實(shí)現(xiàn)遠(yuǎn)程服務(wù)調(diào)用框架放祟,相當(dāng)于 Eureka + Feign,不過在國內(nèi)貌似使用的更多鹅髓。
Spring Clound的原理解釋推薦一篇文章拜托舞竿!面試請(qǐng)不要再問我Spring Cloud底層原理!。
再推薦一個(gè)學(xué)習(xí)路線總結(jié):
其他
對(duì)于一個(gè)Android開發(fā)來學(xué)java web開發(fā)的同學(xué)而言窿冯,要是從Spring Could快速開始骗奖,貌似磕磕絆絆也能行的通。要是從Servlet程序?qū)W習(xí)醒串,慢慢用框架進(jìn)行優(yōu)化执桌,這樣則基礎(chǔ)更加扎實(shí)。
在研究了一段時(shí)間之后芜赌,包括研究github上的一個(gè)原生Servlet Resty框架源碼仰挣,Servlet資料和Spring相關(guān)的資料,以及大量的其他相關(guān)資料缠沈,以及手動(dòng)實(shí)現(xiàn)一些簡單的例子膘壶。才弄清楚文章總結(jié)的這個(gè)技術(shù)棧輪廓错蝴。
總得來說,要使用Spring全家桶颓芭,Spring框架肯定是要了解的顷锰。但是要熟悉掌握還是需要實(shí)踐。如果從Servlet開始寫起亡问,逐步替換對(duì)比官紫,則花費(fèi)的時(shí)間會(huì)多一些,但掌握的會(huì)更牢固州藕。學(xué)習(xí)方向上總體有兩個(gè)建議束世,前提是要了對(duì)Servlet和Spring框架有基礎(chǔ)了解。
- 根據(jù)自己的需求床玻,用Spring Could框架和文檔毁涉,搭建一個(gè)后臺(tái),邊實(shí)現(xiàn)笨枯,邊學(xué)習(xí)薪丁。在后臺(tái)設(shè)計(jì)的時(shí)候,有意識(shí)地包含各種功能模塊馅精,最終掌握大部分的技術(shù)點(diǎn)。
- 參考Spring Boot 文檔粱檀,針對(duì)不同的功能洲敢,采用Servlet、Spring茄蚯、Spring Could等不同的方式實(shí)現(xiàn)压彭,進(jìn)行對(duì)比學(xué)習(xí)。最后再回到1渗常,實(shí)現(xiàn)自己真正的后臺(tái)需求壮不。
總體來說,要根據(jù)自己的情況來定皱碘,并且也應(yīng)該及時(shí)調(diào)整學(xué)習(xí)策略询一。
最后貼幾個(gè)快速參考鏈接: