編程體系結構:JavaEE之Web開發

2020-12-20 知了V笑

一、基礎概念

1、CS與BS架構

CS架構模式

客戶端/伺服器(Client/Server)模式,既要編寫伺服器端程序,也要開發客戶端程序,軟體更新時需要同時更新客戶端和伺服器端,整體模式相比BS架構要複雜,但是安全性比較高。

B/S架構模式

即瀏覽器/伺服器(Browser/Server),只需要編寫伺服器端程序,瀏覽器的界面作為訪問的服務端的入口,架構相對簡單,可以快速迭代,但是安全性較差。

2、Socket通信機制

TCP/IP 協議

傳輸控制協議/網際協議是指能夠在多個不同網絡間實現信息傳輸的協議簇。TCP/IP協議不僅僅指的是TCP和IP兩個協議,而是指一個由FTP、SMTP、TCP、UDP、IP等協議構成的協議簇,只是因為在TCP/IP協議中TCP協議和IP協議最具代表性,所以被稱為TCP/IP協議。

Socket套接字

網絡中不同主機上的應用進程之間進行雙向通信的端點的抽象,一個套接字就是網絡上進程通信的一端,提供了應用層進程利用網絡協議交換數據的機制。通常接收請求數據,並做業務處理的稱為服務端即ServerSocket,發送請求並接收處理結果的稱為客戶端。

二、Http協議

1、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。

2、Get和Post請求

瀏覽器端

從瀏覽器角度看這個兩種請求的區別:GET方式讀取資源,比如Get到靜態頁面,即使多次讀取不會對訪問數據產生影響,也被稱為"冪等"請求。POST方式在頁面中定義表單,提交表單會把數據提交到伺服器,而且多數情況下會產生數據,比如常用的保存數據接口,並非"冪等"操作,不冪等也就意味著不能隨意多次執行。

服務接口

這裡指用Ajax程序請求服務接口,提交的請求類型。或者其他Http請求工具類,還有情況是微服務中各種Feign接口間的請求。這種情況接口發送請求時,限制相對較少,比如REST風格接口常用GET、POST、PUT、DELETE,幾種方式分別獲取、創建、更新、刪除 資源。

3、握手揮手機制

三次握手

第一次握手:客戶端主動向伺服器發起請求連接,請求報文中發送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狀態,因此主動方關閉時間比較晚。

三、Servlet組件

Java編寫的伺服器端程序,具有獨立於平臺和協議的特性,主要功能在於交互式地瀏覽和生成數據,生成動態Web內容。使用Servlet,可以收集來自網頁表單的用戶輸入,呈現來自資料庫或者其他源的記錄,還可以動態創建網頁。

1、實現方式

繼承HttpServlet,HttpServlet擔任抽象模板角色,模板方法:由service()方法擔任;

繼承GenericServlet抽象類,其中的service方法為抽象方法;

實現Servlet接口,包含init、getServletConfig、service、getServletInfo、destroy幾個核心方法;

2、生命周期

加載和實例化,初始化init,服務service,銷毀:destroy。

3、核心API組件

ServletConfig:獲取servlet初始化參數和servletContext對象;

ServletContext:在整個Web應用的動態資源之間共享數據;

ServletRequest:封裝Http請求信息,在請求時創建;

ServletResponse:封裝Http響應信息,在請求時創建;

4、轉發和重定向

轉發:伺服器端進行的頁面跳轉的控制 ;

重定向:服務端響應跳轉信息,瀏覽器端進行的頁面跳轉 ;

5、Cookie與Session

Cookie機制

Cookie在HTTP中通常是用來辨別用戶身份,進行會話跟蹤而儲存在用戶本地終端上的數據,一般會加密處理,由用戶客戶端計算機暫時或永久保存的信息。其結構就是一個鍵和一個值構成的。隨著伺服器端的響應發送給客戶端瀏覽器。然後客戶端瀏覽器會把Cookie保存起來,當下一次再訪問伺服器時把Cookie再發送給伺服器。

Session會話

用戶在應用程式的Web頁之間跳轉時,存儲在Session對象中的變量將不會丟失,而是在整個用戶會話中一直存在下去。Servlet中可以把一個會話內需要共享的數據保存到HttSession對象中。四大域對象:PageContext、ServletRequest、HttpSession、ServletContext。

6、監聽.過濾.攔截

監聽器

JavaWeb三大組件:Servlet,Listener,Filter,監聽器就是指在應用程式中監聽相關對象狀態變化的組件。

過濾器

客戶端請求Servlet時,先執行相關Filter,如果Filter通過,則繼承執行請求的Servlet;如果Filter不通過,則不會執行用戶請求的Servlet。過濾器可以動態地攔截請求和響應。

攔截器

Spring框架中的攔截器Interceptor類似於Servlet中的過濾器Filter,主要用於攔截用戶請求並作相應的處理。例如通過攔截器可以進行權限驗證、記錄請求信息的日誌、判斷用戶是否登錄等。請求轉發不執行攔截、過濾;重定向執行攔截和過濾。

四、資料庫連接池

1、C3P0連接池

C3P0是一個開源的JDBC連接池,應用程式根據C3P0配置來初始化資料庫連接,可以自動回收空閒連接的功能。

2、Druid連接池

Druid連接池為監控而生,內置強大的監控功能,監控特性不影響性能。內置了StatFilter功能,能採集非常完備的連接池中訪問資料庫執行信息,Druid連接池內置一個監控頁面,提供了非常完備的監控信息,可以快速診斷系統的瓶頸,也是當前最常用的連接池。

五、運行伺服器

1、Jetty容器

Jetty 是一個開源的servlet容器,它為基於Java的web容器,例如JSP和servlet提供運行環境。Jetty是使用Java語言編寫的,它的API以一組JAR包的形式發布。開發人員可以將Jetty容器實例化成一個對象,可以迅速為一些獨立運行(stand-alone)的Java應用提供網絡和web連接。

2、Tomcat伺服器

Tomcat伺服器是一個免費的開放原始碼的Web應用伺服器,屬於輕量級應用伺服器,在中小型系統和並發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP程序的首選。使用Tomcat最關鍵的兩個操作:使用開發工具連接Tomcat並部署web應用;將應用程式打包放到Tomcat服務下運行。

相關焦點

  • 最受歡迎的 Java Web 開發框架盤點
    21世紀技術官社區導讀:Java發展至今已20餘年,是目前開發者最需要的程式語言之一,為不同用例、不同場景湧現出各種類型的框架,旨在減輕開發者的重複編碼以及底層工作
  • javaee是不是2018IT行業最熱門的崗位?零基礎學javaee需要多久?
    信息化時代到了,軟體開發行業自然是日益熱門,因為信息化的建設離不開軟體開發,軟體開發行業迅速發展起來了,對於軟體開發人才需求也是越來越大,目前我國軟體人才缺口有上百萬的需求。       在軟體開發行業中,也有各式各樣的崗位,那麼哪個崗位最熱門呢?
  • Web前端知識體系梳理,值得收藏
    前言現在是資訊時代,經過 web1.0 時期、web2.0 時期到現在的移動網際網路時期,信息獲取越來越高效,坐著不動就會有大量的新聞、博客、資訊向你推薦而來。作為一名靠譜的程式設計師,你免不了要查閱大量的文章、視頻和書籍來充斥你的知識量,不斷學習。但是現在網上大量的信息堆積起來,對於你來說意味著什麼?
  • .Net Web開發技術棧(更全的知識體系)
    有很多朋友有的因為興趣,有的因為生計而走向了.Net中,有很多朋友想學,但是又不知道怎麼學,學什麼,怎麼系統的學,為此我以我微薄之力總結歸納寫了一篇
  • 【崗位解讀】(48)——網頁(WEB)前端開發工程師
    前端開發的入門門檻其實非常低,與伺服器端語言先慢後快的學習曲線相比,前端開發的學習曲線是先快後慢。所以,對於從事IT工作的人來說,前端開發是個不錯的切入點。也正因為如此,前端開發領域有很多自學成「才」的同行,但大多數人都停留在會用的階段,因為後面的學習曲線越來越陡峭,每前進一步都很難。另一方面,正如前面所說,前端開發是個非常新的職業,對一些規範和最佳實踐的研究都處於探索階段。
  • web前端和後端的區別 web前端開發薪資
    web前端和後端的區別 Web前端: 顧名思義是來做Web的前端的。我們這裡所說的前端泛指Web前端,也就是在Web應用中用戶可以看得見碰得著的東西。包括Web頁面的結構、Web的外觀視覺表現以及Web層面的交互實現。
  • Web應用程式開發五步法
    那麼作為一名Web開發人員,怎樣去開發一款優秀的Web應用程式呢?這個問題沒有一個簡單的答案,甚至那些教育機構都未必能清楚的知道。所以,像大多數在這個領域裡的web開發人員一樣,我們只是通過去做,去實驗才學會了這些。沒有人告訴我們如何去做,我們從給自己做點什麼東西開始,學會如何開發web應用程式是在這個過程中的一個副產品。這是學習任何語言的一個非常有效的方法。
  • 使用Ruby on Rails進行Web開發的利弊
    因此,Ruby程式語言的創建者Matsuki Yukihiro Matsumoto將此工具稱為「 Ruby的殺手級應用」。Rails的基本原理Ruby on Rails是一個廣泛用於Web應用程式開發的開源框架。它在Ruby上運行,專注於簡單性和完善的輸出。
  • 小白如何學習web前端開發知識
    在掌握基礎模塊的基礎上,Web前端工程師還必須進一步將技能層次化、系統化,從而能夠視線頁面架構、移動頁面開發等等任務。不僅新人小白需要努力,就連已經入職0~3年的前端開發工程師,也需要不斷學習了解前端高階知識和技能,不斷修煉自身武功。
  • Java開發必須要知道的知識體系
    Java是超高人氣程式語言,擁有跨平臺、面向對象、泛型編程等特性。
  • 用程式語言編寫web爬蟲,不得不提Python的簡單、高效
    1.網頁開發-讓世界看到你的作品Python常用於Web開發。比如Apache可以通過mod_wsgi模塊運行Python編寫的Web程序。Python定義了WSGI標準應用接口,協調Http伺服器和基於Python的Web程序之間的通信。
  • w3cschool web端微課上線,像遊戲一樣闖關學編程!
    近日,w3cschool官方上線了web端微課,實現了w3cschool app端和web端同步。
  • 基於B/S結構的網絡控制系統開發
    與傳統的集中式信息處理模式相比,它可以減少系統開支,將網絡所連接的微機群信息處理性能大大提高,因為其分布式處理的特點,它可以提高系統的可靠性,此外,由於其採用模塊化及開放式體系結構,使得它容易將不同的機器有效地連接在一起,易於系統的擴展升級,提高了系統的靈活性。但其也存在許多潛在的缺陷[3],諸如布局困難、培訓費用及系統維護費用高等,而且c/s結構也不能滿足客戶端跨平臺的要求。
  • java和php在web開發方面對比分析
    比較php和jsp這兩個web開發技術,在目前的情況是其實是比較php和java的web開發。以下是我就幾個主要方面進行的比較:java的web開發屬於sun公司定義的j2ee其中的規範。而且在j2ee中包括了java的web開發的所有方面,如:jsp、servlet、jdbc、jndi、javabean、ejb等等。j2ee就特別適合於做大型的企業級的應用。
  • 五款web前端開發工具推薦,哪款最能cue到你?
    #思途# 對於剛剛入行不久的web前端編程小白來說,在開發工具的選擇方面或許會顯得有些力不從心,畢竟網絡上眾說紛紜,相關的開發工具也是非常之多,以至於許多小夥伴一時不知道從何下手。
  • 自主開發程式語言被指Python套殼?中科院回應了
    此前,據中國新聞網等多家媒體報導,中國科學院計算技術研究所(以下簡稱中科院計算所)1月15日正式對外發布該所計算機體系結構國家重點實驗室編譯技術團隊自主研發、面向新一代人工智慧和物聯網應用的「木蘭」程式語言體系,並推出「木蘭」開源軟體包,供全球用戶免費下載獲取。
  • Node.js與Ruby on Rails:二者哪個最適合Web開發?
    讓我們先來看看兩種技術之間的一些相似之處。受歡迎的伺服器端技術。相當容易學習。高性能。為頂級網站/應用程式使用。強大的社區。基於類似MVC的結構。快速開發。這兩個節點。js和Rails是受人尊敬和流行的伺服器端技術,可以做很多不同的事情。
  • 轉行IT行業學什麼編程好
    程式語言是程式設計師擺弄計算機的工具。任何一種語言,亦或是一門技術,只要是運行在馮諾依曼體系的計算機上,要想鑽得深,逃不開的還是那些原理性的東西——數據結構、內存管理、多線程、作業系統、網絡協議等等。這些原理知識與語言本身無關,卻是用好每一門語言的基石。
  • Web開發的最佳Python框架列表
    當開發Web應用程式時,Python將成為每個開發人員的首選。有許多可用的頂級Python框架可以使你的Web開發任務非常容易。毫無疑問,Python是市場上最受歡迎的程式語言之一。如果你想進行Web開發,這是最佳選擇之一。
  • 「首席架構師看Web趨勢」JavaScript和Web開發InfoQ趨勢報告
    TypeScript的受歡迎程度急劇上升,現在已經進入了GitHub上最受歡迎的10種程式語言,InfoQ今年對很多框架和庫進行了調整。這個月我們將討論JavaScript和Web開發,因為這個快速變化的行業每年需要進行一次以上的更新。這是我們在2018年第一季度回顧的圖表。這是2018年第四季度的修訂版web開發領域對我們來說總是一個有趣的領域,幾乎每天都有新的JavaScript框架發布。