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

SpringBoot獲取HttpServletRequest的3種方式總結(jié)

 更新時(shí)間:2023年08月10日 09:33:42   作者:太空眼睛  
這篇文章主要給大家介紹了關(guān)于SpringBoot獲取HttpServletRequest的3種方式,在Spring boot項(xiàng)目中經(jīng)常要用到Servlet的常用對(duì)象如HttpServletRequest request,HttpServletResponse response,HttpSession session,需要的朋友可以參考下

方法一: Controller中增加request參數(shù)

@RestController
public class DemoController { 
    @RequestMapping("/demo")
    public void demo(HttpServletRequest request) {        
        System.out.println(request.getParameter("hello"));
    }
}
  • 線程安全
  • 缺點(diǎn): 每個(gè)方法都需要寫(xiě)一遍

方法二: 自動(dòng)注入

@Slf4j
@RequestMapping(path = "/request")
@RestController
public class DemoRequestController {
    @Resource
    private HttpServletRequest request1;
    @RequestMapping(path = "/demo")
    public String demo(HttpServletRequest request2) {
        log.info("request1: {}", request1.getClass());
        log.info("request2: {}", request2.getClass());
        return "Hello, world!";
    }
}
  • 線程安全
  • Spring中,DemoRequestControllerscopesingleton(單例),也就是說(shuō)在整個(gè)web系統(tǒng)中,只有一個(gè)DemoRequestController;但是其中注入的request卻是線程安全的,原因在于:使用這種方式,當(dāng)Bean(本例的DemoRequestController)初始化時(shí),Spring并沒(méi)有注入一個(gè)request對(duì)象,而是注入了一個(gè)代理(proxy);當(dāng)Bean中需要使用request對(duì)象時(shí),通過(guò)該代理獲取request對(duì)象。
  • 代理對(duì)象中用到了 ThreadLocal , 因此request對(duì)象也是線程局部變量;這就保證了request對(duì)象的線程安全性。
  • 不限于Controller中,可以在任何地方進(jìn)行注入
  • 注入的對(duì)象不限于request:除了注入request對(duì)象,該方法還可以注入其他scoperequestsession的對(duì)象,如HttpServletResponse對(duì)象、HttpSession對(duì)象等;并保證線程安全
  • 如果Controller有很多,那么我們需要在每個(gè)Controller里面進(jìn)行注入

方法三: 基類(lèi)中自動(dòng)注入

本質(zhì)與方法二類(lèi)似

public class BaseController {   
   @Autowired 
   protected HttpServletRequest request;
}
  • 線程安全
  • 與方法2相比,避免了在不同的Controller中重復(fù)注入request
  • 但是java只允許繼承一個(gè)基類(lèi)

方法四: 手動(dòng)調(diào)用

@Slf4j
@RequestMapping(path = "/request")
@RestController
public class DemoRequestController {
    @Resource
    private HttpServletRequest request1;
    @RequestMapping(path = "/demo")
    public String demo(HttpServletRequest request2) {
        HttpServletRequest request3 = ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes())).getRequest();
        log.info("request1: {}", request1.getClass());
        log.info("request2: {}", request2.getClass());
        log.info("request3: {}", request3.getClass());
        return "Hello, world!";
    }
}
  • 線程安全
  • 可以在非Bean中直接獲得
  • 缺點(diǎn)與方法一類(lèi)似

總結(jié)

獲取HttpServletRequest共有三種方式

  • Controller的方法增加HttpServletRequest參數(shù)
  • 自動(dòng)注入

建議使用繼承來(lái)減少代碼冗余

  • 通過(guò)RequestContextHolder.currentRequestAttributes()手動(dòng)獲取

適合在非Bean中獲取

到此這篇關(guān)于SpringBoot獲取HttpServletRequest的3種方式的文章就介紹到這了,更多相關(guān)SpringBoot獲取HttpServletRequest內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot中@PostConstruct 注解的實(shí)現(xiàn)

    SpringBoot中@PostConstruct 注解的實(shí)現(xiàn)

    在Spring Boot框架中,?@PostConstruct是一個(gè)非常有用的注解,它用于在依賴(lài)注入完成后執(zhí)行初始化方法,本文將介紹?@PostConstruct的基本概念、使用場(chǎng)景以及提供詳細(xì)的代碼示例,感興趣的可以了解一下
    2024-09-09
  • Java如何固定大小的線程池

    Java如何固定大小的線程池

    這篇文章主要介紹了Java固定大小的線程池操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Spring Boot應(yīng)用Docker化的步驟詳解

    Spring Boot應(yīng)用Docker化的步驟詳解

    這篇文章主要給大家介紹了關(guān)于Spring Boot應(yīng)用Docker化的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04
  • Java 單鏈表數(shù)據(jù)結(jié)構(gòu)的增刪改查教程

    Java 單鏈表數(shù)據(jù)結(jié)構(gòu)的增刪改查教程

    這篇文章主要介紹了Java 單鏈表數(shù)據(jù)結(jié)構(gòu)的增刪改查教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10
  • springboot項(xiàng)目引入外部jar包的詳細(xì)圖文教程

    springboot項(xiàng)目引入外部jar包的詳細(xì)圖文教程

    在項(xiàng)目中有時(shí)候需要引入外部jar包,啟動(dòng)運(yùn)行,下面這篇文章主要給大家介紹了關(guān)于springboot項(xiàng)目引入外部jar包的詳細(xì)圖文教程,需要的朋友可以參考下
    2023-09-09
  • Spring Boot 把配置文件和日志文件放到j(luò)ar外部

    Spring Boot 把配置文件和日志文件放到j(luò)ar外部

    如果不想使用默認(rèn)的application.properties,而想將屬性文件放到j(luò)ar包外面,怎么做呢?下面小編給大家?guī)?lái)了兩種方法解決Spring Boot 把配置文件和日志文件放到j(luò)ar外部問(wèn)題,感興趣的朋友一起看看吧
    2018-02-02
  • SpringBoot配置項(xiàng)目訪問(wèn)路徑URL的根路徑方式

    SpringBoot配置項(xiàng)目訪問(wèn)路徑URL的根路徑方式

    這篇文章主要介紹了SpringBoot配置項(xiàng)目訪問(wèn)路徑URL的根路徑方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 淺談mybatis-plus批量保存異常及效率優(yōu)化

    淺談mybatis-plus批量保存異常及效率優(yōu)化

    本文主要介紹了mybatis-plus批量保存異常及效率優(yōu)化,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • IDEA實(shí)現(xiàn)一鍵部署項(xiàng)目到服務(wù)器過(guò)程

    IDEA實(shí)現(xiàn)一鍵部署項(xiàng)目到服務(wù)器過(guò)程

    本文介紹了在阿里云服務(wù)器上通過(guò)開(kāi)放2375端口、配置Docker及IDEA插件,實(shí)現(xiàn)項(xiàng)目打包、編寫(xiě)Dockerfile、構(gòu)建鏡像和容器,并最終通過(guò)瀏覽器訪問(wèn)部署服務(wù)的全過(guò)程
    2025-10-10
  • Java實(shí)現(xiàn)字節(jié)數(shù)組轉(zhuǎn)int(IEEE754標(biāo)準(zhǔn))的完整指南

    Java實(shí)現(xiàn)字節(jié)數(shù)組轉(zhuǎn)int(IEEE754標(biāo)準(zhǔn))的完整指南

    在計(jì)算機(jī)科學(xué)中,IEEE 754 標(biāo)準(zhǔn)是浮點(diǎn)數(shù)表示的基石,本文將從 IEEE 754 的底層結(jié)構(gòu)出發(fā),結(jié)合 Java 平臺(tái)的特性,系統(tǒng)探討字節(jié)數(shù)組到 int 的轉(zhuǎn)換機(jī)制、IEEE 754 的語(yǔ)義映射、字節(jié)序的影響以及工程實(shí)踐中的關(guān)鍵考量
    2026-05-05

最新評(píng)論

获嘉县| 丰顺县| 康马县| 武陟县| 沙湾县| 甘孜县| 长宁区| 右玉县| 静海县| 昆山市| 鹿邑县| 东平县| 灵寿县| 成武县| 平原县| 平南县| 天镇县| 仲巴县| 四川省| 乌鲁木齐市| 台北县| 昌黎县| 运城市| 茶陵县| 巫山县| 博野县| 天台县| 樟树市| 上高县| 凌源市| 大方县| 伊宁市| 绩溪县| 措勤县| 顺义区| 田阳县| 深圳市| 买车| 平邑县| 保山市| 泰安市|