我的JSP&Servlet之旅、01 HTTP基礎、模型架構

来源:https://www.cnblogs.com/linxiaoxu/archive/2022/09/19/16709187.html
-Advertisement-
Play Games

我的JSP&Servlet之旅。本節複習鞏固HTTP基礎知識,涉及URI編碼,Servlet &JSP的運作方式,Web開發模式架構。 ...


URL、URN、URI

URL的主要語法格式為,目的是以文字方式來說明互聯網上的資源如何取得。

<scheme>:<scheme-specific-part>

協議特定部分又可以表示為

//<用戶>:<密碼>@<主機>:<埠號>/<路徑>


URN代表某個資源獨一無二的名稱。

URL、URN都用來表示某個資源,後來指定URL標準,URL與URN成為URI的子集。

超文本傳輸協議HTTP(Hyper Transfer Protocol)

兩個重要特性

  • 基於請求、響應模型。必須由瀏覽器主動發出請求。
  • 無狀態協議。響應客戶端後不會記得客戶端的信息。

概念和傳輸過程

  • 在萬維網客戶程式與萬維網伺服器程式之間進行交互所使用的協議,是超文本傳送協議 HTTP (HyperText Transfer Protocol)。
  • HTTP 是一個應用層協議,它使用 TCP 連接進行可靠的傳送。

image-20201024222457800

  • 每個萬維網網點都有一個伺服器進程,它不斷地監聽 TCP 的埠 80,以便發現是否有瀏覽器向它發出連接建立請求。
  • 一旦監聽到連接建立請求並建立了 TCP 連接之後,瀏覽器就向萬維網伺服器發出瀏覽某個頁面的請求,伺服器接著就返回所請求的頁面作為響應。
  • 最後,TCP 連接就被釋放了。

image-20201024222825888

HTTP報文格式

HTTP請求報文格式

image-20201024224828528

image-20220919203341213

image-20220919203430623

註意:雖然在POST請求時,請求參數不會出現在地址欄上,而是寫在信息體重,然而在非加密聯機的情況下,若請求被第三方獲取了,請求參數仍然是一目瞭然,機密信息請務必在加密聯機下傳送。

HTTP響應報文格式

image-20201024224920638

瀏覽器快取是什麼

所謂的快取,是指cache,就是緩存

你以前上過什麼網,那個網站的一些基本元素會保留在本機,就是所謂的快取。
下次訪問這個網站的時候,會從本機讀取這些東西,而不是重新下載。能夠明顯的加速網頁打開。

清除快取就是清掉那些下載過來的東西,讓所有的東西都重新下載。

服務端可以指定適當Cache-Control標頭來避免Get響應被快取,大多數瀏覽器不會對Post響應快取。

URI編碼

image-20220919204722942

image-20220919204825151

Servlet/JSP

JVM 是JAVA程式唯一認識的操作系統,其可執行文件為.class文件。

  • 瞭解 JAVA程式如何與JVM通信
  • 瞭解JVM如何管理JAVA程式對象

Web 容器 是Servlet/JSP唯一認識的HTTP伺服器。

  • 瞭解兩者是如何通信
  • 瞭解容器是如何管理Servlet/JSP對象

什麼是容器

容器是用來持有、保存對象的集合(Collection)對象。

Servlet/JSP的容器概念更廣,不僅持有對象還負責對象的生命周期和相關服務的連接。

  • 具體層面,Servlet/JSP 的 Web 容器是JAVA寫的程式。該容器負責將HTTP文字性的通信協議變成Servlet/JSP中可用的JAVA對象(剖析和轉換的過程)

  • 抽象層面,Web 容器可以視為 HTTP伺服器。Servlet/JSP撰寫時需要符合Web容器的標準規範。

請求、響應過程

image-20220919210159763

一個請求一個線程

Web容器運行在JVM上,當一個請求來到時,會為每個請求分配一個線程。當多個請求之下,會導致多個線程同時共用存取一個對象,發生數據競爭。因此要註意線程安全的問題。

關於記憶體訪問同步可參考:我的Go併發之旅、01 併發哲學與併發原語 - 小能日記 - 博客園 (cnblogs.com)

Servlet類

image-20220919210822467

  • 必須繼承 HttpServlet
  • 輸出HTML時必須通過JAVA的輸入輸出功能。

事實上,Servlet主要是用來定義Java程式邏輯的,應該避免直接在Servlet產生畫面輸出,比如直接編寫HTML。應當適當分配JSP與Servlet的職責。

JSP網頁最後會被轉譯成Servlet類然後編譯並載入到容器中!

MVC

MVC 是 Model、View、Controller 的縮寫,分別是模型、視圖、控制器,分別代表應用程式中三種職責各不相同的對象。

image-20220919211246323

image-20220919211403318

MODEL 2

image-20220919211611394

MVVM

MVVM是前端視圖層的分層思想,主要把每個頁面,分成了M、V和VM。其中,VM是MVVM思想的核心;因為VM是M和V之間的調度者。M保存的是每個頁面中單獨的數據,V就是每個頁面中的HTML結構,VM它是一個調度者,分割了M和V,每當V層想要獲取保存數據的時候,都要由VM做中間處理。前端頁面中使用MVVM思想,主要是為了讓我們開發更佳方便,因為MVVM提供了數據的雙向綁定,雙向綁定是由VM提供的。
image-20220919212130661

MVVM是Model-View-ViewModel的縮寫。MVVM是一種設計思想。Model 層代表數據模型,也可以在Model中定義數據修改和操作的業務邏輯;View 代表UI 組件,它負責將數據模型轉化成UI 展現出來,ViewModel 是一個同步View 和 Model的對象。在MVVM架構下,View 和 Model 之間並沒有直接的聯繫,而是通過ViewModel進行交互,Model 和 View 之間的交互是雙向的, 因此View 數據的變化會同步到Model中,而Model 數據的變化也會立即反應到View 上。ViewModel 通過雙向數據綁定把 View 層和 Model 層連接了起來,而View 和 Model 之間的同步工作完全是自動的,無需人為干涉。因此開發者只需關註業務邏輯,不需要手動操作DOM, 不需要關註數據狀態的同步問題,複雜的數據狀態維護完全由 MVVM 來統一管理

MVC跟MVVM區別

mvvm和mvc區別?它和其它框架(jquery)的區別是什麼?哪些場景適合?

mvc和mvvm其實區別並不大。都是一種設計思想。主要就是mvc中Controller演變成mvvm中的viewModel。mvvm主要解決了mvc中大量的DOM 操作使頁面渲染性能降低,載入速度變慢,影響用戶體驗。例如:vue數據驅動,通過數據來顯示視圖層而不是節點操作。場景:數據操作比較多的場景,更加便捷。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 秒殺請求在高度集中在某一個時間點。這樣一來,就會導致一 個特別高的流量峰值,它對資源的消耗是瞬時的 。能夠搶到商品的人數是有限的,也就是說10人和1000人發 起請求的結果都是一樣的。也就是說真正開始下單時,秒殺請求並不是越多越好。 一、秒殺中的削峰 猶豫伺服器的處理資源是恆定的,用或者不用它 ...
  • 隨著需求開發迭代,代碼庫規模逐漸變大,新的團隊成員引入等諸多因素,系統起初制定的架構規則不可避免遭到破壞。不僅僅是破壞團隊的統一開發規範,更為重要的是隨著代碼庫規模逐漸增長,大大降低系統的可維護性、擴展性,增加評審複雜度和重構成本,也最終導致團隊生產力下降以及研發成本增長。 在敏捷開發環境下,系統... ...
  • 摘要:零售企業就需要安全、可信、開放、能力強大的PaaS集成平臺支撐自身的雲業務,同樣也需要一個強大的業務系統來承載業務。 疫情又來了,買買買,趕緊囤。 這麼快沒貨了? 疫情反覆態勢之下,消費者體驗到的商品到達速度和多樣的產品選擇,以及平臺面臨的跨區調貨和各種渠道的線上流量突增等現狀,使得消費品及零 ...
  • 限流:使用Redisson的RRateLimiter進行限流 多策略:map+函數式介面優化if判斷 自定義註解 /** * aop限流註解 */ @Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.R ...
  • 我的gRPC之旅。本節簡單介紹gRPC的四種通信模式。簡單通信模式、服務端流通信模式、客戶端流通信模式、雙向流通信模式。 ...
  • Nacos 英文全稱為 Dynamic Naming and Configuration Service,是一個由阿裡巴巴團隊使用 Java 語言開發的開源項目。 ...
  • 六大設計原則 單一職責原則 介面隔離原則 開閉原則 依賴倒置原則 里氏代換原則 迪米特法則 單一職責原則 我們分別看兩個案例,一個是遵守單一職責原則,另一個是違背。 違背的案例 class Computer { void calc() { System.out.println("計算數據"); // ...
  • 在我們日常的開發中,我們經常會遇到 NullPointerException。如何才能優雅的處理NPE?這裡告訴大家一個較為流行的方法 java.util.Optional 使用Optional來修飾對象,表示這個對象可能為null。在使用時,就要加以註意,必須要考慮該值為null的場景。 使用Op ...
一周排行
    -Advertisement-
    Play Games
  • 1、預覽地址:http://139.155.137.144:9012 2、qq群:801913255 一、前言 隨著網路的發展,企業對於信息系統數據的保密工作愈發重視,不同身份、角色對於數據的訪問許可權都應該大相徑庭。 列如 1、不同登錄人員對一個數據列表的可見度是不一樣的,如數據列、數據行、數據按鈕 ...
  • 前言 上一篇文章寫瞭如何使用RabbitMQ做個簡單的發送郵件項目,然後評論也是比較多,也是準備去學習一下如何確保RabbitMQ的消息可靠性,但是由於時間原因,先來說說設計模式中的簡單工廠模式吧! 在瞭解簡單工廠模式之前,我們要知道C#是一款面向對象的高級程式語言。它有3大特性,封裝、繼承、多態。 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 介紹 Nodify是一個WPF基於節點的編輯器控制項,其中包含一系列節點、連接和連接器組件,旨在簡化構建基於節點的工具的過程 ...
  • 創建一個webapi項目做測試使用。 創建新控制器,搭建一個基礎框架,包括獲取當天日期、wiki的請求地址等 創建一個Http請求幫助類以及方法,用於獲取指定URL的信息 使用http請求訪問指定url,先運行一下,看看返回的內容。內容如圖右邊所示,實際上是一個Json數據。我們主要解析 大事記 部 ...
  • 最近在不少自媒體上看到有關.NET與C#的資訊與評價,感覺大家對.NET與C#還是不太瞭解,尤其是對2016年6月發佈的跨平臺.NET Core 1.0,更是知之甚少。在考慮一番之後,還是決定寫點東西總結一下,也回顧一下.NET的發展歷史。 首先,你沒看錯,.NET是跨平臺的,可以在Windows、 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 添加節點(nodes) 通過上一篇我們已經創建好了編輯器實例現在我們為編輯器添加一個節點 添加model和viewmode ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...
  • 類型檢查和轉換:當你需要檢查對象是否為特定類型,並且希望在同一時間內將其轉換為那個類型時,模式匹配提供了一種更簡潔的方式來完成這一任務,避免了使用傳統的as和is操作符後還需要進行額外的null檢查。 複雜條件邏輯:在處理複雜的條件邏輯時,特別是涉及到多個條件和類型的情況下,使用模式匹配可以使代碼更 ...
  • 在日常開發中,我們經常需要和文件打交道,特別是桌面開發,有時候就會需要載入大批量的文件,而且可能還會存在部分文件缺失的情況,那麼如何才能快速的判斷文件是否存在呢?如果處理不當的,且文件數量比較多的時候,可能會造成卡頓等情況,進而影響程式的使用體驗。今天就以一個簡單的小例子,簡述兩種不同的判斷文件是否... ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...