背景知識: html
超文本傳輸協議 (HTTP-Hypertext transfer protocol) :一種詳細規定了瀏覽器和萬維網服務器之間互相通訊的規則,經過因特網傳送萬維網文檔的數據傳送協議。 java
七層網絡協議: api
應用層協議包括:HTTP、FTP、Telnet、SMTP、RIP、NFS、DNS;TCP/UDP協議屬於傳輸層協議;IP協議屬於網際層。 瀏覽器
深刻理解一方面知識以前最好可以理清知識的結構,而後再對症尋醫。
服務器
正文:
網絡
從開發角度上,咱們主要從「七層網絡協議」中應用層協議的「HTTP協議」入手去了解「請求」和「響應」,從而屏蔽再往下的細節,併爲更上層的開發奠基知識理論基礎。這裏的請求和響應就是咱們經常說到的Request和Response。 學習
HTTP內容不少,本文只挑選所能用來解釋本話題的相關知識(也就是說包括但並不只限於,更詳細戳這裏《HTTP權威指南》),廢話太多了。 spa
一次請求是什麼東西?教材上每每會給出不少內容:請求行、消息報頭、請求正文,每部份內容中又能夠細分不少Key-Value。具體是什麼,能夠用Firefox下的HttpFox擴展組件看個究竟。(Web開發推薦使用Firefox,固然也有人很喜歡Chrome),如圖(一次訪問百度首頁的相關細節): .net
從該組件中,咱們能夠清楚看到一次URL訪問(請求www.baidu.com以及隨之而來的若干次請求)的細節,包括:Headers、Cookies、Query String、POST Data、Content等。具體的Key-Value中不清楚的你們搜下資料。 htm
繼續從HTTP協議層面上繼續咱們的理解,這一次請求包含了如上不少內容,那服務器那邊是若是對待這個請求的?拿Tomcat服務器(Servlet容器)來講,它會在HTTP協議層面上把每一個請求封裝在一個HttpServletRequest實例中(HttpServletRequest自己是隻接口),同時也建立了一個HttpServletResponse實例(HttpServletResponse一樣也是接口)做爲稍後對客戶端進行相應的對象。而後將這兩個對象傳入service,service中執行相應邏輯,最後並經過HttpServletResponse實例控制輸出內容。如圖:
這裏有個問題是HttpServletResponse到底作了什麼,不少初學者會深刻到服務器是怎麼找到客戶端地址的,怎麼樣決定輸出內容仍是重定向,servlet中不進行response操做可不能夠……其實這些細節是問題,但不是從總體上梳理Request和Response要去研究的;正如我在此屢次提到的HTTP協議層面,在這個層面上咱們只須要考慮這個層面應該考慮並且可以解決的問題,諸如怎麼找到客戶端地址等細節能夠交由七層網絡模型的TCP層、IP層等甚至鏈路層去深刻研究並最終把知識給串起來。
後記:
還沒講盡興就後記了。其實這個話題的內容能夠涉及不少不少知識,我只是從總體上簡略地理了一遍請求/響應流程,更想在這裏說的或者普及的是一種學習/梳理知識的方式。
IT知識實在太廣了,Web應用開發只是個小分支,Java Web開發是更小的一個與語言有關的小小分支。即便是這麼一個小分支,裏面的內容仍是有不少的,對於置身於IT海洋的小沙粒來講,細想確實很恐懼或者茫然。
咱們並不須要畏懼,而是掌握恰當的方法,一步一步去構建本身的知識城堡。既然是城堡,地基就很重要,咱們的地基就是那些理論、原理、規範、協議、標準(也許外星人另有一套標準,而地球人只需打紮實咱們這個星球的根基就行)。這些看似枯燥的理論知識實際上是很規範的條理很清晰的,也方便每個渴望成爲Geek的初學者可以站在正確的臺階上欣賞角度不錯的風景。這個臺階和角度,但願我已經在上面洋洋灑灑的字裏行間中解釋清楚了。
對Java感興趣的朋友能夠留言或者私信,咱們有一個舒適的JAVA_HOME。