java web開發(fā)概要

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ǔ)了解。

  1. 根據(jù)自己的需求床玻,用Spring Could框架和文檔毁涉,搭建一個(gè)后臺(tái),邊實(shí)現(xiàn)笨枯,邊學(xué)習(xí)薪丁。在后臺(tái)設(shè)計(jì)的時(shí)候,有意識(shí)地包含各種功能模塊馅精,最終掌握大部分的技術(shù)點(diǎn)。
  2. 參考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è)快速參考鏈接:

Spring Cloud中國社區(qū)

Spring Framework Documentation

Spring官網(wǎng)

Thymeleaf 一個(gè)流行的快速啟動(dòng)的JavaWeb腳手架

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市癌椿,隨后出現(xiàn)的幾起案子健蕊,更是在濱河造成了極大的恐慌,老刑警劉巖踢俄,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缩功,死亡現(xiàn)場離奇詭異,居然都是意外死亡都办,警方通過查閱死者的電腦和手機(jī)嫡锌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門虑稼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人势木,你說我怎么就攤上這事蛛倦。” “怎么了跟压?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵胰蝠,是天一觀的道長。 經(jīng)常有香客問我震蒋,道長茸塞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任查剖,我火速辦了婚禮钾虐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘笋庄。我一直安慰自己效扫,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布直砂。 她就那樣靜靜地躺著菌仁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪静暂。 梳的紋絲不亂的頭發(fā)上济丘,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音洽蛀,去河邊找鬼摹迷。 笑死,一個(gè)胖子當(dāng)著我的面吹牛郊供,可吹牛的內(nèi)容都是我干的峡碉。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼驮审,長吁一口氣:“原來是場噩夢啊……” “哼鲫寄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起头岔,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤塔拳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后峡竣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體靠抑,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年适掰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了颂碧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片荠列。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖载城,靈堂內(nèi)的尸體忽然破棺而出肌似,到底是詐尸還是另有隱情,我是刑警寧澤诉瓦,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布川队,位于F島的核電站,受9級(jí)特大地震影響睬澡,放射性物質(zhì)發(fā)生泄漏固额。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一煞聪、第九天 我趴在偏房一處隱蔽的房頂上張望斗躏。 院中可真熱鬧,春花似錦昔脯、人聲如沸啄糙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽隧饼。三九已至,卻和暖如春静陈,著一層夾襖步出監(jiān)牢的瞬間桑李,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工窿给, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人率拒。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓崩泡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親猬膨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子角撞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容