本文源碼:GitHub·點這裏 || GitEE·點這裏java
一、CS與BS架構git
CS架構模式github
客戶端/服務器(Client/Server)模式,既要編寫服務器端程序,也要開發客戶端程序,軟件更新時須要同時更新客戶端和服務器端,總體模式相比BS架構要複雜,可是安全性比較高。web
B/S架構模式算法
即瀏覽器/服務器(Browser/Server),只須要編寫服務器端程序,瀏覽器的界面做爲訪問的服務端的入口,架構相對簡單,能夠快速迭代,可是安全性較差。spring
二、Socket通訊機制數據庫
TCP/IP 協議編程
傳輸控制協議/網際協議是指可以在多個不一樣網絡間實現信息傳輸的協議簇。TCP/IP協議不只僅指的是TCP和IP兩個協議,而是指一個由FTP、SMTP、TCP、UDP、IP等協議構成的協議簇,只是由於在TCP/IP協議中TCP協議和IP協議最具表明性,因此被稱爲TCP/IP協議。設計模式
Socket套接字瀏覽器
網絡中不一樣主機上的應用進程之間進行雙向通訊的端點的抽象,一個套接字就是網絡上進程通訊的一端,提供了應用層進程利用網絡協議交換數據的機制。一般接收請求數據,並作業務處理的稱爲服務端即ServerSocket,發送請求並接收處理結果的稱爲客戶端。
一、Http和Https
Http協議
HTTP超文本傳輸協議,是用於從萬維網服務器傳輸超文本到本地瀏覽器的傳送協議,基於TCP/IP通訊協議來傳遞數據:HTML文件、圖片、查詢數據等。HTTP協議基於客戶端-服務端架構模式。瀏覽器做爲HTTP客戶端經過URL向服務端即WEB服務器發送請求。Web服務器根據接收到的請求後,處理完請求後向客戶端發送響應信息。
協議特色:簡單快速、靈活、無鏈接、無狀態、支持客戶/服務器模式。
Https協議
以安全爲準則的HTTP通道,是HTTP的安全版,在HTTP請求上加入SSL層,HTTPS的安全基礎是SSL,所以加密的詳細內容就須要SSL。簡單來講,HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,要比http協議安全。HTTPS協議的主要做用能夠分爲兩種:一種是創建一個信息安全通道,來保證數據傳輸的安全;另外一種就是確認網站的真實性。
Https和Http區別
安全證書:Https協議須要到CA申請證書,通常免費證書較少,於是須要必定費用。
數據傳輸:Http是超文本傳輸協議,信息是明文傳輸,https則是具備安全性的ssl加密傳輸協議。
鏈接方式:Http和Https使用的是徹底不一樣的鏈接方式,用的端口也不同,前者是80,後者是443。
二、Get和Post請求
瀏覽器端
從瀏覽器角度看這個兩種請求的區別:GET方式讀取資源,好比Get到靜態頁面,即便屢次讀取不會對訪問數據產生影響,也被稱爲"冪等"請求。POST方式在頁面中定義表單,提交表單會把數據提交到服務器,並且多數狀況下會產生數據,好比經常使用的保存數據接口,並不是"冪等"操做,不冪等也就意味着不能隨意屢次執行。
服務接口
這裏指用Ajax程序請求服務接口,提交的請求類型。或者其餘Http請求工具類,還有狀況是微服務中各類Feign接口間的請求。這種狀況接口發送請求時,限制相對較少,好比REST風格接口經常使用GET、POST、PUT、DELETE,幾種方式分別獲取、建立、更新、刪除 資源。
三、握手揮手機制
三次握手
第一次握手:客戶端主動向服務器發起請求鏈接,請求報文中發送SYN=1,此時隨機生成初始序列號seq=x,此時,客戶端進程進入SYN-SENT同步已發送狀態。
第二次握手:服務端收到請求報文後,確認客戶的SYN,若是請求沒有拒絕,則發出確認報文。報文中應該ACK=1,SYN=1,確認號是ack=x+1,同時本身也發送一個SYN包seq=y,此時,服務器進程進入SYN-RCVD同步收到狀態。
第三次握手:客戶端收到確認後,須要向服務器確認報文的ACK=1,ack=y+1,此時,TCP鏈接創建,客戶端進入ESTABLISHED已創建鏈接狀態。完成三次握手,客戶端與服務器開始傳送數據。
四次揮手
第一次揮手:客戶端發送一個結束FIN,用來主動關閉和服務端的數據傳輸,釋放鏈接且中止發送數據,報文首部:FIN=1,序列號seq=u;隨後客戶端進入終止等待1狀態FIN-WAIT-1。
第二次揮手:服務端收到這個FIN,發出確認報文ACK=1,確認收到序號是收到的序號+1,即ack=u+1,且帶上本身的序列號seq=v,和SYN同樣,一個FIN將佔用一個序號。如此,服務器通知應用進程,客戶端已經沒有數據要發送,若是服務器發送數據,客戶端依然要接收,該狀態會持續一段時間,服務端進入關閉等待狀態CLOSE-WAIT。客戶端收到服務器的確認請求後,進入終止等待2狀態FIN-WAIT-2,等待服務器發送鏈接釋放報文。
第三次揮手:服務器向客戶端發送釋放鏈接報文FIN=1,ack=u+1,此時服務端還處於半關閉狀態,服務器可能還會發送一些數據,此時序列號爲seq=w,如此,服務器進入最後確認狀態LAST-ACK,等待客戶端的確認。
第四次揮手:客戶端收到服務器的鏈接釋放報文後,回發確認,ACK=1,ack=w+1,序列號是seq=u+1,如此,客戶端進入時間等待狀態TIME-WAIT。此時TCP鏈接尚未釋放,必須通過最長報文段壽命的時間後,才進入CLOSED狀態。MSL:最長報文段壽命,通常2分鐘,TCP鏈接釋放時,主動方必須通過2MSL後才進入CLOSED狀態,所以主動方關閉時間比較晚。
Java編寫的服務器端程序,具備獨立於平臺和協議的特性,主要功能在於交互式地瀏覽和生成數據,生成動態Web內容。使用Servlet,能夠收集來自網頁表單的用戶輸入,呈現來自數據庫或者其餘源的記錄,還能夠動態建立網頁。
一、實現方式
繼承HttpServlet,HttpServlet擔任抽象模板角色,模板方法:由service()方法擔任;
繼承GenericServlet抽象類,其中的service方法爲抽象方法;
實現Servlet接口,包含init、getServletConfig、service、getServletInfo、destroy幾個核心方法;
二、生命週期
加載和實例化,初始化init,服務service,銷燬:destroy。
三、核心API組件
ServletConfig:獲取servlet初始化參數和servletContext對象;
ServletContext:在整個Web應用的動態資源之間共享數據;
ServletRequest:封裝Http請求信息,在請求時建立;
ServletResponse:封裝Http響應信息,在請求時建立;
四、轉發和重定向
轉發:服務器端進行的頁面跳轉的控制 ;
重定向:服務端響應跳轉信息,瀏覽器端進行的頁面跳轉 ;
五、Cookie與Session
Cookie機制
Cookie在HTTP中一般是用來辨別用戶身份,進行會話跟蹤而儲存在用戶本地終端上的數據,通常會加密處理,由用戶客戶端計算機暫時或永久保存的信息。其結構就是一個鍵和一個值構成的。隨着服務器端的響應發送給客戶端瀏覽器。而後客戶端瀏覽器會把Cookie保存起來,當下一次再訪問服務器時把Cookie再發送給服務器。
Session會話
用戶在應用程序的Web頁之間跳轉時,存儲在Session對象中的變量將不會丟失,而是在整個用戶會話中一直存在下去。Servlet中能夠把一個會話內須要共享的數據保存到HttSession對象中。四大域對象:PageContext、ServletRequest、HttpSession、ServletContext。
六、監聽.過濾.攔截
監聽器
JavaWeb三大組件:Servlet,Listener,Filter,監聽器就是指在應用程序中監聽相關對象狀態變化的組件。
過濾器
客戶端請求Servlet時,先執行相關Filter,若是Filter經過,則繼承執行請求的Servlet;若是Filter不經過,則不會執行用戶請求的Servlet。過濾器能夠動態地攔截請求和響應。
攔截器
Spring框架中的攔截器Interceptor相似於Servlet中的過濾器Filter,主要用於攔截用戶請求並做相應的處理。例如經過攔截器能夠進行權限驗證、記錄請求信息的日誌、判斷用戶是否登陸等。請求轉發不執行攔截、過濾;重定向執行攔截和過濾。
一、C3P0鏈接池
C3P0是一個開源的JDBC鏈接池,應用程序根據C3P0配置來初始化數據庫鏈接,能夠自動回收空閒鏈接的功能。
二、Druid鏈接池
Druid鏈接池爲監控而生,內置強大的監控功能,監控特性不影響性能。內置了StatFilter功能,能採集很是完備的鏈接池中訪問數據庫執行信息,Druid鏈接池內置一個監控頁面,提供了很是完備的監控信息,能夠快速診斷系統的瓶頸,也是當前最經常使用的鏈接池。
一、Jetty容器
Jetty 是一個開源的servlet容器,它爲基於Java的web容器,例如JSP和servlet提供運行環境。Jetty是使用Java語言編寫的,它的API以一組JAR包的形式發佈。開發人員能夠將Jetty容器實例化成一個對象,能夠迅速爲一些獨立運行(stand-alone)的Java應用提供網絡和web鏈接。
二、Tomcat服務器
Tomcat服務器是一個免費的開放源代碼的Web應用服務器,屬於輕量級應用服務器,在中小型系統和併發訪問用戶不是不少的場合下被廣泛使用,是開發和調試JSP程序的首選。使用Tomcat最關鍵的兩個操做:使用開發工具鏈接Tomcat並部署web應用;將應用程序打包放到Tomcat服務下運行。
GitHub·地址 https://github.com/cicadasmile GitEE·地址 https://gitee.com/cicadasmile
推薦閱讀:編程體系整理
序號 | 項目名稱 | GitHub地址 | GitEE地址 | 推薦指數 |
---|---|---|---|---|
01 | Java描述設計模式,算法,數據結構 | GitHub·點這裏 | GitEE·點這裏 | ☆☆☆☆☆ |
02 | Java基礎、併發、面向對象、Web開發 | GitHub·點這裏 | GitEE·點這裏 | ☆☆☆☆ |
03 | SpringCloud微服務基礎組件案例詳解 | GitHub·點這裏 | GitEE·點這裏 | ☆☆☆ |
04 | SpringCloud微服務架構實戰綜合案例 | GitHub·點這裏 | GitEE·點這裏 | ☆☆☆☆☆ |
05 | SpringBoot框架基礎應用入門到進階 | GitHub·點這裏 | GitEE·點這裏 | ☆☆☆☆ |
06 | SpringBoot框架整合開發經常使用中間件 | GitHub·點這裏 | GitEE·點這裏 | ☆☆☆☆☆ |
07 | 數據管理、分佈式、架構設計基礎案例 | GitHub·點這裏 | GitEE·點這裏 | ☆☆☆☆☆ |
08 | 大數據系列、存儲、組件、計算等框架 | GitHub·點這裏 | GitEE·點這裏 | ☆☆☆☆☆ |