国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Spring】springmvc如何處理接受http請求

這篇具有很好參考價值的文章主要介紹了【Spring】springmvc如何處理接受http請求。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【Spring】springmvc如何處理接受http請求,spring,http,java,intellij-idea,后端,開發(fā)語言,網(wǎng)絡(luò)協(xié)議

目錄

?編輯

1. 背景

2. web項目和非web項目

3. 環(huán)境準(zhǔn)備

4. 分析鏈路

5. 總結(jié)


1. 背景

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

2. web項目和非web項目

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

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

3. 環(huán)境準(zhǔn)備

  • 新建或者打開一個之前創(chuàng)建的springboot項目,我用的是之前寫各種demo的項目
  • 在項目中新建一個Controller或者使用之前的Controller,我用的是之前就建好的TestController,自己得知道咋請求這個接口就行
@RestController
public class TestController implements BaseController {
    @RequestMapping("/test")
    public String test() {
        return "SUCCESS";
    }
}

?文章來源地址http://www.zghlxwxcb.cn/news/detail-837099.html

  • 在AbstractHandlerMethodMapping#lookupHandlerMethod第一行添加斷點(這個看文章知道的會在這里處理請求轉(zhuǎn)發(fā)到不同的controller),如圖

    【Spring】springmvc如何處理接受http請求,spring,http,java,intellij-idea,后端,開發(fā)語言,網(wǎng)絡(luò)協(xié)議

  • 以debug啟動項目

【Spring】springmvc如何處理接受http請求,spring,http,java,intellij-idea,后端,開發(fā)語言,網(wǎng)絡(luò)協(xié)議

  • 請求接口,然后進(jìn)入到debug模式

4. 分析鏈路

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

【Spring】springmvc如何處理接受http請求,spring,http,java,intellij-idea,后端,開發(fā)語言,網(wǎng)絡(luò)協(xié)議

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

【Spring】springmvc如何處理接受http請求,spring,http,java,intellij-idea,后端,開發(fā)語言,網(wǎng)絡(luò)協(xié)議

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

【Spring】springmvc如何處理接受http請求,spring,http,java,intellij-idea,后端,開發(fā)語言,網(wǎng)絡(luò)協(xié)議

【Spring】springmvc如何處理接受http請求,spring,http,java,intellij-idea,后端,開發(fā)語言,網(wǎng)絡(luò)協(xié)議

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

【Spring】springmvc如何處理接受http請求,spring,http,java,intellij-idea,后端,開發(fā)語言,網(wǎng)絡(luò)協(xié)議

5. 當(dāng)tomcat接受到請求的時候:

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

【Spring】springmvc如何處理接受http請求,spring,http,java,intellij-idea,后端,開發(fā)語言,網(wǎng)絡(luò)協(xié)議

7. 開始處理請求

【Spring】springmvc如何處理接受http請求,spring,http,java,intellij-idea,后端,開發(fā)語言,網(wǎng)絡(luò)協(xié)議

8. 一直走到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)上很多寫的文章,大家感興趣可以自己去百度看看。

?

到了這里,關(guān)于【Spring】springmvc如何處理接受http請求的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Spring基礎(chǔ) - SpringMVC請求流程和案例

    Spring基礎(chǔ) - SpringMVC請求流程和案例

    ?用一種業(yè)務(wù)邏輯、數(shù)據(jù)、界面顯示分離的方法,將業(yè)務(wù)邏輯聚集到一個部件里面,在改進(jìn)和個性化定制界面及用戶交互的同時,不需要重新編寫業(yè)務(wù)邏輯。MVC被獨特的發(fā)展起來用于映射傳統(tǒng)的輸入、處理和輸出功能在一個邏輯的圖形化用戶界面的結(jié)構(gòu)中 Model(模型)是應(yīng)用

    2024年02月20日
    瀏覽(21)
  • Spring Boot使用httpcomponents實現(xiàn)http請求

    Spring Boot使用httpcomponents實現(xiàn)http請求

    基于org.apache.httpcomponents的httpclient實現(xiàn),其它的實現(xiàn)方式都行。 通過ApplicationRunner 實現(xiàn)啟動自動運行。 結(jié)果:成功返回

    2024年02月16日
    瀏覽(27)
  • Spring Boot學(xué)習(xí)筆記(十三)獲取HTTP請求參數(shù)

    SpringBoot獲取參數(shù)代碼 User類: (1)路徑參數(shù) 使用@PathVariable獲取 (2)URL參數(shù) 1、使用@RequestParam獲取 2、使用request的getParameter方法獲取 3、直接在controller里使用同名的方法參數(shù)獲取 4、使用實體類的同名屬性接收參數(shù) (3)表單參數(shù) 獲取方式Url參數(shù)一樣獲取。GET請求只能拿到

    2024年02月04日
    瀏覽(22)
  • Spring Boot進(jìn)階(75):從容應(yīng)對HTTP請求——Spring Boot與OkHttp完美結(jié)合

    Spring Boot進(jìn)階(75):從容應(yīng)對HTTP請求——Spring Boot與OkHttp完美結(jié)合

    ????????在現(xiàn)代的Web應(yīng)用程序中,HTTP請求成為了構(gòu)建客戶端和服務(wù)器端之間通信的一個重要手段。Spring Boot是一個靈活的Web框架,它提供了與HTTP請求相關(guān)的許多特性和API。OkHttp是一個流行的HTTP客戶端庫,它提供了面向?qū)ο蟮腁PI,以便開發(fā)人員輕松地在其應(yīng)用中進(jìn)行HTTP請求

    2024年02月06日
    瀏覽(24)
  • Spring Boot進(jìn)階(72):【教程】用Spring Boot和HttpClient實現(xiàn)高效的HTTP請求

    Spring Boot進(jìn)階(72):【教程】用Spring Boot和HttpClient實現(xiàn)高效的HTTP請求

    ??隨著系統(tǒng)規(guī)模的不斷擴(kuò)大和復(fù)雜度的提升,異步通信這種模式越來越被廣泛應(yīng)用于各種分布式系統(tǒng)中。RocketMQ作為一個高性能、高可靠性、分布式消息隊列,得到了眾多企業(yè)的青睞。本文將介紹如何使用Spring Boot整合RocketMQ,實現(xiàn)異步通信。 ??那么,具體如何實現(xiàn)呢?這

    2024年02月09日
    瀏覽(32)
  • spring boot請求http接口的三種方式

    HttpURLConnection 是 Java 中的 HTTP 客戶端實現(xiàn),,適用于簡單的請求需要。 HttpURLConnection主要工作內(nèi)容:打開socket連接,封裝http請求報文,解析請求報文。 OkHttp 是一個第三方的 HTTP 客戶端庫,它比 Java 標(biāo)準(zhǔn)的 HttpURLConnection 更高效、更實用。主要特點包括: 比 HttpURLConnection 快得多

    2024年02月14日
    瀏覽(28)
  • Spring基礎(chǔ)(Web-MVC)——在idea中新建springWeb項目 & 瀏覽器請求 和 服務(wù)器響應(yīng) & SpringMvc文件相關(guān)

    Spring基礎(chǔ)(Web-MVC)——在idea中新建springWeb項目 & 瀏覽器請求 和 服務(wù)器響應(yīng) & SpringMvc文件相關(guān)

    mvc是啥,springMvc是啥,如何搭建springWeb項目, 在springMvc下的request和response怎么發(fā)請求,怎么進(jìn)行響應(yīng)? springMvc處理文件相關(guān):上傳文件,uuid改名,靜態(tài)資源映射,yaml配置路徑,spring配置文件初步; 表現(xiàn)(視圖)層:WEB層,用來和客戶端進(jìn)行數(shù)據(jù)交互的。 servlet-controller 業(yè)務(wù)層

    2024年02月03日
    瀏覽(60)
  • Java框架學(xué)習(xí)(二)SSM體系:Spring、SpringMVC、MybatisPlus

    Java框架學(xué)習(xí)(二)SSM體系:Spring、SpringMVC、MybatisPlus

    在原始的分層架構(gòu)實現(xiàn)中,負(fù)責(zé)響應(yīng)請求的Controller層依賴于業(yè)務(wù)邏輯處理的Service層,而業(yè)務(wù)邏輯處理的service層又依賴與數(shù)據(jù)訪問Dao層。上下層間相互依賴耦合,耦合的缺陷在于牽一發(fā)而動全身,不利于后期維護(hù)拓展。 為了分層解耦,Spring采用IoC控制反轉(zhuǎn)和DI依賴注入,來解

    2024年02月11日
    瀏覽(61)
  • 【NanoHTTPD】Android,使用NanoHTTPD搭建服務(wù)器,接受Http請求,最佳實踐

    安卓app,作為服務(wù)器,接受Http,get post 請求推送數(shù)據(jù),NanoHTTPD是一個免費、輕量級的(只有一個Java文件) HTTP服務(wù)器,可以很好地嵌入到Java程序中。支持 GET, POST, PUT, HEAD 和 DELETE 請求,支持文件上傳,占用內(nèi)存很小。 開源地址:GitHub - NanoHttpd/nanohttpd: Tiny, easily embeddable HTTP serv

    2024年02月10日
    瀏覽(18)
  • Crow:run的流程3 接受http連接請求do_accept

    Crow:run的流程2 建立io_service及線程-CSDN博客 介紹了run的Crow會啟動一個線程并用于處理do_accept。 那么do_accept本身是做什么的呢? 用于根據(jù)當(dāng)前處理任務(wù)的數(shù)量多少,從io_service池取出一個is,也就相當(dāng)于是從線程池中取出一個線程(因為每個線程阻塞在一個io_service上)。 然后將

    2024年02月03日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包