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

Spring MVC 中獲取session的幾種方法(小結)

 更新時間:2017年09月01日 09:04:38   作者:矜持的折返跑  
這篇文章主要介紹了Spring MVC 中獲取session的幾種方法(小結),具有一定的參考價值,感興趣的小伙伴們可以參考一下

Spring MVC 中使用session是一種常見的操作,但是大家上網(wǎng)搜索一下可以看到獲取session的方式方法五花八門,最近,自己終結了一下,將獲取session的方法記錄下來,以便大家共同學習進步。

第一種:將HttpSession作為Spring MVC 的方法參數(shù)傳入,直接獲取。

直接在Spring MVC 的方法中將參數(shù)傳入:

public void getSessionAction(HttpSession session){
}

這種方法我再網(wǎng)上搜索時發(fā)現(xiàn)很多人并不推薦使用,但是在簡單的測試中發(fā)現(xiàn),還是可以使用的,不推薦的具體原因很多文章中并沒有說明。

第二種:將HttpServletRequest作為Spring MVC 的方法參數(shù),間接獲取

先是獲取到request,然后通過request間接的獲取到session,代碼如下:

public void getSessionAction(HttpServletRequest request){
 HttpSession session = request.getSession();
}

這種方法時比較常見的一種,但是有些人會覺得這種比較麻煩,因為每次使用session都需要傳入一個參數(shù)(你到底是有多懶),于是就有了第三種方法

第三種:通過@Autowired HttpServletRequest request 獲取

這種方式類似于我們注入service類的時候是一樣的,第一眼看到這種方式的時候我是拒絕的,因為我們都知道,servlet是默認采用單例多線程的方式處理多用戶請求的,如果直接把它寫成一個全局的變量,會不會是不安全的?不過這里·基于spring注解的,所以基本上可以確保線程的安全性。但是說實在,我還是不放心,于是上網(wǎng)查了一些資料,最后看了看spring這部分的源碼(我會在另一片文章中詳細和大家討論的),最后發(fā)現(xiàn)這樣做是完全可行的。

第四種:使用RequestContextHolder類獲取request,間接獲取到session

通過使用RequestContextHolder這個類我們可以在不傳入HttpServletRequest,直接獲取到本次請求中的request。一般使用中我們會對它進行封裝,做成一個工具方法進行使用:

復制代碼 代碼如下:

((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();

注意進行強轉成為ServletRequestAttributes,具體原因可以在源碼中找到(有點廢話了),大致的原理就是,RequestContextHolder類中有兩個ThreadLocal保存當前線程下的request,每次我們調用getRequestAttributes()的時候就會獲取到當前的request,調用springmvc方法的時候沒有傳入request,那么這個request是在哪里獲取到的呢?看源碼可以知道,是在一個processRequest(HttpServletRequest request, HttpServletResponse response)這個方法里面,每次挑用doget(),dopost()的時候都會條用這個方法,將我們的request,response傳進去。

第五種: 使用@SessionAttributes

確切來說這種方式并不是直接獲取到session,但是我們可以通過這種方式將我們想要值放入到session中去。

其實總結是一個好習慣,在總結獲取session的方法過程中,看到了去多相關的博文,學習了一些意想不到的東西,所以想要拿出來,大家一起討論。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • idea編譯報錯-代碼沒問題IDEA編譯不通過的處理方案

    idea編譯報錯-代碼沒問題IDEA編譯不通過的處理方案

    這篇文章主要介紹了idea編譯報錯-代碼沒問題IDEA編譯不通過的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • SpringBoot 配置提示功能(超詳細)

    SpringBoot 配置提示功能(超詳細)

    這篇文章主要介紹了SpringBoot 配置提示功能,本文給大家介紹的超詳細,通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-10-10
  • springboot基于Redis發(fā)布訂閱集群下WebSocket的解決方案

    springboot基于Redis發(fā)布訂閱集群下WebSocket的解決方案

    這篇文章主要介紹了springboot基于Redis發(fā)布訂閱集群下WebSocket的解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • Java十道入門易踩坑題分析后篇

    Java十道入門易踩坑題分析后篇

    這篇文章總結分析了Java入門容易碰到的幾點易進坑的題目,對于新手小白剛開始學Java非常有益處,讓你少走避開彎路,感興趣的朋友快來看看吧
    2022-01-01
  • springsecurity第三方授權認證的項目實踐

    springsecurity第三方授權認證的項目實踐

    Spring security 是一個強大的和高度可定制的身份驗證和訪問控制框架,本文主要介紹了springsecurity第三方授權認證的項目實踐,具有一定的參考價值,感興趣可以了解一下
    2023-08-08
  • Java對類私有變量的暴力反射技術講解

    Java對類私有變量的暴力反射技術講解

    今天小編就為大家分享一篇關于Java對類私有變量的暴力反射技術講解,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • JVM方法調用invokevirtual詳解

    JVM方法調用invokevirtual詳解

    JVM調用方法有五條指令,分別是invokestatic,invokespecial,invokevirtual,invokeinterface,invokedynamic,這篇文章主要說明invokevirtual方法的調用問題,本文通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2022-03-03
  • 梳理總結Java?static關鍵字的方法作用

    梳理總結Java?static關鍵字的方法作用

    這篇文章主要介紹了梳理總結Java?static關鍵字的方法作用,?static?關鍵字可以用來修飾的成員變量和成員方法,被修飾的成員是屬于類的,而不是單單是屬于某個對象的
    2022-06-06
  • java 如何給對象中的包裝類設置默認值

    java 如何給對象中的包裝類設置默認值

    這篇文章主要介紹了java 如何給對象中的包裝類設置默認值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Jboss Marshalling服務端無法接受消息

    Jboss Marshalling服務端無法接受消息

    這篇文章主要介紹了Jboss Marshalling服務端無法接受消息,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03

最新評論