日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747


詳解Web應用的底層邏輯,掌握Spring框架開發的思路

 

 

前言

前面一篇文章我講了一下Web應用程序的基礎,主要是基于網絡連接的I/O數據處理,為了對網絡上傳輸的數據進行處理,我們首先必須清楚的了解網絡傳輸的數據是二進制數據流由網絡協議定義的數據包長短,格式等來進行分拆和封裝。

通過對網絡上節點的標識信息,主機名或者IP地址跟應用的端口來標識運行在某臺計算機上的某個可以通信的節點。

其實網絡技術就是標識節點建立連接,也就是是IP協議為基礎標識了節點信息,然后以TCP或者UDP協議為基礎進行的網絡連接和數據傳輸。

在硬件方面這主要體現在一臺計算機通過網卡來管理網絡連接,網卡會將接收到的數據包拷貝到操作系統管理的輸入/輸出緩沖區里,我們應用程序或者說我們編寫的程序會創建一個自己的緩沖并連接到一個對于網絡數據進行處理的通道上,而這個通道是基于網絡套接字協議創建的數據流通道,我們可以用它來讀取網卡接收到的數據,并在通道和緩沖區操作期間對數據進行加工處理。

這個過程反應在應用程序內存,操作系統內存以及網卡管理的內存之間的數據拷貝。

底層網絡數據流與Web應用

簡單了解了上面基于網絡連接和數據傳輸以及在操作系統底層數據處理的基礎后,我們就開始在這個底層網絡數據流基礎上構建我們的web應用程序了。

前面我們介紹了關于Web應用程序的特點,就是基于底層網絡數據流處理的應用,所以必須現有網絡數據流作為基礎,而在我們現代的高級編程語言中已經將這些底層數據處理編寫成了許多優秀的組件類庫,我們可以直接使用,甚至將它們以規范的形式規定在了基礎容器實現里。

比如我們介紹的Servlet規范,它提供了底層網絡數據的封裝和管理以及對宿主計算機環境的集成。

讓我們可以使用JAVA語言不需要關心網絡連接和底層二進制數據的處理而直接按照一定的規則來對輸入的網絡數據流進行處理,讓后將處理結果通過固定的形式傳遞給網絡進行輸出。

 

關于Servlet的說明

Servlet原意是服務器小程序,它固定了一些基于服務器運行的小程序的相關的規范。

它首先對服務器環境進行了規定,對底層的基于網絡的點對點之間的數據流進行了封裝,這種封裝就是在底層對網絡傳輸的數據流按照某種約定的規則進行封裝,這就是協議層級的應用處理,它是在網絡服務器應用程序和操作系統以及網卡管理的輸入輸出控制器之間的數據拷貝和編解碼過程。

我們知道在操作系統層級,它是一個管理和調度我們機器硬件的應用程序,而調度的對象就是CPU和內存,而網卡作為一個系統硬件它具備自己的驅動應用程序它在操作系統上運行,會有一個獨立的管理的輸入輸出緩沖區,每次的輸入輸出數據流處理都只是通過相應事件觸發來通過CPU的中斷處理機制來完成的。

對于我們開發人員來說,我們需要做的就是借用Web服務器的底層處理提供的API來直接編寫處理數據的組件,而Web服務器一般都是根據Servlet規范來實現的應用。

它負責根據服務器信息和資源路徑來建立連接并傳輸和接收數據,并將數據轉換為遵循某種協議的標準格式,我們Servlet規范主要是基于HTTP/1.1協議的,Servlet 3.0增加了反應式編程模型,到了Servlet 4.0將支持HTTP/2規范。

Web服務器實現

而我們在Web容器層級,它是一個運行在操作系統的中間服務程序,它的作用是負責跟操作系統交互同時為我們的具體服務組件的運行提供支持。

它涉及到數據流的接收,解析,轉換和封裝底層的操作。基本上就是實現將二進制的字節流根據規定好的協議結構讀取并轉換為我們應用程序能夠使用的格式和數據類型。

對于網絡數據流的接收和處理方式,從阻塞型,即獲取一定數據后就停止接收數據,然后調用對應的處理程序進行處理,直到處理完成一個請求數據后,才會開始再次接收后面數據。

為提高性能,我們提供了對應處理組件的線程池,由特定的管理程序根據情況調度,即將一個服務處理組件實例化多個提供給進入的數據流請求調用,處理完成后,將服務組件歸還給某個調度管理器,以備后面的請求使用。

隨著應用程序的復雜程度加大,為了獲取更好的處理性能,我們開始采用異步方式來處理,也就是由獨立的線程負責接收請求,然后將請求交給工作線程處理,它不會阻止其繼續接收請求。而在請求處理完成時,會向系統發送通知,通過線程中斷處理來響應通知,如此以來可以使用較少的線程獲取高效率,提高應用的反應效率。

當然這種反應式異步處理的開發模型是建立在Java NIO數據流模型基礎上的。

 

Spring容器與Spring MVC框架

前面我們說過,Spring框架的優勢在于它在Servlet級別上提供了一個開發復雜應用的組件容器,而且這個容器是實現了可配置的工廠模式,也就是說在容器初始化時,它會將組件服務實例化或者將其相關聯的組件定義配置好,在需要時動態的去實例化對象。

開發人員在使用Spring框架進行開發時,基本上是將自己應用程序的數據類型和邏輯組件都作為Spring容器管理的組件,對于組件的構建和銷毀以及整個調用過程的管理都由Spring容器來完成。

開發人員只需要將定義的數據類型和組件告訴容器,讓它遵循容器管理的規則即可。

為此Spring容器為了獲取它能管理哪些數據類型或者邏輯組件實現類,它通過讀取特定格式的花名冊來完成,比如有XML,YML以及Annotation或者代碼等格式。

其實其本質都是一樣的就是工廠模式,將構建某個依賴項的工作交給專門干這件事的人,我們可以理解為我們有無數的人將創建自己實例的任務交給了一個專門做這事的人。

而這里這個人就是Spring容器,我們只需要在任何一個需要構建的數據類型或者組件時,將這個能夠創建依賴的對象提供給它即可。我們稱這個被委托者為容器。

它會在啟動時讀取需要使用的所有組件和數據類型定義信息,并將它們初始化實例放入到其管理的內存空間里,并為每個實例定義唯一標識,并工作這些內容來獲取其對應的對象實例。

 

總結

上面對前面說的內容做了簡單的回顧,是為了能夠銜接后面所要說的內容,如此是為了想連貫的從底層網絡數據流到如何被封裝進入我們開發語言運行的領域,以及我們如何在應用程序層級上對數據流的設計和管理,從而能夠網絡技術,數據編解碼,Web服務器,高級的應用程序開發框架能夠串聯起來,找出它們之間的關聯,它們為什么要如此設計,以及它們解決的問題什么,來幫助初學的小伙伴將自己所學的知識串聯成一個完整的技術圖譜,更加宏觀的掌握技術思路,為以后開拓創新打好基礎。

由于現在在網絡上文章過長就沒有人愿意讀了,所以每次寫都沒組織好,由于字數問題而不得不中斷,不過我會盡量的連貫的去說。

分享到:
標簽:Web
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定