Spring MVC 介紹
1,MVC 設(shè)計(jì)模式
MVC(Model-View-Controller)是一種常見(jiàn)的軟件設(shè)計(jì)模式,用于將應(yīng)用程序的邏輯分離成三個(gè)獨(dú)立的組件:
- 模型(Model):模型是應(yīng)用程序的數(shù)據(jù)和業(yè)務(wù)邏輯的表示。它負(fù)責(zé)處理數(shù)據(jù)的讀取、存儲(chǔ)和操作,以及業(yè)務(wù)規(guī)則的處理。模型通常是獨(dú)立于用戶(hù)界面的,可以在不同的視圖和控制器之間共享和重用。
- 視圖(View):視圖是用戶(hù)界面的呈現(xiàn)部分,負(fù)責(zé)展示數(shù)據(jù)給用戶(hù),并接收用戶(hù)的輸入。視圖通常是根據(jù)模型的數(shù)據(jù)進(jìn)行渲染和更新的,它可以是Web頁(yè)面、圖形界面或命令行界面等。
- 控制器(Controller):控制器是模型和視圖之間的協(xié)調(diào)者,負(fù)責(zé)接收用戶(hù)的輸入并根據(jù)輸入調(diào)用相應(yīng)的模型邏輯??刂破鲗⒂脩?hù)的請(qǐng)求轉(zhuǎn)發(fā)給模型進(jìn)行處理,并將處理結(jié)果傳遞給視圖進(jìn)行展示。控制器還可以處理視圖的事件和狀態(tài)變化。
MVC設(shè)計(jì)模式的作用如下:
- 分離關(guān)注點(diǎn):MVC將應(yīng)用程序的不同關(guān)注點(diǎn)(數(shù)據(jù)、業(yè)務(wù)邏輯、用戶(hù)界面)分離開(kāi)來(lái),使得各個(gè)組件可以獨(dú)立開(kāi)發(fā)、測(cè)試和維護(hù),提高了代碼的可讀性和可維護(hù)性。
- 提高可重用性:通過(guò)將數(shù)據(jù)和業(yè)務(wù)邏輯抽象成模型,可以在不同的視圖和控制器之間共享和重用,減少了重復(fù)編寫(xiě)代碼的工作量。
- 改善可擴(kuò)展性:MVC模式使得各個(gè)組件之間的耦合度降低,可以更方便地對(duì)應(yīng)用程序進(jìn)行擴(kuò)展和修改,而不會(huì)影響其他組件的功能。
- 改善用戶(hù)體驗(yàn):通過(guò)將用戶(hù)界面和業(yè)務(wù)邏輯分離,MVC模式使得用戶(hù)界面更加靈活和響應(yīng),可以根據(jù)不同的需求進(jìn)行定制和優(yōu)化。
總的來(lái)說(shuō),MVC設(shè)計(jì)模式通過(guò)將應(yīng)用程序的邏輯分離成模型、視圖和控制器,提供了一種結(jié)構(gòu)化的開(kāi)發(fā)方式,使得代碼更加可讀、可維護(hù)和可擴(kuò)展,同時(shí)改善了用戶(hù)體驗(yàn)和開(kāi)發(fā)效率。
2,Spring MVC
2.1,Spring MVC 的介紹
Spring Web MVC是基于Servlet API構(gòu)建的原始Web框架,也是Spring框架的一部分。它提供了靈活可擴(kuò)展的MVC架構(gòu),方便開(kāi)發(fā)者構(gòu)建高性能的Web應(yīng)用程序,并與 Spring 生態(tài)系統(tǒng)無(wú)縫集成。
2.2,Spring MVC與MVC的關(guān)系
Spring MVC與MVC之間的關(guān)系的要點(diǎn)總結(jié):
- Spring MVC是一個(gè)Web框架,而MVC是一種架構(gòu)模式。Spring MVC是基于MVC模式的實(shí)現(xiàn)之一。
- MVC是一種將應(yīng)用程序的不同方面分離的設(shè)計(jì)模式,包括模型(Model)、視圖(View)和控制器(Controller)。
- Spring MVC遵循MVC設(shè)計(jì)模式,將應(yīng)用程序的不同方面分離開(kāi)來(lái),通過(guò)模型、視圖和控制器的協(xié)作來(lái)處理Web請(qǐng)求。
綜上所述,Spring MVC是Spring框架提供的基于MVC架構(gòu)并繼承了Servlet API的Web開(kāi)發(fā)框架。它遵循MVC模式的原則,提供了一套完整的開(kāi)發(fā)流程和特性。通過(guò)Spring框架的支持,它能夠?qū)崿F(xiàn)靈活性、可配置性和可擴(kuò)展性,幫助開(kāi)發(fā)者構(gòu)建高性能的Web應(yīng)用程序。
注意:既然是 Web框架,那么當(dāng)用戶(hù)在瀏覽器中輸入了url之后,我們的Spring MVC 項(xiàng)目就可以感知到用戶(hù)的請(qǐng)求。
2.3,Spring MVC 的重要性
現(xiàn)在的項(xiàng)目大部分Java項(xiàng)目都是基于Spring或者Spring Boot的,而Spring 的核心就是Spring MVC。
簡(jiǎn)單來(lái)說(shuō),Spring MVC是一切項(xiàng)目的基礎(chǔ),我們以后創(chuàng)建的所有Spring、Spring Boot項(xiàng)目基本都是基于Spring MVC的。
在創(chuàng)建Spring Boot項(xiàng)目時(shí),我們勾選的Spring Web框架其實(shí)就是Spring MVC框架。
學(xué)習(xí)Spring MVC,我們只需要掌握以下3個(gè)功能:
1.連接的功能︰將用戶(hù)(瀏覽器)和 Java 程序連接起來(lái),也就是訪(fǎng)問(wèn)一個(gè)地址能夠調(diào)用到我們的Spring程序。
2.獲取參數(shù)的功能︰用戶(hù)訪(fǎng)問(wèn)的時(shí)候會(huì)帶一些參數(shù),在程序中要想辦法獲取到參數(shù)。
3.輸出數(shù)據(jù)的功能︰執(zhí)行了業(yè)務(wù)邏輯之后,要把程序執(zhí)行的結(jié)果返回給用戶(hù)。
3,Spring MVC 創(chuàng)建和使用
3.1,Spring MVC創(chuàng)建
Spring MVC項(xiàng)目的創(chuàng)建方式有2種,分別為:
- 使用Maven項(xiàng)目添加 Spring MVC框架依賴(lài)的方式創(chuàng)建
- 使用Spring Boot的方式創(chuàng)建Spring MVC 項(xiàng)目
由于第一種方式中的過(guò)程較復(fù)雜,而第二種方式較為簡(jiǎn)單,故在2018年以后基本都是使用第二種方式來(lái)進(jìn)行創(chuàng)建Spring MVC項(xiàng)目。
Spring MVC項(xiàng)目創(chuàng)建和Spring Boot 項(xiàng)目創(chuàng)建基本相同,只需要在創(chuàng)建的時(shí)候選擇Spring Web 框架就相當(dāng)于創(chuàng)建了Spring MVC項(xiàng)目。
3.2,Spring MVC連接
在Spring MVC項(xiàng)目中實(shí)現(xiàn)連接操作之前,我們需要先解決一個(gè)問(wèn)題:何為路由映射?
所謂的路由映射指的是,當(dāng)用戶(hù)訪(fǎng)問(wèn)一個(gè)url時(shí),將用戶(hù)的請(qǐng)求對(duì)應(yīng)到程序中某個(gè)類(lèi)的某個(gè)方法的過(guò)程。
Spring MVC項(xiàng)目實(shí)現(xiàn)連接的操作就與路由映射密切相關(guān),實(shí)現(xiàn)路由映射可以使用注解。
用來(lái)實(shí)現(xiàn)注冊(cè)接口的路由映射的常見(jiàn)注解有@RequestMapping
,@PostMapping
,@GetMapping
。
1,@RequestMapping注解
@RequestMapping注解的基本使用:
@RequestMapping注解的基本用法說(shuō)明:
- @RequestMapping注解可以修飾類(lèi),也可以修飾方法,當(dāng)修飾類(lèi)和方法時(shí),訪(fǎng)問(wèn)的地址是類(lèi)+方法。
- @RequestMapping注解可以處理任何HTTP方法的請(qǐng)求,包括GET、POST、PUT、DELETE等。
- @RequestMapping注解可以使用
method
屬性來(lái)進(jìn)行限定處理請(qǐng)求的HTTP方法。
2,@PostMapping注解
@PostMapping注解的基本使用:
@PostMapping注解的基本用法說(shuō)明:
- @PostMapping注解通常用于修飾控制器類(lèi)中的方法,而不是類(lèi)本身。
- @PostMapping注解只可以處理HTTP POST請(qǐng)求映射到處理方法上。
3,@GetMapping注解
@GetMapping注解的基本使用:
@GetMapping注解的基本用法說(shuō)明:
- @GetMapping注解通常用于修飾控制器類(lèi)中的方法,而不是類(lèi)本身。
- @GetMapping注解只可以處理HTTP GET請(qǐng)求映射到處理方法上。
4,三類(lèi)注解區(qū)別總結(jié)
三類(lèi)注解區(qū)別總結(jié)歸納:
- @RequestMapping是通用的注解,可以修飾類(lèi)和方法,可用于映射任何類(lèi)型的HTTP請(qǐng)求。
- @PostMapping是專(zhuān)用的注解,可修飾方法,但不能修飾類(lèi),僅用于映射HTTP POST請(qǐng)求。
- @GetMapping是專(zhuān)用的注解,可以修飾方法,但不能修飾類(lèi),僅用于映射HTTP GET請(qǐng)求。
5,GET請(qǐng)求的映射方式
1)使用@GetMapping
注解
2)使用RequestMapping
注解
3)使用RequestMapping
注解并搭配method
屬性
3.3,Spring MVC參數(shù)獲取
1,獲取單個(gè)參數(shù)
獲取單個(gè)參數(shù)的操作代碼:
對(duì)操作代碼進(jìn)行運(yùn)行檢測(cè):
獲取單個(gè)參數(shù)注意說(shuō)明:
1)代碼中聲明的參數(shù)名與請(qǐng)求地址欄中的參數(shù)名要完全一致,若不一致則無(wú)法獲取到地址欄中對(duì)應(yīng)的參數(shù)值,會(huì)為參數(shù)的默認(rèn)值。
2)如果想明確指定請(qǐng)求中的參數(shù)要綁定到處理方法的參數(shù),可以在處理方法的參數(shù)前使用@RequestParam注解進(jìn)行參數(shù)重命名操作。
對(duì)操作代碼進(jìn)行運(yùn)行檢測(cè):
2,獲取多個(gè)參數(shù)
獲取多個(gè)參數(shù)的操作代碼:
對(duì)操作代碼進(jìn)行運(yùn)行檢測(cè):
獲取多個(gè)參數(shù)注意說(shuō)明:
1)進(jìn)行參數(shù)匹配時(shí),后端代碼的參數(shù)名稱(chēng)要與地址欄中的參數(shù)名稱(chēng)要保證完全一致。
2)前后端進(jìn)行參數(shù)匹配時(shí),是以參數(shù)的名稱(chēng)進(jìn)行匹配的,因此地址欄中的參數(shù)位置是不影響后端獲取參數(shù)的結(jié)果。
3,獲取普通對(duì)象
實(shí)體類(lèi)UserEntity
創(chuàng)建:
獲取普通對(duì)象的操作代碼:
對(duì)操作代碼進(jìn)行運(yùn)行檢測(cè):
獲取普通對(duì)象注意說(shuō)明:
1)Spring MVC 會(huì)根據(jù)地址欄中輸入的參數(shù)列表自動(dòng)實(shí)現(xiàn)參數(shù)對(duì)象的賦值操作。
4,獲取Json對(duì)象
獲取Json對(duì)象的操作代碼:
對(duì)操作代碼進(jìn)行運(yùn)行檢測(cè):
從上述的運(yùn)行檢測(cè)中,發(fā)現(xiàn)無(wú)法接收成功 Json對(duì)象,盡管上述代碼可以接收獲取到普通對(duì)象。那怎樣才能成功接收J(rèn)son對(duì)象呢?
在Spring MVC 中,提供了 @RequestBody
注解來(lái)實(shí)現(xiàn)接收 Json 對(duì)象的操作。獲取 Json對(duì)象的操作代碼如下:
對(duì)操作代碼進(jìn)行運(yùn)行檢測(cè):
5,獲取基礎(chǔ)URL參數(shù)
獲取基礎(chǔ)URL參數(shù)的操作代碼:
對(duì)操作代碼進(jìn)行運(yùn)行檢測(cè):
獲取基礎(chǔ)URL參數(shù)注意說(shuō)明:
1)使用@PathVariable
注解進(jìn)行獲取URL中的基礎(chǔ)參數(shù)操作。
2)基礎(chǔ)URL里面的參數(shù)是 ?之前的參數(shù),而不是 ?之后的參數(shù)(參數(shù)列表內(nèi)的參數(shù))。
3)進(jìn)行參數(shù)匹配時(shí),后端代碼的參數(shù)名稱(chēng)要與地址欄中的參數(shù)名稱(chēng)要保證一致且其對(duì)應(yīng)的參數(shù)值要對(duì)應(yīng)。
6,獲取上傳文件
獲取上傳文件的操作代碼:
對(duì)操作代碼進(jìn)行運(yùn)行檢測(cè):
打開(kāi)指定的路徑進(jìn)行驗(yàn)證文件是否成功上傳,觀察到文件成功上傳并且文件名為指定的img.png
,說(shuō)明文件成功上傳。
上述操作雖然能夠?qū)崿F(xiàn)獲取上傳文件,但也存在明顯的不足缺陷,那就是指定文件路徑中只能有一個(gè)文件。為什么會(huì)出現(xiàn)這種情況呢?
那是因?yàn)槲募呀?jīng)在代碼中確定了,只能為img.png
,當(dāng)上傳成功一個(gè)文件后,后續(xù)成功上傳的文件會(huì)覆蓋之前的文件。
那若想解決這個(gè)覆蓋問(wèn)題,實(shí)現(xiàn)指定文件路徑中有多個(gè)文件,該怎么辦呢?
出現(xiàn)上述這種情況的原因是文件名確定死了,所以我們就只需要從文件名入手即可,也就是讓文件名不確定死。
如果想讓文件名不確定死,我們可以使用UUID.randomUUID
進(jìn)行隨機(jī)生成一組32位數(shù)的16進(jìn)制數(shù)字所構(gòu)成的文件名。
獲取上傳文件的改進(jìn)代碼:
對(duì)操作代碼進(jìn)行運(yùn)行操作后,再打開(kāi)指定文件目錄下,發(fā)現(xiàn)不會(huì)出現(xiàn)上述情況了,能夠?qū)崿F(xiàn)指定文件路徑中有多個(gè)文件。
7,獲取Header
獲取Header的操作代碼:
在地址欄中輸入相關(guān)URL后,使用抓包工具進(jìn)行抓包操作,抓取該請(qǐng)求的相關(guān)請(qǐng)求和響應(yīng)信息。
獲取Header的注意事項(xiàng):
1)使用@RequestHeader
注解進(jìn)行獲取Header中的參數(shù)操作,該注解里的參數(shù)的參數(shù)名要與Header里面的參數(shù)名要一致。
8,獲取Cookie
獲取Cookie的操作代碼:
手動(dòng)構(gòu)造Cookie操作流程:
獲取Cookie的操作代碼運(yùn)行結(jié)果:
獲取Cookie的注意事項(xiàng):
1)使用@CookieValue
注解進(jìn)行獲取Cookie的操作,該注解里的參數(shù)的參數(shù)名要與Cookie列表里面的Cookie名要一致。
9,獲取Session
獲取Session的操作代碼:
存儲(chǔ)Session的操作代碼運(yùn)行檢測(cè):
獲取Session的操作代碼運(yùn)行檢測(cè):
獲取Session的注意事項(xiàng):
1)使用@SessionAttribute
注解進(jìn)行獲取Session的操作,該注解里的參數(shù)的參數(shù)名要與Session列表里面的Session名要一致。
2)存儲(chǔ)Session操作沒(méi)有與之對(duì)應(yīng)的注解,只有獲取Session操作才有對(duì)應(yīng)的注解@SessionAttribute
進(jìn)行簡(jiǎn)便獲取。
3)Cookie能通過(guò)手動(dòng)添加,但Session不能手動(dòng)添加,只能通過(guò)代碼進(jìn)行Session創(chuàng)建后添加,故可知Session比Cookie更安全。
3.4,Spring MVC數(shù)據(jù)輸出
1,返回靜態(tài)頁(yè)面
靜態(tài)頁(yè)面代碼:
返回靜態(tài)頁(yè)面操作代碼:
注意說(shuō)明:如果index.html不加/
,表示在當(dāng)前目錄下查找該文件,如果加了/
,表示在根目錄下查找該文件。
操作代碼運(yùn)行后,具進(jìn)行查看輸出數(shù)據(jù)是否為靜態(tài)網(wǎng)頁(yè)。
2,返回文本數(shù)據(jù)
返回文本數(shù)據(jù)操作代碼:
操作代碼運(yùn)行后,通過(guò)抓包工具進(jìn)行查看輸出數(shù)據(jù)的格式是否為文本數(shù)據(jù)格式。
3,返回Json對(duì)象
返回Json對(duì)象操作代碼:
操作代碼運(yùn)行后,通過(guò)抓包工具進(jìn)行查看輸出數(shù)據(jù)的格式是否為Json對(duì)象格式。
結(jié)語(yǔ)
這就是本期博客的全部?jī)?nèi)容啦!如果有什么其他的問(wèn)題無(wú)法自己解決,可以在評(píng)論區(qū)留言哦!
最后,如果你覺(jué)得這篇文章寫(xiě)的還不錯(cuò)的話(huà)或者有所收獲的話(huà),麻煩小伙伴們動(dòng)動(dòng)你們的小手,給個(gè)三連唄(點(diǎn)贊??,評(píng)論?,收藏??),多多支持一下!各位的支持是我最大的動(dòng)力,后期不斷更新優(yōu)質(zhì)的內(nèi)容來(lái)幫助大家,一起進(jìn)步。那我們下期見(jiàn)!文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-623232.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-623232.html
到了這里,關(guān)于【框架篇】Spring MVC 介紹及使用(詳細(xì)教程)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!