MVC 模式/Servlet/JSP 編譯原理剖析:Servlet 組件到底屬于 MVC 模式的哪一層?

文章目錄

  • 前言
  • 一、回憶什么是 MVC 模式?
    • 1.1、Model、View、Controller 組件介紹
    • 1.2、明確 View 與 Controller 組件區別
  • 二、什么是 Servlet?
    • 2.1、Servlet 的組件定義
    • 2.2、Servlet 組件處于 Controller 層?
  • 三、老師說 Servlet 是 View 層的!
  • 四、什么是 JSP?
    • 4.1、Servlet 是 JSP 的變式
  • 五、Servlet 的角色根據應用場景定義
    • 5.1、開發中的 MVC 設計框架
    • 5.1、完整 MVC 設計框架中不同組件的角色
    • 5.2、老師說 Servlet 是 View 層的!!
    • 5.3、純 JSP 項目中 Servlet 的角色
  • 總結


前言

今天課下,偶然聽到有幾個同學在討論這么一個問題:Servlet 到底屬于 MVC 模式的哪一層?談到這個問題就考察你對于 MVC 模式的熟悉程度了。本篇我們就分別從 MVC 模式、Servlet 和 JSP 的原理來探討一下,Servlet 到底屬于哪一層?

在這里插入圖片描述


一、回憶什么是 MVC 模式?

首先我們先回憶一下這個經典的軟件設計框架——MVC 模式。

這里請注意軟件設計模式與軟件設計框架的區別:軟件設計模式是指那經典的 23 個設計模式:創建型、行為型、結構型;軟件設計框架就是 MVC、SSH、SSM 等。

MVC(Model VIew Controller),是模型、視圖、控制器的縮寫,是一種經典的軟件設計框架,同時提供了對 HTML、CSS、JavaScript 的支持。

1.1、Model、View、Controller 組件介紹

經典的 MVC 模式整體組件類型的關系和功能如下圖所示,我們分別來介紹組件類型以及關系:

在這里插入圖片描述

  1. Model(模型)是應用程序中用于處理數據邏輯的部分,即業務模型。用來表示應用程序的核心,比如:數據庫記錄字段,負責在數據庫中存取數據。
  2. View(視圖)是應用程序中處理數據顯示的部分,即用戶界面,通常視圖是依賴模型的數據來創建的,模型發生改變視圖必須同步更新。
  3. Controller(控制器)是應用程序中處理用戶交互的部分。負責從視圖中讀取數據,控制用戶的輸入,并向模型發送數據。

1.2、明確 View 與 Controller 組件區別

現在從 MVC 模式的介紹我們可以明確 View 和 Controller 的區別:View 負責數據顯示,Controller 負責數據和用戶的交互。

二、什么是 Servlet?

介紹完 MVC 模式,那么什么是 Servlet 呢?Servlet 又是怎么樣的一個組件呢?它扮演怎么一個角色呢?

2.1、Servlet 的組件定義

Servlet 是用 Java 語言編寫的服務器端程序,是由服務器端調用執行,按照 Servlet 自身規范編寫的 Java 類。Servlet 可以處理客戶端傳來的 HTTP 請求,并返回響應。

2.2、Servlet 組件處于 Controller 層?

說得通俗點,Servlet 就是一個 Java 類,里面定義了接收用戶請求,調用業務類,發送響應視圖的方法。現在你是不是覺得 Servlet 好像是屬于 Controller 層的?

三、老師說 Servlet 是 View 層的!

Q:這個時候可能有人反問?為什么我們老師說過說 Servlet 是 View 層的?你這說的不對!
或者說:為什么我們老師說過說 JSP 是 Controller 層的?你這說的不對!

A:別急嘛,我們接著往下走,再來剖析一下 JSP 的原理。這倆問題我們放在最后面作為總結。

四、什么是 JSP?

要分析 Servlet 的角色,我們就不得不說一下 JSP,什么是 JSP?關于 JSP 的基礎定義大家早已耳熟能詳,我就不再贅述。

4.1、Servlet 是 JSP 的變式

  1. JSP 將 Java 代碼和特定變動的內容嵌入到靜態頁面中,實現以靜態頁面為模板,動態生成其他部分。
  2. JSP 文件在運行的時候編譯器會將內嵌的 Java 代碼編譯成 Java 寫的 Servlet 代碼,JSP 指令通過 JSP 的編譯器來控制如何生成 Servlet,然后 Java 代碼編譯為 .class 結尾的中間字節碼文件最后轉化為二進制的機器碼。
  3. 我們通過 JSP 的內置指令來取代 Java 中(即 Servlet)中使用out.write();的輸出,節約大量的代碼又能實現頁面交互。

更詳細的 JSP 編譯原理部分建議大家看我之前的博文——JSP 編譯原理:JSP 是 Servlet?如何用 Eclipse 查看 JSP 編譯生成的 Servlet 源文件?

由此我們得出下一個結論:JSP 就是 Servlet,反過來也可以說 Servlet 就是 JSP。你又要有問題了?

Q:你這給我搞糊涂了,Servlet 到底是什么角色?

五、Servlet 的角色根據應用場景定義

我們在項目開發中,完整的一個 MVC 設計框架可能會包含很多組件或者同時結合其他的組件,我們分別從不同的需求場景來一一介紹。

5.1、開發中的 MVC 設計框架

項目中經常使用的 MVC 模式組件結構以及其功能如下圖所示:

在這里插入圖片描述
上圖在我們經典的 MVC 結構中進一步進行了細分:

  • View 層負責數據的顯示。包括我們看得到的使用 JSP 和 HTML 實現的界面。
  • Cotroller 層負責控制數據和用戶的交互。包括我們上面提到的 Servlet。
  • Model 層負責對數據邏輯的處理。包括實體類 POJO(封裝對象數據)、業務層 Service(處理數據邏輯信息)、持久層 Dao(進行數據的 CRUD)等組件。

注意:在開發中一定要遵循開發規范、框架規范,通過 Servlet 來實現交互,通過業務層 Service 進行邏輯處理,通過持久層 Dao 來執行數據查詢。不要把每個組件的順序和功能搞混,否則使用框架也就沒有意義了。

5.1、完整 MVC 設計框架中不同組件的角色

在如上圖所示的完整的 MVC 設計框架中,嚴格來說,Servlet 是屬于Controller 層的,負責和用戶的交互,而我們常見的業務層 Service、持久層 Dao、實體類 JavaBean 都是屬于Model層的

5.2、老師說 Servlet 是 View 層的!!

A:好了我們來回答這個問題。
現在你需要返回去看一下上面 4.1 的內容了——JSP 的本質就是 Servlet,就是 Java 類,Servlet 也就是 JSP,說 Servlet 處于 View 層也沒大錯。但是嚴格來說 JSP 的主要功能是實現數據信息的顯示,很少的一部分功能用于實現數據信息的交互處理,所以我們通常按照代碼規范將 Serlet 作為 Java 代碼歸為 Controller 層。明白?

5.3、純 JSP 項目中 Servlet 的角色

如果你看的是純 JSP 的教程,可能會直接使用 JSP 硬連數據庫,而不添加其他的組件,那么這個時候就可以說:Servlet 是屬于 View 層組件。因為僅僅就是使用 JSP 就可以實現簡單的增刪改查,也沒有建立 Java 類文件。


總結

本文帶領大家回顧了經典的 MVC 軟件設計框架,辨析了 JSP 與 Servlet 的組件定位,明確 Servlet 在 MVC 中是處于 Controller 層,在非嚴格 MVC 模式中也可處于 View 層。通過對于組件角色的定位,更深一步了解和掌握 Servlet 與 JSP 的原理,掌握 MVC 這個經典的設計框架。我們在之后的框架學習中,一切的原理都是圍繞這個基礎展開的,框架僅僅只是為我們提供一個方便的工具,基礎還是要打牢的。

在這里插入圖片描述


我是白鹿,一個不懈奮斗的程序猿。望本文能對你有所裨益,歡迎大家的一鍵三連!若有其他問題、建議或者補充可以留言在文章下方,感謝大家的支持!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/530727.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/530727.shtml
英文地址,請注明出處:http://en.pswp.cn/news/530727.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

操作系統原理:進程 PV 操作如何計算?全網最全三種前驅圖計算類型總結

文章目錄前言一、PV 操作定義1.1、P 操作定義1.2、V 操作定義二、串聯進程(單線前驅圖)2.1、什么是單線前驅圖?2.2、如何計算單線前驅圖的 PV?2.2.1、計算前驅節點 PV2.2.2、計算中間節點 PV2.2.3、計算尾節點 PV三、并聯進程&…

Spring 容器:三種方式解決 Resource leak: ‘applicationContext‘ is never closed 問題

文章目錄前言一、Spring 容器警告產生的場景二、Spring 容器未關閉后果分析2.1、肉眼可見的警告2.2、導致的內存泄漏2.2.1、什么是內存泄漏?2.2.2、如何判斷內存泄漏?2.2.3、Java 中的 GC(垃圾回收)2.2.4、Java 中會導致內存泄漏的…

SSM 整合 4:Spring IoC 容器基于的兩個重要接口 BeanFactory 和 ApplicationContext

文章目錄 前言一、BeanFactory 接口1.1、加載 Spring 配置文件創建 BeanFactory 接口實例1.2、開發中的運用以及使用說明二、ApplicationContext 接口2.1、ClassPathXmlApplicationContext 創建接口實例2.2、FileSystemXmlApplicationContext 創建接口實例2.3、通過 Web 服務器…

SRA 案例:關于華為開發者聯盟基礎服務文檔內容的改進建議(華為開發者聯盟文檔深度體驗官)

文章目錄前言一、文檔中心的外鏈跳轉問題1.1、問題描述1.2、造成的問題1.3、改進建議二、圖片失真和無法放大查看問題2.1、問題描述2.2、造成的問題2.3、改進建議三、個別 SDK 詞匯缺少必要的說明3.1、問題描述3.2、造成的問題3.3、改進建議四、郵箱信息的優化4.1、問題描述4.2…

騰訊位置服務:有何優勢?如何使用平臺創建應用和服務調用的 Key?

文章目錄前言一、騰訊位置服務的優勢1.1、提供豐富的地圖產品1.2、提供行業解決方案1.3、提供其他生態維度的支持1.4、海量的數據基礎1.5、豐富的開發文檔二、初識騰訊位置服務2.1、用戶的注冊與登錄(附專屬邀請碼)2.2、開發者信息的完善三、創建服務平臺…

畢業生當頭一棒?憶本科四年,高校畢業生與就業單位基本要求差多少?工作還是考研?

文章目錄前言一、大學本科前兩年的生活1.1、庸庸碌碌、中規中矩1.2、收獲了愛情二、大三的改變2.1、學會自律2.2、學會自我總結2.3、眼光要具有前瞻性三、畢業答辯3.1、個人設計答辯3.2、團隊設計答辯四、南京之行4.1、銘記歷史,感恩先輩4.2、加強自我認知與提升五、…

Gitee 答疑:為什么從 Gitee 平臺 Pull 代碼到 STS/Eclipse 后文件亂碼?逐步排查

文章目錄前言一、產生亂碼場景1.1、錯誤描述1.2、解決思路二、解決方式2.1、檢查 Git 平臺上的源碼2.2、Git 的運行原理2.3、修改 IDE 的文本編碼格式2.4、重新打開目的文件問題解決2.5、仍存在問題看這里(重新拉區合并)總結前言 我們從 Gitee 平臺 Pull…

flash 異常修復:QQ 的 flash 圖標顯示異常?QQ 秀、表情加載異常?一招解決

文章目錄前言一、產生錯誤場景1.1、flash 圖標顯示異常1.2、解決思路二、安裝合適版本的 Flash Player2.1、選擇合適版本的 Flash Player2.2、安裝 Flash Player三、重啟 QQ 客戶端四、flash 動畫加載異常4.1、動畫加載異常原因分析4.2、下載安裝 flash 修復工具4.3、使用 Flas…

電腦廣告多?Windows 自帶惡意軟件刪除工具還不會使用?有必要安裝殺毒軟件嗎?

文章目錄前言一、啟動惡意軟件刪除工具二、掃描類型的選擇三、啟動軟件掃描四、惡意軟件刪除工具的說明五、對于惡意軟件處理的建議總結前言 可能有些小伙伴發現,哎?為什么我的電腦彈窗廣告這么多?難不成小視頻看多了?電腦中毒了&…

《軟件項目管理(第二版)》第 8 章——項目團隊與干系人 重點部分總結

文章目錄 前言一、簡答題二、論述題總結前言 學習了項目的開發與發布之后,我們就可以單獨對一個項目進行開發了,但是在企業中開發中,除了編碼之外,還需要項目管理、團隊協作開發等,這就是軟件項目管理板塊要學習的內容。本文是對《軟件項目管理(第二版)》第 8 章——項目…

《軟件項目管理(第二版)》第 7 章——項目風險管理 重點部分總結

文章目錄 前言一、單選題二、填空題三、簡答題四、論述題總結前言 學習了項目的開發與發布之后,我們就可以單獨對一個項目進行開發了,但是在企業中開發中,除了編碼之外,還需要項目管理、團隊協作開發等,這就是軟件項目管理板塊要學習的內容。本文是對《軟件項目管理(第二…

《軟件項目管理(第二版)》第 6 章——項目質量管理 重點部分總結

文章目錄 前言一、單選題二、判斷題三、簡答題總結前言 學習了項目的開發與發布之后,我們就可以單獨對一個項目進行開發了,但是在企業中開發中,除了編碼之外,還需要項目管理、團隊協作開發等,這就是軟件項目管理板塊要學習的內容。本文是對《軟件項目管理(第二版)》第 6…

《軟件項目管理(第二版)》第 5 章——項目進度和成本管理 重點部分總結

文章目錄 前言一、填空題二、簡答題三、論述題總結前言 學習了項目的開發與發布之后,我們就可以單獨對一個項目進行開發了,但是在企業中開發中,除了編碼之外,還需要項目管理、團隊協作開發等,這就是軟件項目管理板塊要學習的內容。本文是對《軟件項目管理(第二版)》第 5…

《軟件項目管理(第二版)》第 1 章——概述 重點部分總結

文章目錄 前言一、填空題二、判斷題三、簡答題總結前言 學習了項目的開發與發布之后,我們就可以單獨對一個項目進行開發了,但是在企業中開發中,除了編碼之外,還需要項目管理、團隊協作開發等,這就是軟件項目管理板塊要學習的內容。本文是對《軟件項目管理(第二版)》第 1…

《軟件項目管理(第二版)》第 2 章——項目準備和啟動 重點部分總結

文章目錄 前言一、單選題二、判斷題三、簡答題總結前言 學習了項目的開發與發布之后,我們就可以單獨對一個項目進行開發了,但是在企業中開發中,除了編碼之外,還需要項目管理、團隊協作開發等,這就是軟件項目管理板塊要學習的內容。本文是對《軟件項目管理(第二版)》第 2…

《軟件項目管理(第二版)》第 3 章——項目計劃 重點部分總結

文章目錄 前言一、單選題二、填空題三、簡答題總結前言 學習了項目的開發與發布之后,我們就可以單獨對一個項目進行開發了,但是在企業中開發中,除了編碼之外,還需要項目管理、團隊協作開發等,這就是軟件項目管理板塊要學習的內容。本文是對《軟件項目管理(第二版)》第 3…

《軟件項目管理(第二版)》第 4 章——項目估算 重點部分總結

文章目錄 前言一、單選題二、簡答題總結前言 學習了項目的開發與發布之后,我們就可以單獨對一個項目進行開發了,但是在企業中開發中,除了編碼之外,還需要項目管理、團隊協作開發等,這就是軟件項目管理板塊要學習的內容。本文是對《軟件項目管理(第二版)》第 4 章——項目…

《軟件需求分析(第二版)》第 1 章——軟件需求基礎知識 重點部分總結

文章目錄 前言一、單選題二、填空題三、判斷題四、簡答題總結前言 軟件需求分析就是把軟件計劃期間建立的軟件可行性分析求精和細化,分析各種可能的解法,并且分配給各個軟件元素。需求分析是軟件定義階段中的最后一步,是確定系統必須完成哪些工作,也就是對目標系統提出完整…

《軟件需求分析(第二版)》第 2 章——客戶眼中的需求 重點部分總結

文章目錄 前言一、簡答題總結前言 軟件需求分析就是把軟件計劃期間建立的軟件可行性分析求精和細化,分析各種可能的解法,并且分配給各個軟件元素。需求分析是軟件定義階段中的最后一步,是確定系統必須完成哪些工作,也就是對目標系統提出完整、準確、清晰、具體的要求。本文…

《軟件需求分析(第二版)》第 3 章——需求工程的推薦方法 重點部分總結

文章目錄 前言一、單選題二、填空題總結前言 軟件需求分析就是把軟件計劃期間建立的軟件可行性分析求精和細化,分析各種可能的解法,并且分配給各個軟件元素。需求分析是軟件定義階段中的最后一步,是確定系統必須完成哪些工作,也就是對目標系統提出完整、準確、清晰、具體的…