JavaSpringBoot請求方式與請求映射過程分析_第1頁
JavaSpringBoot請求方式與請求映射過程分析_第2頁
JavaSpringBoot請求方式與請求映射過程分析_第3頁
JavaSpringBoot請求方式與請求映射過程分析_第4頁
JavaSpringBoot請求方式與請求映射過程分析_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第JavaSpringBoot請求方式與請求映射過程分析目錄請求方式非Rest風(fēng)格使用Rest風(fēng)格表單提交過程分析請求映射過程分析

請求方式

SpringBoot支持Rest風(fēng)格:使用HTTP請求方式的動詞來表示對資源的操作

非Rest風(fēng)格

以前這樣寫接口:

/getUser獲取用戶

/deleteUser刪除用戶

/updateUser修改用戶

/saveUser保存用戶

@RequestMapping(value="/getUser",method=RequestMethod.GET)

publicStringgetUser(){

return"GET";

@RequestMapping(value="/deleteUser",method=RequestMethod.POST)

publicStringdeleteUser(){

return"POST";

@RequestMapping(value="/updateUser",method=RequestMethod.POST)

publicStringupdateUser(){

return"POST";

@RequestMapping(value="/saveUser",method=RequestMethod.POST)

publicStringsaveUser(){

return"POST";

}

使用Rest風(fēng)格

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

/userGET-獲取用戶DELETE-刪除用戶PUT-修改用戶POST-保存用戶

@GetMapping("/user")

publicStringgetUser(){

return"GET";

@PostMapping("/user")

publicStringsaveUser(){

return"POST";

@PutMapping("/user")

publicStringputUser(){

return"PUT";

@DeleteMapping("/user")

publicStringdeleteUser(){

return"DELETE";

}

表單提交

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

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

示例如下:

formaction="/user"method="post"

inputname="_method"type="hidden"value="delete"/

inputvalue="REST提交"type="submit"/

/form

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

spring:

mvc:

hiddenmethod:

filter:

enabled:true

過程分析

首先是從自動配置類WebMvcAutoConfiguration開始,其中的hiddenHttpMethodFilter方法入手,請求首先被該方法攔截

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

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

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

@Bean

publicHiddenHttpMethodFilterhiddenHttpMethodFilter(){

HiddenHttpMethodFiltermethodFilter=newHiddenHttpMethodFilter();

methodFilter.setMethodParam("_mymethod");

returnmethodFilter;

請求映射過程分析

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

推測+大概看源碼得出SpringBoot的一個請求會經(jīng)過FrameworkServlet類的doGet()方法

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

doService方法是一個接口,F(xiàn)rameworkServlet并沒有具體實現(xiàn)

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

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

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

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

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

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

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

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論