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

Java?Spring?Boot請(qǐng)求方式與請(qǐng)求映射過程分析

 更新時(shí)間:2022年06月24日 14:59:24   作者:??丨Jack_Chen丨????  
這篇文章主要介紹了Java?Spring?Boot請(qǐng)求方式與請(qǐng)求映射過程分析,Spring?Boot支持Rest風(fēng)格:使用HTTP請(qǐng)求方式的動(dòng)詞來(lái)表示對(duì)資源的操作

請(qǐng)求方式

Spring Boot支持Rest風(fēng)格:使用HTTP請(qǐng)求方式的動(dòng)詞來(lái)表示對(duì)資源的操作

非Rest風(fēng)格

以前這樣寫接口:

/getUser   獲取用戶
/deleteUser 刪除用戶
/updateUser  修改用戶
/saveUser 保存用戶
	@RequestMapping(value = "/getUser", method = RequestMethod.GET)
    public String getUser() {
        return "GET";
    }
    @RequestMapping(value = "/deleteUser", method = RequestMethod.POST)
    public String deleteUser() {
        return "POST";
    }
    @RequestMapping(value = "/updateUser", method = RequestMethod.POST)
    public String updateUser() {
        return "POST";
    }
    @RequestMapping(value = "/saveUser", method = RequestMethod.POST)
    public String saveUser() {
        return "POST";
    }

使用Rest風(fēng)格

使用Rest風(fēng)格,則這樣寫接口:

 /user    GET-獲取用戶    DELETE-刪除用戶     PUT-修改用戶      POST-保存用戶
    @GetMapping("/user")
    public String getUser() {
        return "GET";
    }
    @PostMapping("/user")
    public String saveUser() {
        return "POST";
    }
    @PutMapping("/user")
    public String putUser() {
        return "PUT";
    }
    @DeleteMapping("/user")
    public String deleteUser() {
        return "DELETE";
    }

表單提交

通過表單方式提交請(qǐng)求,請(qǐng)求類型只能支持Get與Post

若表單提交要使用REST風(fēng)格,則表單請(qǐng)求方式使用Post,添加隱藏域 _method=put、 _method=delete方式來(lái)支持Rest風(fēng)格

示例如下:

<form action="/user" method="post">
	<input name="_method" type="hidden" value="delete"/>
    <input value="REST提交" type="submit"/>
</form>

SpringBoot配置文件中開啟頁(yè)面表單的Rest功能

spring:
  mvc:
    hiddenmethod:
      filter:
        enabled: true

過程分析

首先是從自動(dòng)配置類WebMvcAutoConfiguration開始,其中的hiddenHttpMethodFilter方法入手,請(qǐng)求首先被該方法攔截

接著創(chuàng)建OrderedHiddenHttpMethodFilter對(duì)象,其又繼承HiddenHttpMethodFilter

HiddenHttpMethodFilter中的doFilterInternal核心方法進(jìn)行了相關(guān)攔截操作,要求是Post請(qǐng)求并且請(qǐng)求正常,然后獲取請(qǐng)求參數(shù)_method

request.getParameter(this.methodParam)從請(qǐng)求中獲取_method參數(shù)進(jìn)行判斷攔截,故可修改默認(rèn)_method,自定義隱藏參數(shù)。

   @Bean
    public HiddenHttpMethodFilter hiddenHttpMethodFilter() {
        HiddenHttpMethodFilter methodFilter = new HiddenHttpMethodFilter();
        methodFilter.setMethodParam("_mymethod");
        return methodFilter;
    }

請(qǐng)求映射過程分析

首先一個(gè)請(qǐng)求肯定會(huì)經(jīng)過HttpServlet類的doGet()doPost()等方法,當(dāng)然不一定會(huì)執(zhí)行,但其子類肯定會(huì)有對(duì)其的具體實(shí)現(xiàn),其實(shí)現(xiàn)類如下:

推測(cè)+大概看源碼得出Spring Boot的一個(gè)請(qǐng)求會(huì)經(jīng)過FrameworkServlet類的doGet()方法

processRequest方法又調(diào)用了doService方法

doService方法是一個(gè)接口,FrameworkServlet并沒有具體實(shí)現(xiàn)

不過DispatcherServlet對(duì)其經(jīng)行了具體實(shí)現(xiàn),doService方法中又調(diào)用doDispatch核心請(qǐng)求分發(fā)方法

doDispatch方法中又尋找當(dāng)前請(qǐng)求使用哪個(gè)Handler(處理器映射器)

Spring Boot默認(rèn)已配置有如下5種處理器映射器。這里會(huì)挨個(gè)嘗試所有的HandlerMapping看是否有匹配的請(qǐng)求

在Spring Boot啟動(dòng)時(shí),相關(guān)處理器映射器已經(jīng)將請(qǐng)求關(guān)系進(jìn)行了綁定,保存了所有@RequestMapping 和handler的映射規(guī)則

如下:某Controller層的/index請(qǐng)求方法就與RequestMappingHandlerMapping進(jìn)行了關(guān)聯(lián)綁定

接著再執(zhí)行mapping.getHandler(request)

執(zhí)行this.getHandlerInternal(request),來(lái)到AbstractHandlerMethodMapping類重寫的方法

執(zhí)行 super.getHandlerInternal(request);得到當(dāng)前請(qǐng)求Path

執(zhí)行this.lookupHandlerMethod(lookupPath, request);進(jìn)行判斷當(dāng)前請(qǐng)求的是具體那個(gè)方法,即請(qǐng)求對(duì)應(yīng)的handler,找到后并返回。

到此,Spring Boot的請(qǐng)求映射過程解析完畢。

最終,請(qǐng)求映射過程中涉及的類如下:

到此這篇關(guān)于Java Spring Boot請(qǐng)求方式與請(qǐng)求映射過程分析的文章就介紹到這了,更多相關(guān)Spring Boot請(qǐng)求映射內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot集成slf4j日志配置的方法

    SpringBoot集成slf4j日志配置的方法

    本文主要介紹了SpringBoot集成slf4j日志配置的方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Java數(shù)據(jù)結(jié)構(gòu)之二叉搜索樹詳解

    Java數(shù)據(jù)結(jié)構(gòu)之二叉搜索樹詳解

    二叉搜索樹作為一個(gè)經(jīng)典的數(shù)據(jù)結(jié)構(gòu),具有鏈表的快速插入與刪除的特點(diǎn),同時(shí)查詢效率也很優(yōu)秀,所以應(yīng)用十分廣泛。本文將詳細(xì)講講二叉搜索樹的原理與實(shí)現(xiàn),需要的可以參考一下
    2022-06-06
  • SpringBoot項(xiàng)目后端開發(fā)邏輯全面梳理

    SpringBoot項(xiàng)目后端開發(fā)邏輯全面梳理

    這篇文章主要介紹了SpringBoot項(xiàng)目后端開發(fā)邏輯全面梳理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 深入解析Spring中的立即加載和延遲加載

    深入解析Spring中的立即加載和延遲加載

    本文介紹了Spring框架中的立即加載和延遲加載策略,并解釋了它們的適用場(chǎng)景和使用方法,根據(jù)具體的需求和應(yīng)用場(chǎng)景,選擇合適的加載策略,可以提高應(yīng)用程序的性能和資源利用效率,感興趣的朋友跟隨小編一起看看吧
    2023-07-07
  • Java正則表達(dá)式的替換和分組功能

    Java正則表達(dá)式的替換和分組功能

    這篇文章主要給大家介紹了關(guān)于Java正則表達(dá)式的替換和分組功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • SpringBoot項(xiàng)目設(shè)置斷點(diǎn)debug調(diào)試無(wú)效忽略web.xml問題的解決

    SpringBoot項(xiàng)目設(shè)置斷點(diǎn)debug調(diào)試無(wú)效忽略web.xml問題的解決

    這篇文章主要介紹了SpringBoot項(xiàng)目設(shè)置斷點(diǎn)debug調(diào)試無(wú)效忽略web.xml問題的解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • SpringBoot配置使用H2數(shù)據(jù)庫(kù)的簡(jiǎn)單教程

    SpringBoot配置使用H2數(shù)據(jù)庫(kù)的簡(jiǎn)單教程

    H2是一個(gè)Java編寫的關(guān)系型數(shù)據(jù)庫(kù),它可以被嵌入Java應(yīng)用程序中使用,或者作為一個(gè)單獨(dú)的數(shù)據(jù)庫(kù)服務(wù)器運(yùn)行。本文將介紹SpringBoot如何配置使用H2數(shù)據(jù)庫(kù)
    2021-05-05
  • Java實(shí)現(xiàn)局域網(wǎng)聊天室功能(私聊、群聊)

    Java實(shí)現(xiàn)局域網(wǎng)聊天室功能(私聊、群聊)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)局域網(wǎng)聊天室功能,包括私聊、群聊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • SpringBoot整合SpringSecurity認(rèn)證與授權(quán)

    SpringBoot整合SpringSecurity認(rèn)證與授權(quán)

    在項(xiàng)目開發(fā)中,權(quán)限認(rèn)證是很重要的,尤其是一些管理類的系統(tǒng),對(duì)于權(quán)限要求更為嚴(yán)格,本文主要介紹了SpringBoot整合SpringSecurity認(rèn)證與授權(quán),感興趣的可以了解一下
    2023-11-11
  • Java?webservice的POST和GET請(qǐng)求調(diào)用方式

    Java?webservice的POST和GET請(qǐng)求調(diào)用方式

    這篇文章主要介紹了Java?webservice的POST和GET請(qǐng)求調(diào)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03

最新評(píng)論

罗平县| 类乌齐县| 邢台市| 丹巴县| 如皋市| 皮山县| 南华县| 安吉县| 观塘区| 龙州县| 视频| 武定县| 台东市| 民权县| 太和县| 临漳县| 舒兰市| 菏泽市| 廊坊市| 蓝山县| 屏东县| 清涧县| 武邑县| 吉林市| 宁晋县| 行唐县| 沧源| 宁城县| 巴彦县| 和龙市| 凤台县| 亚东县| 平泉县| 凉山| 阜康市| 清徐县| 荃湾区| 昂仁县| 巩义市| 博爱县| 来宾市|