欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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è)方法都需要寫一遍

方法二: 自動(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并沒有注入一個(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)行注入

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

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

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

方法四: 手動(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)與方法一類似

總結(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)文章

  • PowerJob的DesignateServer工作流程源碼解讀

    PowerJob的DesignateServer工作流程源碼解讀

    這篇文章主要介紹了PowerJob的DesignateServer工作流程源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • java?Map接口子類HashMap遍歷與LinkedHashMap詳解

    java?Map接口子類HashMap遍歷與LinkedHashMap詳解

    這篇文章主要介紹了java?Map接口子類HashMap遍歷與LinkedHashMap詳解,Map接口下的集合與Collection接口下的集合,它們存儲(chǔ)數(shù)據(jù)的形式不同,感興趣的小伙伴可以參考下面文章詳細(xì)內(nèi)容介紹
    2022-06-06
  • OpenFeign指定url方式調(diào)用的方式詳解

    OpenFeign指定url方式調(diào)用的方式詳解

    OpenFeign一般是結(jié)合注冊(cè)中心一起使用的,也就是可以通過(guò)提供服務(wù)的名稱而不是url來(lái)完成對(duì)目標(biāo)服務(wù)的訪問,本篇我們就講解一下OpenFeign直接通過(guò)目標(biāo)服務(wù)的url進(jìn)行調(diào)用的方式,需要的朋友可以參考下
    2024-11-11
  • MybatisGenerator文件生成不出對(duì)應(yīng)文件的問題

    MybatisGenerator文件生成不出對(duì)應(yīng)文件的問題

    本文介紹了使用MybatisGenerator生成文件時(shí)遇到的問題及解決方法,主要步驟包括檢查目標(biāo)表是否存在、是否能連接到數(shù)據(jù)庫(kù)、配置生成器的路徑等,通過(guò)在項(xiàng)目結(jié)構(gòu)中引入相應(yīng)的jar包,并在GeneratorSqlmap.java文件中運(yùn)行,可以成功生成對(duì)應(yīng)的文件
    2025-01-01
  • 使用Java的Graphics類進(jìn)行繪圖的方法詳解

    使用Java的Graphics類進(jìn)行繪圖的方法詳解

    這篇文章主要介紹了使用Java的Graphics類進(jìn)行繪圖的方法,是Java的GUI編程的基礎(chǔ),需要的朋友可以參考下
    2015-10-10
  • Spring使用@responseBody與序列化詳解

    Spring使用@responseBody與序列化詳解

    這篇文章主要介紹了Spring使用@responseBody與序列化詳解,@responseBody注解的作用是將controller的方法返回的對(duì)象通過(guò)適當(dāng)?shù)霓D(zhuǎn)換器轉(zhuǎn)換為指定的格式之后,寫入到response對(duì)象的body區(qū),通常用來(lái)返回JSON數(shù)據(jù)或者是XML數(shù)據(jù),需要的朋友可以參考下
    2023-08-08
  • Java語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單FTP軟件 FTP上傳下載管理模塊實(shí)現(xiàn)(11)

    Java語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單FTP軟件 FTP上傳下載管理模塊實(shí)現(xiàn)(11)

    這篇文章主要為大家詳細(xì)介紹了Java語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單FTP軟件,F(xiàn)TP本地文件管理模塊的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Java中的邏輯結(jié)構(gòu)詳解

    Java中的邏輯結(jié)構(gòu)詳解

    這篇文章主要介紹了Java中的邏輯結(jié)構(gòu)詳解,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • 詳解Java多線程和IO流的應(yīng)用

    詳解Java多線程和IO流的應(yīng)用

    這篇文章主要介紹了詳解Java多線程和IO流的應(yīng)用,無(wú)論是本地文件復(fù)制,還是網(wǎng)絡(luò)多線程下載,對(duì)于流的使用都是一樣的,需要的朋友可以參考下
    2023-04-04
  • springboot2如何禁用自帶tomcat的session功能

    springboot2如何禁用自帶tomcat的session功能

    這篇文章主要介紹了springboot2如何禁用自帶tomcat的session功能,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評(píng)論