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

Spring MVC請(qǐng)求參數(shù)的獲取教程指南

 更新時(shí)間:2024年10月24日 08:51:06   作者:2的n次方_  
本文介紹了SpringMVC中如何獲取各種類型的請(qǐng)求參數(shù),包括基本類型、POJO、數(shù)組、集合以及RESTful風(fēng)格的參數(shù),還討論了請(qǐng)求參數(shù)中文亂碼的解決方案,參數(shù)綁定的注解如@RequestParam,以及自定義類型轉(zhuǎn)換器的實(shí)現(xiàn),需要的朋友可以參考下

1. 獲取 URL 中的參數(shù)

獲取 URL 中的參數(shù)是通過(guò) @PathVariable 注解實(shí)現(xiàn)的

@RequestMapping("/article/{articleId}")
public String method12(@PathVariable("articleId") String articleId){
    return "接收到參數(shù)articleId: " + articleId;
}

@RequestMapping("/article/{articleId}")大括號(hào)中的內(nèi)容就相當(dāng)于占位符,可以傳入任何參數(shù),但是不能不傳

多個(gè)參數(shù)也是可以接受的:

@RequestMapping("/article/{articleId}/{name}")
public String method12(@PathVariable String articleId,@PathVariable String name){
    return "接收到參數(shù)articleId: " + articleId + ", name :" + name;
}

前面也提到過(guò),路徑中的參數(shù)相當(dāng)于占位符,不能少傳,順序也必須一致

把 required 改為 false 也不行

2. 上傳文件

通過(guò) MultipartFile可以獲取文件的對(duì)象

@RequestMapping("/m12")
public String method13(MultipartFile file){
System.out.println(file.getOriginalFilename());
return "接收到參數(shù)file: " + file.getOriginalFilename();
}

3. cookie 和 session 的介紹

cookie 就相當(dāng)于這個(gè)令牌,當(dāng)用戶首次訪問(wèn)一個(gè)網(wǎng)站時(shí),服務(wù)器可以在響應(yīng)中設(shè)置 Cookie,并將其發(fā)送給客戶端瀏覽器。瀏覽器會(huì)將 Cookie 存儲(chǔ)起來(lái)。在后續(xù)的請(qǐng)求中,瀏覽器會(huì)自動(dòng)在請(qǐng)求頭中攜帶該網(wǎng)站的 Cookie 信息發(fā)送給服務(wù)器。服務(wù)器通過(guò)讀取 Cookie 中的數(shù)據(jù)來(lái)識(shí)別用戶和獲取相關(guān)狀態(tài)信息。

Session 是在服務(wù)器端用于跟蹤用戶會(huì)話狀態(tài)的一種機(jī)制,當(dāng)用戶首次與服務(wù)器建立連接時(shí),服務(wù)器會(huì)創(chuàng)建一個(gè)唯一的 Session ID,并將這個(gè) ID 返回給客戶端??蛻舳送ǔ?huì)將 Session ID 存儲(chǔ)在 Cookie 中(也可以通過(guò) URL 重寫(xiě)等方式傳遞)。在后續(xù)的請(qǐng)求中,客戶端會(huì)攜帶 Session ID,服務(wù)器通過(guò)這個(gè) ID 來(lái)識(shí)別特定的用戶會(huì)話,并從服務(wù)器端的存儲(chǔ)中獲取相應(yīng)的 Session 數(shù)據(jù)。

上面的學(xué)生信息中,每一個(gè) session ID 都對(duì)應(yīng)一個(gè) session 對(duì)象

例如,用戶在進(jìn)行網(wǎng)上購(gòu)物時(shí),將商品添加到購(gòu)物車。服務(wù)器會(huì)在 Session 中記錄購(gòu)物車的內(nèi)容。當(dāng)用戶在不同頁(yè)面瀏覽或進(jìn)行結(jié)算時(shí),服務(wù)器通過(guò) Session ID 找到對(duì)應(yīng)的購(gòu)物車數(shù)據(jù),確保用戶的購(gòu)物操作在整個(gè)會(huì)話過(guò)程中保持一致。

也就是說(shuō),第一次沒(méi)有 session 時(shí)會(huì)先創(chuàng)建,然后把 session ID 通過(guò) Set-cookie 來(lái)給客戶端

session 是保存在內(nèi)存中的,如果重啟服務(wù)器 session 數(shù)據(jù)就會(huì)消失丟失

cookie 和 session 的區(qū)別:

  1. cookie 是客戶端保存用戶信息的一種機(jī)制,session 是服務(wù)器端保存用戶信息的一種機(jī)制
  2. cookie 和 session 之間主要是通過(guò) session ID 關(guān)聯(lián)起來(lái)的,session ID 是 cookie 和 session 之間的橋梁
  3. cookie 和session 經(jīng)常會(huì)配合使用,但是不是必須配合,可以用 cookie 來(lái)保存一些數(shù)據(jù)在客戶端,不一定是用戶身份信息或 session ID,session 中的 session ID 也不一定必須用 cookie 來(lái)保存,還可以通過(guò)其他來(lái)傳遞,例如通過(guò) URL 來(lái)傳遞

3.1 獲取 cookie

先來(lái)使用創(chuàng)建 HttpServletRequest 對(duì)象來(lái)調(diào)用 getCookies() 的方法來(lái)獲取 cookie,因?yàn)?cookie 還可能為 null,所以也需要進(jìn)行判斷

//獲取cookie
@RequestMapping("getCookie")
public String getCookie(HttpServletRequest request){
Cookie[] cookies = request.getCookies();
if(cookies != null){
    for (Cookie cookie : cookies) {
        System.out.println(cookie.getName() + ":" + cookie.getValue());
    }
}else{
    System.out.println("cookie為空");
}
return "獲取cookie成功";
}

在 postman 中添加兩個(gè) cookie 值,然后獲取 cookie

調(diào)用 getCookies() 方法來(lái)獲取 cookie 的方式是獲取所有的 cookie,如果需要獲取指定的 cookie 的話還需要遍歷,加入判斷

通過(guò) @CookieValue 注解使用可以直接獲取指定名稱的 cookie

@RequestMapping("getCookie2")
public String getCookie2(@CookieValue("name") String name){
    return "從cookie中獲取信息,name:" + name;
}

參數(shù)名稱和 cookie 名是對(duì)應(yīng)的

3.2 獲取 session

由于 getSession 方法是先從 cookie 中找到 session ID,然后根據(jù) session ID 獲取 session,所以可能出現(xiàn) session 為 null 的情況,設(shè)置為 true 就會(huì)創(chuàng)建一個(gè)空的 session,設(shè)置為 false 就不會(huì)創(chuàng)建,默認(rèn)是 true

在獲取 session 對(duì)象之前先設(shè)置好 session

@RequestMapping("/setSession")
public String setSession(HttpServletRequest request){
//獲取session對(duì)象
HttpSession session = request.getSession();
session.setAttribute("userName","zhangsan");
session.setAttribute("age",18);
return "設(shè)置session成功";
}
@RequestMapping("/getSession")
public String getSession(HttpServletRequest request){
//先從cookie中找到session ID,然后根據(jù)session ID獲取session
HttpSession session = request.getSession(false);
if(session == null){
    return "獲取session為null";
}
String userName = (String) session.getAttribute("userName");
return "從session中獲取userName: " + userName;
}

瀏覽器中先訪問(wèn) getSession 時(shí),由于還沒(méi)有設(shè)置 session,所以此時(shí)還獲取不到 session 信息,不過(guò)由于用的是 getSession() 方法,如果 session 為空時(shí)會(huì)創(chuàng)建一個(gè) session,

設(shè)置之后就可以正常獲取了

如果換個(gè)瀏覽器重新獲取就又獲取不到了

這就是因?yàn)樘幱诓煌臅?huì)話中,會(huì)話的 id 是不同的,這也就是相當(dāng)于不同用戶訪問(wèn)時(shí)處于不同的 session 中會(huì)獲取不同的 session ID

也可以直接傳入 HttpSession 對(duì)象來(lái)獲取:

@RequestMapping("/getSession2")
public String getSession2(HttpSession session){
String userName = (String) session.getAttribute("userName");
if(userName !=null){
    return "從session中獲取userName: " + userName;
}else {
    return "獲取session為null";
}
}

還有一種方式獲取就是通過(guò) @SessionAttribute 注解來(lái)獲取

@RequestMapping("/getSession3")
public String getSession3(@SessionAttribute String userName){
    return "從session中獲取userName: " + userName;
}

通過(guò)這種方式來(lái)獲取指定 session ,這個(gè) session 是必須要設(shè)置好的,如果不存在的話就會(huì)直接報(bào)錯(cuò),要求強(qiáng)制綁定,例如上面的 userName 如果找不到就會(huì)報(bào)錯(cuò)

3. 獲取 header

http 的請(qǐng)求頭是有很多個(gè)鍵值對(duì)的,可以通過(guò)創(chuàng)建 HttpServletRequest 對(duì)象來(lái)調(diào)用 getHeader 方法來(lái)獲取指定的請(qǐng)求頭

@RequestMapping("/getHeader")
public String getHeader(HttpServletRequest request){
String User_Agent = request.getHeader("User-Agent");
return "User_Agent: " + User_Agent;
}

還可以通過(guò) @RequestHeader注解來(lái)獲取

@RequestMapping("/getHeader2")
public String getHeader2(@RequestHeader("User-Agent") String User_Agent){
    return "User_Agent: " + User_Agent;
}

通過(guò) Fiddler 抓包可以看到上傳的二進(jìn)制文件

這里的重命名和上面的是不一樣的,這里使用的是 @RequestPart注解

以上就是Spring MVC請(qǐng)求參數(shù)的獲取教程指南的詳細(xì)內(nèi)容,更多關(guān)于Spring MVC請(qǐng)求參數(shù)獲取的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解Android系統(tǒng)中的root權(quán)限獲得原理

    詳解Android系統(tǒng)中的root權(quán)限獲得原理

    這篇文章主要介紹了詳解Android系統(tǒng)中的Root權(quán)限獲得原理,安卓基于Linux,所以原理也相當(dāng)于Linux中的root用戶,需要的朋友可以參考下
    2015-08-08
  • 解決springboot中配置過(guò)濾器以及可能出現(xiàn)的問(wèn)題

    解決springboot中配置過(guò)濾器以及可能出現(xiàn)的問(wèn)題

    這篇文章主要介紹了解決springboot中配置過(guò)濾器以及可能出現(xiàn)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • Java實(shí)戰(zhàn)項(xiàng)目 健身管理系統(tǒng)

    Java實(shí)戰(zhàn)項(xiàng)目 健身管理系統(tǒng)

    本文是一個(gè)Java語(yǔ)言編寫(xiě)的實(shí)戰(zhàn)項(xiàng)目,是一個(gè)健身管理系統(tǒng),主要用到了ssm+springboot等技術(shù),技術(shù)含量筆記高,感興趣的童鞋跟著小編往下看吧
    2021-09-09
  • SpringBoot中的@Component注解源碼

    SpringBoot中的@Component注解源碼

    在SpringBoot中,@Component注解用于標(biāo)識(shí)一個(gè)類為Bean,并由Spring進(jìn)行管理,它需要配合@ComponentScan注解使用,后者負(fù)責(zé)掃描包含@Component的類,并進(jìn)行自動(dòng)裝配,本文給大家介紹SpringBoot中的@Component注解源碼,感興趣的朋友一起看看吧
    2024-01-01
  • java對(duì)象持久化保存的方法詳解

    java對(duì)象持久化保存的方法詳解

    這篇文章主要介紹了java對(duì)象持久化保存的方法詳解,在java應(yīng)用開(kāi)發(fā)的過(guò)程中,經(jīng)常遇到需要持久保存java對(duì)象的情況,比如:用戶信息、博客評(píng)論內(nèi)容等等,本文針對(duì)java對(duì)象的持久化保存方法進(jìn)行討論,簡(jiǎn)述各個(gè)方法的優(yōu)劣,需要的朋友可以參考下
    2023-07-07
  • Spring Security基本架構(gòu)與初始化操作流程詳解

    Spring Security基本架構(gòu)與初始化操作流程詳解

    這篇文章主要介紹了Spring Security基本架構(gòu)與初始化操作流程,Spring Security是一個(gè)能夠?yàn)榛赟pring的企業(yè)應(yīng)用系統(tǒng)提供聲明式的安全訪問(wèn)控制解決方案的安全框架
    2023-03-03
  • Springboot轉(zhuǎn)發(fā)重定向?qū)崿F(xiàn)方式解析

    Springboot轉(zhuǎn)發(fā)重定向?qū)崿F(xiàn)方式解析

    這篇文章主要介紹了springboot轉(zhuǎn)發(fā)重定向?qū)崿F(xiàn)方式解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Java方法上注解值修改不成功的問(wèn)題

    Java方法上注解值修改不成功的問(wèn)題

    這篇文章主要介紹了Java方法上注解值修改不成功的解決方法,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02
  • Mybatis插入Oracle數(shù)據(jù)庫(kù)日期型數(shù)據(jù)過(guò)程解析

    Mybatis插入Oracle數(shù)據(jù)庫(kù)日期型數(shù)據(jù)過(guò)程解析

    這篇文章主要介紹了Mybatis插入Oracle數(shù)據(jù)庫(kù)日期型數(shù)據(jù)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Java中Spring MVC接收表單數(shù)據(jù)的常用方法

    Java中Spring MVC接收表單數(shù)據(jù)的常用方法

    Spring MVC是Spring框架中的一個(gè)模塊,用于開(kāi)發(fā)基于MVC(Model-View-Controller)架構(gòu)的Web應(yīng)用程序,它提供了一種輕量級(jí)的、靈活的方式來(lái)構(gòu)建Web應(yīng)用,同時(shí)提供了豐富的功能和特性,本文給大家介紹了Spring MVC接收表單數(shù)據(jù)的方法,需要的朋友可以參考下
    2024-05-05

最新評(píng)論

巩义市| 拉孜县| 义马市| 武冈市| 霸州市| 淮南市| 海安县| 巴里| 平武县| 阿巴嘎旗| 安阳市| 五指山市| 蒙山县| 蛟河市| 梅州市| 仁寿县| 申扎县| 叙永县| 潞城市| 伊宁市| 阳信县| 芷江| 石城县| 凤山市| 开封县| 吴忠市| 兴和县| 锡林郭勒盟| 汝南县| 屏山县| 吉安县| 库尔勒市| 云阳县| 思南县| 墨玉县| 循化| 新蔡县| 长沙市| 文昌市| 韶关市| 上杭县|