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

詳解springmvc如何處理接受http請求

 更新時間:2024年02月10日 09:26:27   作者:喜歡小錢錢  
這篇文章主要給大家介紹了springmvc如何處理接受http請求,文中通過代碼示例給大家講解的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下

1. 背景

今天開了一篇文章“SpringMVC是如何將不同的Request路由到不同Controller中的?”;看完之后突然想到,在請求走到mvc 之前服務(wù)是怎么知道有請求進來了,并且知道交給誰處理呢?想看看這一塊的代碼

2. web項目和非web項目

當我們需要新增一個后端接口的時候,我們會通過@RestController和@RequestMapping注解來新增一個接口。然后我們發(fā)現(xiàn)我們這兩個注解實際上是在spring-web包下的。

  • 如果我們的后端服務(wù)需要提供http請求的能力,那么我們就需要引入一個spring-web的包。稱做web項目。
  • 如果我們的后端服務(wù)只提供thrift(一種rpc框架),那么我們也就不需要引入spring-web的包,稱做非web項目。 這次主要是想看看是怎么處理的http請求。

3. 環(huán)境準備

  • 新建或者打開一個之前創(chuàng)建的springboot項目,我用的是之前寫各種demo的項目
  • 在項目中新建一個Controller或者使用之前的Controller,我用的是之前就建好的TestController,自己得知道咋請求這個接口就行
@RestController
public class TestController implements BaseController {
    @RequestMapping("/test")
    public String test() {
        return "SUCCESS";
    }
}
  • 在AbstractHandlerMethodMapping#lookupHandlerMethod第一行添加斷點(這個看文章知道的會在這里處理請求轉(zhuǎn)發(fā)到不同的controller),如圖

  • 以debug啟動項目

  • 請求接口,然后進入到debug模式

4. 分析鏈路

  • 首先可以看到在線程池拿到了一個task并執(zhí)行

  • 繼續(xù)往下,我們可以看到這個task是一個SocketProcessorBase對象,添加斷點,重啟服務(wù),再次請求接口

  • 然后發(fā)現(xiàn)是在NioEndpoint$Poller創(chuàng)建的socket繼續(xù)debug,

  • 這個時候我們發(fā)現(xiàn),是在容器加載完成之后會去啟動服務(wù),同時啟動tomcat

當tomcat接受到請求的時候:

  • Poller從Acceptor線程接收新的連接請求。
  • Poller將接收到的連接請求注冊到其內(nèi)部的NIO Selector上。
  • Poller不斷輪詢其注冊的Selector,以查看是否有任何NIO事件就緒。
  • 一旦Poller檢測到某個通道上有事件就緒,它就會創(chuàng)建一個SocketProcessor任務(wù)對象,并將該任務(wù)提交給Executor線程池進行處理。
  • 然后經(jīng)過tomcat 的一頓invoke

  • 開始處理請求

  •  一直走到FrameworkServlet這個springmvc處理請求的核心類 9. 然后走到DispatcherServlet 的doDispatch類
protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {
    。。。省略
    try {

            //現(xiàn)在在這里,去拿mappedHandler
            mappedHandler = getHandler(processedRequest);
            if (mappedHandler == null) {
                noHandlerFound(processedRequest, response);
                return;
            }
    。。。省略
}

5. 總結(jié)

后面就走到了我們比較熟悉的springmvc處理請求的地方了,這塊網(wǎng)上很多寫的文章,大家感興趣可以自己去百度看看。

以上就是詳解springmvc如何處理接受http請求的詳細內(nèi)容,更多關(guān)于springmvc處理http請求的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • java協(xié)程框架quasar和kotlin中的協(xié)程對比分析

    java協(xié)程框架quasar和kotlin中的協(xié)程對比分析

    這篇文章主要為大家介紹了java協(xié)程框架quasar和kotlin兩個協(xié)程對比分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多基本
    2022-02-02
  • MyBatis與Spring中的SqlSession詳解

    MyBatis與Spring中的SqlSession詳解

    在MyBatis中,你可以使用SqlSessionFactory來創(chuàng)建SqlSession,使用MyBatis-Spring之后,你不再需要直接使用SqlSessionFactory了,接下來通過示例代碼講解MyBatis與Spring中的SqlSession,需要的朋友可以參考下
    2024-05-05
  • JDK版本管理工具jEnv解決不同jdk版本項目

    JDK版本管理工具jEnv解決不同jdk版本項目

    本文主要介紹了JDK版本管理工具jEnv解決不同jdk版本項目,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • Spring Boot 開發(fā)環(huán)境熱部署詳細教程

    Spring Boot 開發(fā)環(huán)境熱部署詳細教程

    這篇文章主要介紹了Spring Boot 開發(fā)環(huán)境熱部署,本文給大家介紹了Spring Boot 開發(fā)環(huán)境熱部署的原理及快速配置方法,通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • Redis中4種延時隊列實現(xiàn)方式小結(jié)

    Redis中4種延時隊列實現(xiàn)方式小結(jié)

    Redis作為高性能的內(nèi)存數(shù)據(jù)庫,具備原子操作、數(shù)據(jù)結(jié)構(gòu)豐富和簡單易用的特性,本文將介紹基于Redis實現(xiàn)分布式延時隊列的四種方式,大家可以根據(jù)需要進行選擇
    2025-04-04
  • SpringBoot-JWT生成Token和攔截器的使用(訪問受限資源)

    SpringBoot-JWT生成Token和攔截器的使用(訪問受限資源)

    本文主要介紹了SpringBoot-JWT生成Token和攔截器的使用(訪問受限資源),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • SpringBoot集成?JWT實現(xiàn)用戶登錄認證的項目實踐

    SpringBoot集成?JWT實現(xiàn)用戶登錄認證的項目實踐

    當今前后端分離時代,基于Token的會話保持機制比傳統(tǒng)的Session/Cookie機制更加方便,本文主要介紹了SpringBoot集成?JWT實現(xiàn)用戶登錄認證的項目實踐,感興趣的可以了解一下
    2023-08-08
  • 定時任務(wù)注解@Scheduled不生效問題及解決

    定時任務(wù)注解@Scheduled不生效問題及解決

    這篇文章主要介紹了定時任務(wù)注解@Scheduled不生效問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • SpringBoot集成kaptcha驗證碼

    SpringBoot集成kaptcha驗證碼

    這篇文章主要為大家詳細介紹了SpringBoot集成kaptcha驗證碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • 關(guān)于Spring中@Value注解使用和源碼分析

    關(guān)于Spring中@Value注解使用和源碼分析

    通過深入分析@Value注解的使用和源碼,本文詳細解釋了Spring如何解析@Value注解并為屬性賦值,首先,Spring會解析并收集所有被@Value注解修飾的屬性,這一過程依賴于AutowiredAnnotationBeanPostProcessor類
    2024-11-11

最新評論

红原县| 绍兴县| 肥乡县| 东乌珠穆沁旗| 墨玉县| 万载县| 银川市| 金寨县| 西青区| 全南县| 宣化县| 珲春市| 揭西县| 博爱县| 团风县| 临朐县| 长泰县| 镶黄旗| 香格里拉县| 延吉市| 澎湖县| 忻城县| 湘潭市| 齐河县| 库尔勒市| 乌拉特后旗| 晋州市| 浮梁县| 千阳县| 石狮市| 炉霍县| 宁蒗| 怀安县| 额尔古纳市| 远安县| 沈阳市| 安新县| 寿光市| 衡水市| 临猗县| 邮箱|