詳解 Spring MVC(Spring MVC 簡介)

什么是 Spring MVC?

Spring MVC 是 Spring 框架提供的一個基于 MVC 模式的輕量級 Web 框架,是 Spring 為表示層開發提供的一整套完整的解決方案,Spring MVC 使用了 MVC 架構模式,將 Web 層職責解耦,基于請求驅動模型,簡化了 Web 應用程序的開發過程。

什么是 MVC?

MVC 是模型(Model)、視圖(View)、控制器(Controller)的簡寫,是一種軟件設計規范,是一種架構設計模式,MVC 模式降低了視圖和與業務邏輯的耦合。

  • 模型(Model):數據模型,提供要展示的數據,包含數據的查詢和組裝。
  • 視圖(View):負責進行模型的展示,就是我們通過界面可以看到的界面。
  • 控制器(Controller):接受用戶請求,委托給模型處理,模型處理完數據返回給視圖,由視圖進行展示,控制器可以理解為一個控制中心、調度員的角色。

Spring MVC 的特點?

  • 輕量級、簡單易學習,使開發人員能夠快速開發出高質量的Web應用程序。
  • 可維護性,Spring MVC 框架采用了 MVC 設計模式,將模型、視圖、控制器進行了分離,使得代碼更加清晰、易于維護。
  • 靈活,Spring MVC 框架對于多種數據源和視圖技術提供了支持,如JSP、Velocity、Freemarker等,可以讓使用者靈活的選擇技術方案。
  • 可擴展,Spring MVC 框架提供了很多擴展點,開發人員可以利用這些擴展點去擴展自己需要的功能,如可以自定義視圖解析器、攔截器等。
  • 易于集成,Spring MVC 可以與 Spring 無縫集成,可以提升開發效率。
  • 靈活的URL映射,支持多種處理器映射方式,如基于注解的映射和基于URL映射的映射。
  • 單元測試,Spring MVC提供了強大的約定大于配置的契約式編程支持,以及簡單的web層單元測試。
  • 支持國際化,可以根據用戶區域顯示多國語言。
  • 高效,Spring MVC 框架具有高效的處理請求和響應的能力。

Spring MVC 的核心組件?

  • DispatcherServlet(前端控制器):DispatcherServlet 是 Spring MVC 的核心,即是整個請求處理流程的入口,也貫穿這個流程,負責協調各個組件的工作,是一個中心控制器的作用。
  • HandlerMapping(處理器映射器):HandlerMapping 主要是將客戶端的請求映射到具體的處理程序上,也就是幫助找到具體 Controller,一般會根據請求的 url 及類型,來找到具體的處理器。
  • HandlerAdapter(處理器適配器):HandlerAdapter 負責適配不同類型的處理程序,匹配到具體的 Handler。
  • Controller(控制器):Controller 負責處理客戶端的請求并響應,它通常包含一些處理方法,這些處理方法被稱為 Handler。
  • ModelAndView(模型和視圖):ModelAndView 是一個持有模型數據和視圖信息的容器對象,它將處理的模型數據和視圖名稱封裝在一起傳遞給 DispatcherServlet。
  • ViewResolver(視圖解析器):ViewResolver 負責將邏輯視圖解析為具體的視圖對象,并返回給 DispatcherServlet。
  • View(視圖):它負責將模型數據渲染為最終結果,View 通常是一個 JSP 頁面、FreeMarker 模板、Thymeleaf 模板或其他類型的模板文件,View 負責將模型數據填充到模板中,并生成最終的 HTML、XML、JSON 等格式的響應。

Spring MVC 的工作流程?

  • 客戶端發送請求到前端控制器 DispatcherServlet。
  • 前端控制器 DispatcherServlet 收到請求后,尋找處理器映射器 HandlerMapping 處理。
  • 處理器映射器 HandlerMapping 根據請求 url 找到具體的處理器 Handler,生成處理器映射器對象及處理器攔截器一并返回給前端控制器 DispatcherServlet。
  • 前端控制器 DispatcherServlet 調用處理器適配器 HandlerAdapter,處理器適配器 HandlerAdapter 經過適配調用具體的處理器 Handler(Controller)。
  • Controller 調用 Service 完成業務邏輯處理,返回 ModelAndView。
  • DispatcherServlet 將 ModelAndView 傳遞給 ViewReslover。
  • ViewReslover 解析出具體的 View。
  • DispatcherServlet 根據具體的 View 渲染視圖并返回給客戶端。

Spring MVC 工作流程簡圖

在這里插入圖片描述
簡單的畫了一個 Spring MVC 的工作流程,希望可以加深記憶。

歡迎提出建議及對錯誤的地方指出糾正。

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

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

相關文章

基于Java、SpringBoot和uniapp在線考試系統安卓APP和微信小程序

摘要 基于Java、SpringBoot和uniapp的在線考試系統安卓APP微信小程序是一種結合了現代Web開發技術和移動應用技術的解決方案,旨在為教育機構提供一個方便、高效和靈活的在線考試平臺。該系統采用Java語言進行后端開發,使用SpringBoot框架簡化企業級應用…

SpringCloud微服務之Nacos、Feign、GateWay詳解

SpringCloud微服務之Nacos、Feign、GateWay詳解 1、Nacos配置管理1.1、統一配置管理1.1.1、在nacos中添加配置文件1.1.2、從微服務拉取配置 1.2、配置熱更新1.2.1、方式一1.2.2、方式二 1.3、配置共享1.3.1、配置共享的優先級 1.4、搭建nacos集群1.4.1、初始化數據庫1.4.2、下載…

plt多子圖設置

import matplotlib.pyplot as plt# 使用 subplots 函數創建一個 2x3 的子圖網格 fig, axs plt.subplots(nrows2, ncols3, figsize(16, 10)) # 調整 figsize 來改變圖像大小# 遍歷每個子圖,并繪制一些內容(這里只是簡單的示例) for ax in ax…

React與Vue的區別?

一、區別: 1. 語法 Vue采用自己特有的模板語法; React是單向的,采用jsx語法創建react元素。 2.監聽數據變化的實現原理不同 Vue2.0 通過Object.defineproperty()方法的getter/setter屬性, 實現數據劫持, 每次修改完數據會觸發diff算法(雙端對比) …

VUE 頁面生命周期基本知識點

在 Vue.js 中,頁面生命周期(更準確地說是組件生命周期)指的是組件從創建到銷毀的一系列過程。了解這些生命周期鉤子可以幫助我們更好地管理組件的狀態和行為。以下是 Vue 組件的主要生命周期鉤子: beforeCreate 在實例初始化之后&…

vue使用element plus組件上傳服務器

在Vue項目中使用Element Plus組件上傳文件到服務器,你可以使用ElUpload組件。以下是一個簡單的示例,展示了如何使用ElUpload組件來上傳文件,并將其保存到服務器。 首先,確保你已經安裝了Element Plus。 npm install element-plu…

從入門到精通:詳解Linux進程管理

前言 在這篇文章中,我將帶領大家深入學習和理解Linux系統中的進程管理。無論你是初學者還是有一定經驗的開發者,相信這篇文章都會對你有所幫助。我們將詳細講解馮諾依曼體系結構、操作系統概念、進程管理、進程調度、進程狀態、環境變量、內存管理以及其…

C語言之函數和函數庫以及自己制作靜態動態鏈接庫并使用

一:函數的本質 1:C語言為什么會有函數 (1)整個程序分為多個源文件,一個文件分為多個函數,一個函數分成多個語句,這就是整個程序的組織形式。這樣的組織好處在于:分化問題、、便于程序…

分布式版本控制工具 git

git 是什么 分布式版本控制工具。github 是代碼托管平臺。 git 有什么用 保存文件的所有修改記錄。使用版本號(sha1 哈希值) 進行區分。隨時可瀏覽歷史版本記錄。可還原到歷史指定版本。對比不同版本的文件差異。 為什么要使用 git 多人協作開發一個大…

SQL 優化

SQL 優化是指通過各種手段提高 SQL 查詢的執行效率,減少資源消耗,提高數據庫的整體性能。以下是一些詳細的 SQL 優化方法,包括索引優化、查詢優化、數據庫設計優化等。 1. 索引優化 創建適當的索引: 單列索引:在查詢中頻繁使用的單個列上創建索引。多列索引(復合索引):…

STM32手寫超頻到128M函數

今天學習了野火的STM32教程學會了如何設置STM32的時鐘頻率,步驟比較詳細,也很容易理解,就是視頻教程不能跳著看,只能一節節的看,不然會知識不連貫,造成有些知識不理解,連續著看還是沒有什么難度…

docker-file 網絡

docker掛載 1.綁定掛載(Bind Mounts):綁定掛載是將主機上的文件或目錄掛載到容器中。 docker run -v /host/path:/container/path image_name 2.卷掛載(Volume Mounts):卷掛載將 Docker 數據卷掛載到容器中…

【CTF Web】CTFShow web4 Writeup(SQL注入+PHP+字符型注入)

web4 1 管理員阿呆又失敗了&#xff0c;這次一定要堵住漏洞 解法 注意到&#xff1a; <!-- flag in id 1000 -->攔截很多種字符&#xff0c;連 select 也不給用了。 if(preg_match("/or|\-|\\\|\/|\\*|\<|\>|\!|x|hex|\(|\)|\|select/i",$id)){die(&q…

yolov8推理由avi改為mp4

修改\ultralytics-main\ultralytics\engine\predictor.py&#xff0c;即可 # Ultralytics YOLO &#x1f680;, AGPL-3.0 license """ Run prediction on images, videos, directories, globs, YouTube, webcam, streams, etc.Usage - sources:$ yolo modepred…

Android開發-Android開發中的TCP與UDP通信策略的實現

Android 開發中的 TCP 與 UDP 通信策略的實現 1. 前言2. 準備工作3. Kotlin 中 TCP 通信實現客戶端代碼示例&#xff1a;服務器代碼示例&#xff1a; 4. Kotlin 中 UDP 通信實現客戶端代碼示例&#xff1a;服務器代碼示例&#xff1a; 5. TCP 與 UDP 應用場景分析TCP 實現可靠傳…

搭建訪問阿里云百煉大模型環境

最近這波大降價&#xff0c;還有限時免費&#xff0c;還不趕快試試在線大模型&#xff1f;下面整理訪問百煉平臺的千問模型方法。 創建RAM子賬號并授權 創建RAM子賬號 1. “訪問控制RAM”入口&#xff08;控制臺URL&#xff09; 然后點擊進入“RAM管理控制臺” 2. 添加用戶 …

vue 區分多環境打包

需求&#xff1a;區分不同的環境&#xff08;測試、正式環境&#xff09;&#xff0c;接口文檔地址不同&#xff1b; 配置步驟&#xff1a; 1、在根目錄下面新建 .env.xxx 文件&#xff08;xxx 根據環境不同配置&#xff09; 文件中一定要配置的參數項為&#xff1a;NODE_ENV…

【Python搞定車載自動化測試】——Python實現CAN總線Bootloader刷寫(含Python源碼)

系列文章目錄 【Python搞定車載自動化測試】系列文章目錄匯總 文章目錄 系列文章目錄&#x1f4af;&#x1f4af;&#x1f4af; 前言&#x1f4af;&#x1f4af;&#x1f4af;一、環境搭建1.軟件環境2.硬件環境 二、目錄結構三、源碼展示1.診斷基礎函數方法2.診斷業務函數方法…

python 火焰檢測

在日常生活,總是離不開火,有時候我們需要預防火災發生,但是我們又不可能一直盯著,這時候我們就需要一款程序幫我們盯著,一旦發生火災從而告知我們,今天就帶大家編寫這么一款應用。 安裝需要的庫 pip install opencv-python 代碼實現 import cv2 # Library for…

qmt量化教程4----訂閱全推數據

文章鏈接 qmt量化教程4----訂閱全推數據 (qq.com) 上次寫了訂閱單股數據的教程 量化教程3---miniqmt當作第三方庫設置&#xff0c;提供源代碼 全推就主動推送&#xff0c;當行情有變化就會觸發回調函數&#xff0c;推送實時數據&#xff0c;可以理解為數據驅動類型&#xff0…