本文做者:黃小斜css
轉載請務必在文章開頭註明出處和做者。html
本文是《五分鐘學Java》系列文章的一篇前端
本系列文章主要圍繞Java程序員必須掌握的核心技能,結合我我的三年多的Java學習和工做經歷,總結和沉澱下來的方法論,但願能讓Java學習這件事變得更簡單,做者目前在阿里作Java,忙裏偷閒分享一些技術文章。java
系列文章將會把一些技術學習方法、過程、要領與個人學習經驗相結合,更加淺顯易懂,而且我也會把我學習時用的資料,書籍和文章拿出來分享給你們,節省你個人時間。所謂授人以魚也要授人以漁,是本系列文章但願達到的目標。react
不知道Java Web這個詞是從何時開始出現的,可是,據Java官方記載,只有JavaSE和JavaEE這類表述,彷佛並無Java Web這麼一個說法,因此,我更願意認爲,Java Web是各位Java前輩們對於Java在Web方向應用的相關技術棧,正如如今的Python Web,golang web等等,只不過是經過某種語言來實現web應用而已。git
讓咱們先看看百度百科對於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這麼初級的東西他們纔不肯意碰呢,固然這也是後話了。github
Java Web發展了這麼多年,各類新鮮技術層出不窮,無論是spring全家桶,仍是ORM框架,仍是各類基於Java開發的中間件,都有不少新的應用和場景。像是最典型的電商場景,淘寶、京東、拼多多,都是把Java Web技術作到極致的公司,固然了,在Java Web以後,是可以支持起億萬級流量和用戶的後端架構。golang
這樣看來,Java Web彷佛還有很多名堂,簡單的能夠作個後臺系統,複雜的也能夠支持海量用戶訪問的電商平臺,那麼要如何學習,才能對Java Web從入門到精通呢,不妨一塊兒來看看下面的內容。web
那麼,做爲一個新手Java工程師,如何學習Java Web呢,我先假設你只是一個Java小白,學過了一些Java基礎,對於Web開發一竅不通,那麼你應該掌握的東西有哪些呢,不怕嚇到你,真的很是多。
首先,請先掌握好Java基礎,以前我在第一篇文章已經講了,如何學習java基礎,建議你先去看看那篇文章後,再來看本文,比較容易銜接的上。
要想搞定Java Web,Java基本功必須紮實,像是面向對象基礎、集合類、異常處理、IO流、多線程等技術都是常常會用到的。
我一個後端工程師,爲啥還要懂前端知識呢?想來還有點鬱悶,不過其實如今先後端分離的趨勢已經很明顯了,不多還有哪一個Java工程師須要懂jsp,也不多有Java工程師還在搞全棧了,畢竟如今專業的H5工程師多的是,你一個作Java的外行何須湊熱鬧。
不過做爲一個學習者,不少東西仍是繞不過去的,好比你要寫一個簡單的web頁面,至少也要會個HTML、CSS和JS吧,而後,若是你想用點高級的語法,可能就要上jQuery了,想搞點漂亮的頁面,再上個bootstrap,最後,你還想用高大上的框架,結果你掏出了reactjs(很差意思這個我也不會)
對於前端知識,個人建議是,瞭解一下html、js、css仍是有必要的,至少你要能大概看懂前端的代碼,其餘的內容就不用太在乎了,懂得在瀏覽器上使用開發者工具排查請求問題就好了,如今的先後端交互大可能是用json,也不須要你去寫前端代碼。
做爲一個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封裝起來,咱們只須要寫一些喜聞樂見的controller就能夠了,而jsp早就已經退出歷史舞臺了。
這兩個東西不必花太多時間,畢竟如今的Java Web其實就是spring全家桶+web相關技術,接下來咱們就來看看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周邊的一些開源技術組件,它們有的是大工程,有的是小項目,總之,它們都是這個技術生態中不可缺乏的一部分
一、Maven
作一個成熟的構建工具,Maven不只能夠幫你管理依賴,還能幫你管理工程目錄,好比咱們的工程爲何目錄格式都是同樣的,有src包也有test包,這就是遵照了maven的規範,這種基於約定的管理方式,使得maven能夠很是輕量化地幫你管理和構建項目。
二、Tomcat
Tomcat天然是Java Web中的中堅力量,畢竟大部分的Java Web應用都運行在tomcat上,做爲一個Java Web工程師,仍是要儘可能多瞭解Tomcat的實現原理和運行原理,這也有助於你理解web應用的運行模式,即便之後換了別的應用容器你也能夠快速上手。
三、日誌組件和單元測試組件
日誌組件和單元測試組件都是很實用的技術組件,平時本身搞項目的話可能不會太在乎,可是在公司裏的項目是必定要用好這兩個東西的,打好了日誌,纔可以排查和監控問題,而單元測試組件,能夠幫你檢查代碼的正確性,提升代碼質量,把bug擋在門外。
四、orm框架
orm框架是什麼,其實就是爲了更好地進行對數據庫的CRUD,而設計出來給Java使用的持久層映射框架,好比mybatis和hibernate,雖然本質上仍是在寫sql,可是咱們能夠直接經過對一個對象進行操做,而且把這個操做映射成一個sql語句,大大簡化了咱們操做數據庫的流程。
剛剛咱們也說過了,Java Web應用的技術範圍很廣,小項目可能用到上面這些東西就夠了,而大項目,一些分佈式應用,要涉及的東西就太多了,這裏不展開介紹,由於每一部分的內容都值得用一篇文章來說,這裏就簡單地給各位介紹一下,有哪些後端技術是值得咱們關注和學習的。
一、緩存
緩存能夠幫助數據庫緩解讀寫壓力,通常用於數據庫讀寫負載沒法支撐業務場景的狀況,像是Redis、memcache這類緩存,都是比較經常使用的,緩存在web應用中也常用。
二、消息隊列
消息隊列用於處理多個應用的消息,負責在分佈式應用之間進行通訊,也適用於高併發大流量的場景,好比電商購物,下單消息太多,下游處理不來,經過消息隊列先存儲一些,處理另一些,能夠達到限流和削峯的目的
三、分佈式服務
分佈式服務區別於本地服務,通常用於多個應用之間的服務調用,好比應用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,敬請期待。
對了,你想問我文章裏提到的書籍和視頻去哪找?我已經給你準備好了
對本系列文章有什麼建議和意見,也歡迎留言告訴我,期待你的回饋。