版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 養(yǎng)老院老人緊急救援人員考核獎懲制度
- 辦公室員工培訓(xùn)效果跟蹤總結(jié)制度
- 2026年記協(xié)系統(tǒng)青年新聞人才培訓(xùn)班輿論引導(dǎo)題含答案
- 酒店房間用品衛(wèi)生保障承諾書3篇范文
- 描繪家鄉(xiāng)風(fēng)景寫景12篇范文
- 技術(shù)成果保障承諾書(4篇)
- 桂花樹的狀物作文(14篇)
- 技術(shù)資料守秘責(zé)任書8篇
- 消費者售后保障承諾書4篇
- 合作協(xié)議中的個人誠信承諾函(9篇)
- 標(biāo)準(zhǔn)商品房買賣合同文本大全
- LY/T 3408-2024林下經(jīng)濟(jì)術(shù)語
- 2025年湖南邵陽市新邵縣經(jīng)濟(jì)開發(fā)區(qū)建設(shè)有限公司招聘筆試參考題庫附帶答案詳解
- ICH《M10:生物分析方法驗證及樣品分析》
- 國家開放大學(xué)電大24210丨學(xué)前兒童科學(xué)教育活動指導(dǎo)(統(tǒng)設(shè)課)期末終考題庫
- 【讀后續(xù)寫】2021年11月稽陽聯(lián)考讀后續(xù)寫講評:Saving the Daisies 名師課件-陳星可
- 教育培訓(xùn)班項目可行性研究報告
- 人參健康食品營銷策劃
- 2024年人參項目營銷策劃方案
- 工會職工大會制度實施細(xì)則范本
- ups拆除施工方案
評論
0/150
提交評論