0 引言
作者正在學習SpringMVC相關內容,學到了一些知識,希望分享給需要短時間想要了解SpringMVC的讀者朋友們,想用通俗的語言講述其中的知識,希望與諸位共勉,共同進步!
本系列會持續更新!!可以放心食用!
1 本篇內容的十個請求處理實驗
主要通過以上10個實驗來充分掌握請求參數的處理!!
2 十個請求處理實驗中的前五個
2.1 實驗一 使用普通變量,請求參數
做這10個實驗之前,需要有一個發送請求參數的前端網頁,這個網頁已經準備好了,文件可以在此連接中下載:
? ??前端請求文件?
然后將它放進當前項目工中的src--resources--static目錄下,當項目啟動時,在網頁中輸入localhost:8080(如果在配置文件中修改過端口的,請使用修改后的端口)即可訪問下面這個頁面:
當我們輸入用戶名/密碼/電話號碼以及是否同意用戶協議后,點擊注冊:
會發現網址上的請求地址為:
因為鍵值對都是寫在請求地址中,所以我們可以確定前端是以Get類請發送給的并且訪問的地址為/handle01,所以我們需要在后端編寫:
@RequestMapping(value = "/handle01")public String handle01(String username, String password, String cellphone, boolean agreement){System.out.println("username:"+username);System.out.println("password:"+password);System.out.println("cellphone:"+cellphone);System.out.println("agreement:"+agreement);return "ok!!!";
當發送過來的時候是普通的參數時,我們可以直接在方法的變量中接下前端送過來的數值,運行成功后,網頁端:
后端:
需要注意的是:方法中的變量名稱需要和前端發來請求所帶的關鍵詞一一對應!!!!,如果我想隨心所欲地給變量取名字,那應該怎么辦呢?使用實驗二的方法!
2.2?實驗二?@RequestParam 明確參數使用
變量名可以隨便取名稱,但代價就是要在變量名前使用@RequestParam注解標注出這個變量對應的關鍵詞是什么,代碼是這樣寫的:
@RequestMapping(value = "/handle02")public String handle02(@RequestParam("username") String un,@RequestParam("password") String pwd,@RequestParam("cellphone") String cp,@RequestParam("agreement") boolean ok){System.out.println("username:"+un);System.out.println("password:"+pwd);System.out.println("cellphone:"+cp);System.out.println("agreement:"+ok);return "ok!!!";
這樣的話當實驗二點擊注冊后:
網頁端:
后端:
2.3?實驗三?使用POJO匹配封裝所有的參數
有沒有發現,如果使用上面來兩種實驗的話,有太多屬性值需要一個一個傳輸,非常麻煩,所以實驗三給出了一種很方便的寫法。
進入實驗三:
然后先發送個注冊請求,點擊F12打開網頁中的請求配置發現是以POST的方式發送的,內容應該被保存在請求體中:
、
所以可以在后端java編寫代碼:
首先先編寫一個Bean對象,并一一封裝了相對應的屬性值:
import lombok.Data;@Data
public class person {private String username;private String password;private String cellphone;private boolean agreement;
}
隨后在Comtroller中編寫:
@RequestMapping(value = "/handle03")public String handle03(Person person){System.out.println(person);return "ok!!!";}
網頁端:
后端:
為什么可以這樣?因為SpringBoot可以自動把請求參數與POJO中的輸性進行一一對應!!
2.4?實驗四?使用@RequstHeader注解獲得請求頭中的內容
進入實驗四:
然后先發送個請求,點擊F12打開網頁中的請求配置中請求標頭:
就希望獲得其中某些鍵值對,我應該如何編寫程序呢?比如我想獲得請求頭中的Host:
@RequestMapping(value = "/handle04")public String handle04(@RequestHeader("Host") String host){System.out.println(host);return "ok!!!";}
網頁端:
后端:
打印出了Host關鍵詞中的數值:
2.5?實驗五?獲取CookieValue的值
如果有不知道Cookie是什么的同學可以看看:
阿里二面:你說說Cookie、Session、Token的區別?傻傻分不清。。。_嗶哩嗶哩_bilibili
我們可以在這里創建一個Cookie的鍵值對作為測試:
當我加上去之后,只要網站上不關閉,每次發送請求都可以在請求頭中看見Cookie的數值:
程序:
@RequestMapping(value = "/handle05")public String handle05(@CookieValue("hehe") String hehe){System.out.println(hehe);return "ok!!!";}
網頁端:
后端:
?3?十個實驗的測試代碼
如果大家也不想敲代碼的話,那就可以直接在我的gitee地址里面下載十個實驗的測試代碼:
lin/請求測試十個實驗https://gitee.com/lin2002wei/Request_code
參考:
P91-P95
095.請求處理 - 實驗5:@CookieValue - 獲取cookie的值_嗶哩嗶哩_bilibili