五分鐘學Java:如何才能學好Java Web裡這麼多的技術
阿新 • • 發佈:2020-03-16
![副本_未命名.jpg](https://img2020.cnblogs.com/blog/1092007/202003/1092007-20200304193102345-1035003662.jpg)
## 原創宣告
本文作者:黃小斜
轉載請務必在文章開頭註明出處和作者。
## 系列文章介紹
本文是《五分鐘學Java》系列文章的一篇
本系列文章主要圍繞Java程式設計師必須掌握的核心技能,結合我個人三年多的Java學習和工作經歷,總結和沉澱下來的方法論,希望能讓Java學習這件事變得更簡單,作者目前在阿里做Java,忙裡偷閒分享一些技術文章,有興趣看本系列更多文章可以關注我的公眾號【Java技術江湖】
系列文章將會把一些技術學習方法、過程、要領與我的學習經驗相結合,更加淺顯易懂,並且我也會把我學習時用的資料,書籍和文章拿出來分享給大家,節省你我的時間。所謂授人以魚也要授人以漁,是本系列文章希望達到的目標。
## 本文思維導圖
![在這裡插入圖片描述](https://img2020.cnblogs.com/blog/1092007/202003/1092007-20200304193105076-1726753637.png)
## 什麼是Java Web
不知道Java Web這個詞是從什麼時候開始出現的,但是,據Java官方記載,只有JavaSE和JavaEE這類表述,似乎並沒有Java Web這麼一個說法,所以,我更願意認為,Java Web是各位Java前輩們對於Java在Web方向應用的相關技術棧,正如現在的Python Web,golang web等等,只不過是通過某種語言來實現web應用而已。
讓我們先看看百度百科對於Java Web的定義,Java Web,是用Java技術來解決相關web網際網路領域的技術總和。web包括:web伺服器和web客戶端兩部分。Java在客戶端的應用有java applet,不過使用得很少,Java在伺服器端的應用非常的豐富,比如Servlet,JSP和第三方框架等等。Java技術對Web領域的發展注入了強大的動力。
乍一看來,和我們上面鎖描述的類似,事實上,在Java招聘市場上,一個Java工程師,首先也要是一個Java Web工程師,因為這基本上是Java工程師的最低要求了,至少你要懂得CRUD,懂得寫一個後臺管理系統,懂得和前端聯調吧。當然了,在這基礎上,還有很多純後端的Java後端工程師,他們負責造輪子,開發中間件,Java Web這麼初級的東西他們才不願意碰呢,當然這也是後話了。
Java Web發展了這麼多年,各種新鮮技術層出不窮,不管是spring全家桶,還是ORM框架,還是各種基於Java開發的中介軟體,都有很多新的應用和場景。像是最典型的電商場景,淘寶、京東、拼多多,都是把Java Web技術做到極致的公司,當然了,在Java Web之後,是能夠支援起億萬級流量和使用者的後端架構。
這樣看來,Java Web似乎還有不少名堂,簡單的可以做個後臺系統,複雜的也可以支援海量使用者訪問的電商平臺,那麼要如何學習,才能對Java Web從入門到精通呢,不妨一起來看看下面的內容。
## Java Web到底要學習那些東西
那麼,作為一個新手Java工程師,如何學習Java Web呢,我先假設你只是一個Java小白,學過了一些Java基礎,對於Web開發一竅不通,那麼你應該掌握的東西有哪些呢,不怕嚇到你,真的非常多。
### Java基礎知識
首先,請先掌握好Java基礎,之前我在第一篇文章已經講了,如何學習java基礎,建議你先去看看那篇文章後,再來看本文,比較容易銜接的上。
要想搞定Java Web,Java基本功必須紮實,像是面向物件基礎、集合類、異常處理、IO流、多執行緒等技術都是經常會用到的。
### 前端知識
我一個後端工程師,為啥還要懂前端知識呢?想來還有點鬱悶,不過其實現在前後端分離的趨勢已經很明顯了,很少還有哪個Java工程師需要懂jsp,也很少有Java工程師還在搞全棧了,畢竟現在專業的H5工程師多的是,你一個做Java的外行何必湊熱鬧。
不過作為一個學習者,很多東西還是繞不過去的,比如你要寫一個簡單的web頁面,至少也要會個HTML、CSS和JS吧,然後,如果你想用點高階的語法,可能就要上jQuery了,想搞點漂亮的頁面,再上個bootstrap,最後,你還想用高大上的框架,結果你掏出了reactjs(不好意思這個我也不會)
對於前端知識,我的建議是,瞭解一下html、js、css還是有必要的,至少你要能大概看懂前端的程式碼,其他的內容就不用太在意了,懂得在瀏覽器上使用開發者工具排查請求問題就行了,現在的前後端互動大多是用json,也不需要你去寫前端程式碼。
### HTTP和web基礎知識
作為一個Java Web工程師,你天天要打交道的就是http請求,給你一個url,你要如何返回給他一個http的響應報文,不過還好,Tomcat幫你把HTTP報文請求和處理的問題解決了,你只要告訴tomcat你要返回什麼內容給前端就好了,一般來說,前後端用的資料格式就是json。
關於這個http請求,你要了解的東西就不少了,計算機網路的基礎知識要知道吧,http協議的報文結構和常見方法你要知道吧,url的dns解析你也需要懂。
這還只是基礎的,web應用裡面有兩個常用的技術,叫做session和cookie,session一般存在伺服器上,用於記住使用者狀態,而cookie一般儲存在瀏覽器上,用於記錄你的一些常用資訊,比如登入某個網站的賬號密碼,這兩個東西平時你應該不陌生,但是Java Web工程師需要合理地使用這兩個東西,以實現自己的應用目的。
session和cookie一般用於解決應用問題,而網路通訊裡還有一個重要的內容就是安全問題,防止不法分子盜取資訊,詐騙盜刷。這裡就涉及到了HTTPS協議,以及使用token、加密演算法等技術來提升應用的安全性。
除此之外,還有很多web相關的技術知識,這裡不再一一列舉,畢竟這些東西,只有真正接觸到了之後,多加實踐,才能更好地進行學習和理解。
### servlet和jsp
繞來繞去,還是繞不開這兩個早已過氣的技術,以前我們用這兩個東西是直接用,現在我們不直接用,框架會把servlet封裝起來,我們只需要寫一些喜聞樂見的controller就可以了,而jsp早就已經退出歷史舞臺了。
這兩個東西沒必要花太多時間,畢竟現在的Java Web其實就是spring全家桶+web相關技術,接下來我們就來看看spring全家桶應該如何學習。
### spring全家桶
spring全家桶主要包括spring、springmvc和springboot,當然還有springcloud,主要是用於分散式服務的,我們一個小小的Java Web就不請它出來了。對於前面三樣技術,很多人早就已經不陌生了。
spring顛覆了Java中例項管理的方式,例項的管理被統一到spring的bean容器中,而很多切面型邏輯也被AOP這種處理方式給解放出來了,IOC和AOP是spring最令人稱道的兩個特點。
而到了springmvc時代,分層結構開始愈發流行,model層用於對映資料,view用於渲染資料和前端互動,controller則用來分發請求。而對於很多的Javaweb應用,他們的程式碼結構一般也是controller-service-dao這樣的分層結構。springmvc制霸了Java Web應用很久了,直到它的進化版springboot的出現。
springboot橫空出世,直接砍掉了複雜的spring配置,轉而用註解的方式簡化了開發流程,並且直接吃掉了tomcat了,一切從簡。springboot的出現使得JavaWeb的學習成本更低了,建議新手朋友直接用springboot開啟你的第一個Java web專案,體驗一定會比用springmvc好得多。
當然了,spring全家桶要細講起來可不止這麼些東西,由於篇幅優先,後續會單獨拎出來寫一篇關於如何學習spring全家桶的文章,敬請期待。
### 資料庫
不好意思,把這個老哥給忘了,資料庫作為一切web應用的基石,沒有它就沒有資料,應用就毫無價值,當然了,讓我們天天沉迷於CRUD無法自拔的也是這個東西。
幾乎沒有哪個web應用是不用資料庫的,現在市面上最流行的仍然是MySQL資料庫,想要做一個web應用,先學會sql的基本語法吧,懂得建表,懂得在sql裡CRUD,這樣你才能夠回到程式碼裡繼續CRUD(增刪改查)當然了,關於資料庫要學習的知識遠不止於此,由於篇幅優先,後續會單獨拎出來寫一篇關於資料庫的文章,敬請期待。
### Java Web實用工具和技術
接下來這些內容,都是Java Web周邊的一些開源技術元件,它們有的是大工程,有的是小專案,總之,它們都是這個技術生態中不可缺少的一部分
1、Maven
做一個成熟的構建工具,Maven不僅可以幫你管理依賴,還能幫你管理工程目錄,比如我們的工程為什麼目錄格式都是一樣的,有src包也有test包,這就是遵守了maven的規範,這種基於約定的管理方式,使得maven可以非常輕量化地幫你管理和構建專案。
2、Tomcat
Tomcat自然是Java Web中的中堅力量,畢竟大部分的Java Web應用都執行在tomcat上,作為一個Java Web工程師,還是要儘量多瞭解Tomcat的實現原理和執行原理,這也有助於你理解web應用的執行模式,即使以後換了別的應用容器你也可以快速上手。
3、日誌元件和單元測試元件
日誌元件和單元測試元件都是很實用的技術元件,平時自己搞專案的話可能不會太在意,但是在公司裡的專案是一定要用好這兩個東西的,打好了日誌,才能夠排查和監控問題,而單元測試元件,可以幫你檢查程式碼的正確性,提高程式碼質量,把bug擋在門外。
4、orm框架
orm框架是什麼,其實就是為了更好地進行對資料庫的CRUD,而設計出來給Java使用的持久層對映框架,比如mybatis和hibernate,雖然本質上還是在寫sql,但是我們可以直接通過對一個物件進行操作,並且把這個操作對映成一個sql語句,大大簡化了我們操作資料庫的流程。
### 進階後端技術
剛剛我們也說過了,Java Web應用的技術範圍很廣,小專案可能用到上面這些東西就夠了,而大專案,一些分散式應用,要涉及的東西就太多了,這裡不展開介紹,因為每一部分的內容都值得用一篇文章來講,這裡就簡單地給各位介紹一下,有哪些後端技術是值得我們關注和學習的。
1、快取
快取可以幫助資料庫緩解讀寫壓力,一般用於資料庫讀寫負載無法支撐業務場景的情況,像是Redis、memcache這類快取,都是比較常用的,快取在web應用中也經常使用。
2、訊息佇列
訊息佇列用於處理多個應用的訊息,負責在分散式應用之間進行通訊,也適用於高併發大流量的場景,比如電商購物,下單訊息太多,下游處理不來,通過訊息佇列先儲存一些,處理另外一些,可以達到限流和削峰的目的
3、分散式服務
分散式服務區別於本地服務,一般用於多個應用之間的服務呼叫,比如應用A有一個服務S1,應用B有一天個服務S2,S1要呼叫S2,只能通過網路傳輸才能實現,分散式服務解決的就是這個問題。
除此之外,還有像負載均衡、反向代理、分散式事務、分散式資料庫等複雜的應用技術,這裡不再一一列舉,如果你們感興趣的話,後續我會再寫一篇關於如何學習分散式技術的文章。
## 推薦資源
這篇文章和之前的幾篇不太一樣,內容比較多,涉及的技術也很多,主要是想把Java Web的整體樣貌給講清楚,這裡推薦一些相關的資源,在精不在多。
這裡只推薦Java Web的基礎書籍,在後面我們會有另外的文章介紹如何學習具體的某個後端技術,比如快取、訊息佇列,以及分散式服務等等,到那個時候再去推薦書籍也不遲。
### 書籍
《深入分析 JavaWeb技術內幕》
《Maven實戰》
《spring實戰》
《sql必知必會》
### 視訊
關於Java Web的視訊應該是市面上最多的,這裡我整理了一些還算不錯的視訊資源分享給大家
### 部落格
Java技術倉庫《Java程式設計師複習指南》
https://github.com/h2pl/Java-Tutorial
整合全網優質Java學習內容,幫助你從基礎到進階系統化複習Java
### 總結
關於Java Web技術棧都有哪些東西,以及如何學習JavaWeb技術,我們今天就講到這裡了,如果還有什麼疑問也可以到我公眾號裡找我探討,後續會有更多的文章推出,包括如何系統性地學習JavaWeb,敬請期待。
對了,你想問我文章裡提到的書籍和視訊去哪找?我已經給你準備好了
> 文中提到的資源都可以免費領取,在我的公眾號【程式設計師黃小斜】回覆“JavaWeb”即可免費領取對應的資源。
## 寫在最後
對本系列文章有什麼建議和意見,也歡迎留言告訴我,期待你的