最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring?MVC處理流程與機(jī)制解析

 更新時(shí)間:2026年02月14日 15:22:25   作者:曄子yy  
這篇文章主要介紹了Spring?MVC處理流程與機(jī)制,Spring?MVC是Spring?Framework的一個(gè)核心模塊,是一個(gè)基于MVC設(shè)計(jì)模式的優(yōu)秀Web框架,它本質(zhì)上是Spring框架在Web應(yīng)用領(lǐng)域的延伸,需要的朋友可以參考下

1.SpringMVC介紹

Spring MVC 是 Spring Framework 的一個(gè)核心模塊,是一個(gè)基于 MVC 設(shè)計(jì)模式? 的優(yōu)秀 Web 框架。它本質(zhì)上是 Spring 框架在 Web 應(yīng)用領(lǐng)域的延伸,旨在簡(jiǎn)化基于 MVC 架構(gòu)的 Web 應(yīng)用程序開發(fā)。MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫。

  • 模型(model)代表應(yīng)用程序的核心數(shù)據(jù)和業(yè)務(wù)規(guī)則。它專注于處理什么數(shù)據(jù)和數(shù)據(jù)如何變化。
  • 視圖(view):負(fù)責(zé)與用戶直接交互的界面部分。它專注于如何展示數(shù)據(jù)和接收用戶輸入。
  • 控制器(controller):作為視圖和模型之間的協(xié)調(diào)者。它接收用戶的輸入,決定使用哪個(gè)模型來(lái)處理,以及選擇哪個(gè)視圖來(lái)展示結(jié)果。

我們經(jīng)常在項(xiàng)目中構(gòu)建的基礎(chǔ)三層架構(gòu)(controller,service,mapper)就是在它們的基礎(chǔ)之上所誕生的。

2.SpringMVC關(guān)鍵組件

1.DispatcherServlet(前端控制器)

前端控制器是一種設(shè)計(jì)模式,它提供了一個(gè)統(tǒng)一的入口點(diǎn)來(lái)處理所有的 Web 請(qǐng)求。在傳統(tǒng) Servlet 開發(fā)中,每個(gè) URL 可能需要一個(gè)單獨(dú)的 Servlet,而前端控制器模式用一個(gè) Servlet 處理所有請(qǐng)求,然后分發(fā)到不同的處理器。Spring MVC 中就是 DispatcherServlet? 這個(gè)具體的實(shí)現(xiàn)。

職責(zé):

  • 接收所有 HTTP 請(qǐng)求
  • 協(xié)調(diào)其他組件完成請(qǐng)求處理
  • 返回最終響應(yīng)給客戶端?

DispatcherServlet可以說(shuō)是整個(gè)SpringMVC的核心所在,它承擔(dān)著從用戶請(qǐng)求到用戶接收的一整塊處理鏈條的責(zé)任。

配置演示:

<!-- web.xml 配置 -->
<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern> <!-- 攔截所有請(qǐng)求 -->
</servlet-mapping>

2.HandlerMapping(處理器映射器)

HandlerMapping 是一個(gè)策略接口,定義了如何根據(jù) HTTP 請(qǐng)求找到對(duì)應(yīng)的處理器(Handler)。它在 DispatcherServlet 和具體處理器之間建立橋梁。

職責(zé):

  • 根據(jù)請(qǐng)求的 URL 路徑,找到對(duì)應(yīng)的處理器(Handler)
  • 維護(hù)請(qǐng)求路徑與處理器的映射關(guān)系

常用實(shí)現(xiàn):

  • RequestMappingHandlerMapping:處理 @RequestMapping注解(最常用)
  • BeanNameUrlHandlerMapping:根據(jù) Bean 名稱映射
  • SimpleUrlHandlerMapping:通過(guò)配置文件映射

大概說(shuō)一下它的一個(gè)工作方式,我們假設(shè)有一個(gè)GET /users/list請(qǐng)求,HandlerMapping 查找映射表:"/users/list"就會(huì)轉(zhuǎn)化成UserController.listUsers()給前端控制器。

3.HandlerAdapter(處理器適配器)

HandlerAdapter 是一個(gè)適配器接口,它讓 DispatcherServlet 能夠以統(tǒng)一的方式調(diào)用各種不同類型的處理器(Handler),而不需要關(guān)心處理器的具體實(shí)現(xiàn)。

職責(zé):

  • 適配不同類型的處理器(Controller)
  • 統(tǒng)一調(diào)用處理器方法
  • 處理請(qǐng)求參數(shù)綁定和返回值處理

常用實(shí)現(xiàn):

  • RequestMappingHandlerAdapter:處理 @Controller和 @RequestMapping
  • SimpleControllerHandlerAdapter:處理 Controller接口實(shí)現(xiàn)
  • HttpRequestHandlerAdapter:處理 HttpRequestHandler實(shí)現(xiàn)

HandlerAdapter會(huì)進(jìn)行參數(shù)封裝、數(shù)據(jù)格式轉(zhuǎn)換、數(shù)據(jù)校驗(yàn)等操作

4.Handler處理器(Controller)

Handler處理器是 Spring MVC 的業(yè)務(wù)邏輯執(zhí)行核心,是實(shí)際處理 HTTP 請(qǐng)求并返回響應(yīng)的組件。

職責(zé):

  • 執(zhí)行具體的業(yè)務(wù)邏輯
  • 調(diào)用 Service 層處理業(yè)務(wù)
  • 準(zhǔn)備模型數(shù)據(jù)
  • 返回視圖信息

最常見(jiàn)的就是我們平時(shí)寫的注解形式

@Controller
public class UserController {
    @GetMapping("/users")
    public String listUsers(Model model) {
        model.addAttribute("users", userService.findAll());
        return "userList";
    }
}

5.ViewResolver(視圖解析器)

ViewResolver 是一個(gè)策略接口,用于解析控制器返回的視圖名稱,并返回一個(gè)用于渲染的 View 對(duì)象。它是 MVC 架構(gòu)中視圖層的重要橋梁。

職責(zé):

  • 將 Controller 返回的邏輯視圖名解析為實(shí)際的 View 對(duì)象
  • 支持多種視圖技術(shù)(JSP、Thymeleaf、FreeMarker等)

常用實(shí)現(xiàn):

  • InternalResourceViewResolver:用于 JSP(最常用)
  • ThymeleafViewResolver:用于 Thymeleaf
  • FreeMarkerViewResolver:用于 FreeMarker
  • BeanNameViewResolver:根據(jù) Bean 名稱解析

一個(gè)基礎(chǔ)的視圖解析器配置類如下:

@Configuration
public class WebConfig {
    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
    }
}

簡(jiǎn)單說(shuō)一下流程:

1.Handler處理器返回: "user/list"

2.InternalResourceViewResolver 解析:

    前綴: "/WEB-INF/views/"

    視圖名: "user/list"

    后綴: ".jsp"

實(shí)際路徑: "/WEB-INF/views/user/list.jsp"

3.最后創(chuàng)建 InternalResourceView 對(duì)象返回

6.View(視圖)

View 是一個(gè)渲染接口,負(fù)責(zé)將模型數(shù)據(jù)渲染成最終的響應(yīng)格式(HTML、JSON、XML、PDF、Excel等)。它是用戶界面的最終呈現(xiàn)者。

職責(zé):

  • 將模型數(shù)據(jù)渲染成最終響應(yīng)(通常是 HTML)
  • 支持不同的視圖技術(shù)

3.SpringMVC處理流程

說(shuō)完SpringMVC的一些關(guān)鍵組件,我們來(lái)看看這些組件到底是如何相互配合,完成從請(qǐng)求到接收數(shù)據(jù)的過(guò)程。

1.用戶發(fā)送請(qǐng)求至前端控制器 DispatcherServlet?

2.DispatcherServlet 收到請(qǐng)求調(diào)用處理器映射器 HandlerMapping?

3.處理器映射器根據(jù)請(qǐng)求 URL 找到具體的處理器,生成處理器執(zhí)行鏈 HandlerExecutionChain(包括處理器對(duì)象和處理器攔截器)一并返回給 DispatcherServlet?

4.DispatcherServlet 根據(jù)處理器 Handler 獲取處理器適配器 HandlerAdapter 執(zhí)行 HandlerAdapter 處理一系列的操作,如:參數(shù)封裝、數(shù)據(jù)格式轉(zhuǎn)換、數(shù)據(jù)驗(yàn)證等操作?

5.執(zhí)行處理器 Handler(Controller,也叫頁(yè)面控制器)?

6.Handler 執(zhí)行完成返回 ModelAndView?

7.HandlerAdapter 將 Handler 執(zhí)行結(jié)果 ModelAndView 返回到 DispatcherServlet?

8.DispatcherServlet 將 ModelAndView 傳給 ViewResolver 視圖解析器?

9.ViewResolver 解析后返回具體 View?

10.DispatcherServlet 對(duì) View 進(jìn)行渲染視圖(即將模型數(shù)據(jù) model 填充至視圖中)?

11.DispatcherServlet 響應(yīng)用戶

4.SpringMVC的主要優(yōu)勢(shì)

1.與 Spring 無(wú)縫集成:可以充分利用 Spring 的 IOC(控制反轉(zhuǎn))和 AOP(面向切面編程)特性,方便地進(jìn)行依賴注入和事務(wù)管理。

2.高度可配置:幾乎所有組件都可以通過(guò)配置文件(XML)或注解進(jìn)行定制和擴(kuò)展

3.常用強(qiáng)大注解:

  • @Controller:標(biāo)記一個(gè)類為控制器。
  • @RequestMapping:將 URL 映射到處理方法。
  • @RequestParam, @PathVariable:綁定請(qǐng)求參數(shù)和路徑變量。
  • @RequestBody, @ResponseBody:支持 RESTful 風(fēng)格的 JSON/XML 數(shù)據(jù)綁定。

4.靈活的視圖技術(shù):支持 JSP、Thymeleaf、FreeMarker、Velocity、PDF、Excel 等多種視圖技術(shù)。

5.攔截器:提供 HandlerInterceptor接口,允許在請(qǐng)求處理前后執(zhí)行通用邏輯(如權(quán)限檢查、日志記錄),功能類似于過(guò)濾器但更精細(xì)。

以上就是Spring MVC處理流程與機(jī)制解析的詳細(xì)內(nèi)容,更多關(guān)于Spring MVC處理流程的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java利用讀寫的方式實(shí)現(xiàn)音頻播放代碼實(shí)例

    Java利用讀寫的方式實(shí)現(xiàn)音頻播放代碼實(shí)例

    這篇文章主要介紹了Java利用讀寫的方式實(shí)現(xiàn)音頻播放代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 升級(jí)springboot3.x踩坑記錄

    升級(jí)springboot3.x踩坑記錄

    本文主要介紹了升級(jí)springboot3.x踩坑記錄,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • 淺談幾種Java自定義異常處理方式

    淺談幾種Java自定義異常處理方式

    在Java中,異常是一種常見(jiàn)的處理機(jī)制,本文主要介紹了淺談幾種Java自定義異常處理方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • java中計(jì)算字符串長(zhǎng)度的方法及u4E00與u9FBB的認(rèn)識(shí)

    java中計(jì)算字符串長(zhǎng)度的方法及u4E00與u9FBB的認(rèn)識(shí)

    字符串采用unicode編碼的方式時(shí),計(jì)算字符串長(zhǎng)度的方法找出UNICODE編碼中的漢字的代表的范圍“\u4E00” 到“\u9FBB”之間感興趣的朋友可以參考本文,或許對(duì)你有所幫助
    2013-01-01
  • Java堆轉(zhuǎn)儲(chǔ)文件之1.6G大文件處理完整指南

    Java堆轉(zhuǎn)儲(chǔ)文件之1.6G大文件處理完整指南

    堆轉(zhuǎn)儲(chǔ)文件是優(yōu)化、分析內(nèi)存消耗的重要工具,這篇文章主要介紹了Java堆轉(zhuǎn)儲(chǔ)文件之1.6G大文件處理的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-07-07
  • SpringBoot實(shí)現(xiàn)單文件上傳

    SpringBoot實(shí)現(xiàn)單文件上傳

    這篇文章主要為大家詳細(xì)介紹了SpringBoot實(shí)現(xiàn)單文件上傳,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • 詳解Spring注解--@Autowired、@Resource和@Service

    詳解Spring注解--@Autowired、@Resource和@Service

    本篇文章主要介紹最重要的三個(gè)Spring注解,也就是@Autowired、@Resource和@Service,具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-05-05
  • springboot集成flowable實(shí)踐

    springboot集成flowable實(shí)踐

    本文介紹了Flowable業(yè)務(wù)流程管理引擎在Spring Boot 2.3版本中的集成,Flowable支持BPMN2.0標(biāo)準(zhǔn),提供了流程定義、實(shí)例管理和數(shù)據(jù)訪問(wèn)等功能,文章詳細(xì)介紹了Flowable生成的數(shù)據(jù)庫(kù)表及其用途,并通過(guò)一個(gè)請(qǐng)假審批流程的示例,展示了如何部署和測(cè)試Flowable
    2026-01-01
  • Java實(shí)現(xiàn)的上傳并壓縮圖片功能【可等比例壓縮或原尺寸壓縮】

    Java實(shí)現(xiàn)的上傳并壓縮圖片功能【可等比例壓縮或原尺寸壓縮】

    這篇文章主要介紹了Java實(shí)現(xiàn)的上傳并壓縮圖片功能,可實(shí)現(xiàn)圖片的等比例壓縮或原尺寸壓縮,涉及java文件讀寫、轉(zhuǎn)換、傳輸?shù)认嚓P(guān)操作技巧,需要的朋友可以參考下
    2018-07-07
  • ArrayList和JSONArray邊遍歷邊刪除到底該如何做

    ArrayList和JSONArray邊遍歷邊刪除到底該如何做

    這篇文章主要介紹了ArrayList和JSONArray邊遍歷邊刪除到底該如何做,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12

最新評(píng)論

冕宁县| 灌云县| 阆中市| 闵行区| 韶山市| 慈利县| 兴海县| 吉隆县| 蓝山县| 金寨县| 汪清县| 阳朔县| 鄄城县| 廉江市| 阜宁县| 佛教| 景东| 凤翔县| 澄迈县| 江达县| 南靖县| 页游| 象州县| 临沧市| 衡阳市| 新巴尔虎左旗| 永平县| 定远县| 高台县| 尖扎县| 宁波市| 呈贡县| 界首市| 水富县| 红桥区| 宁远县| 东乌| 新蔡县| 霍城县| 息烽县| 视频|