日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

[Java][web]利用Spring随时随地获得Request和Session

發(fā)布時(shí)間:2025/3/15 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Java][web]利用Spring随时随地获得Request和Session 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

利用Spring隨時(shí)隨地獲得Request和Session

一、準(zhǔn)備工作:

在web.xml中加入??

<listener> <listener-class> org.springframework.web.context.request.RequestContextListener</listener-class> </listener>
?


二、用法:
1、方法一:通過(guò)代碼實(shí)現(xiàn)

HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();


2、方法二:通過(guò)注解實(shí)現(xiàn):

@Autowired private HttpServletRequest request;


三、關(guān)于RequestContextListener的背景知識(shí): 基于LocalThread將HTTP request對(duì)象綁定到為該請(qǐng)求提供服務(wù)的線程上。這使得具有request和session作用域的bean可以在后面的調(diào)用鏈中被訪問(wèn)到。?

Request作用域?
<bean id="loginAction" class="com.foo.LoginAction" scope="request"/>?


針對(duì)每次HTTP請(qǐng)求。Spring容器會(huì)依據(jù)loginAction bean定義創(chuàng)建一個(gè)全新的LoginAction bean實(shí)例,且該loginAction bean實(shí)例僅在當(dāng)前HTTP request內(nèi)有效,因此能夠依據(jù)須要放心的更改所建實(shí)例的內(nèi)部狀態(tài)。而其它請(qǐng)求中依據(jù)loginAction bean定義創(chuàng)建的實(shí)例,將不會(huì)看到這些特定于某個(gè)請(qǐng)求的狀態(tài)變化。

當(dāng)處理請(qǐng)求結(jié)束,request作用域的bean實(shí)例將被銷毀。?



Session作用域?
<bean id="userPreferences" class="com.foo.UserPreferences" scope="session"/>?
針對(duì)某個(gè)HTTP Session。Spring容器會(huì)依據(jù)userPreferences bean定義創(chuàng)建一個(gè)全新的userPreferences bean實(shí)例,且該userPreferences bean僅在當(dāng)前HTTP Session內(nèi)有效。與request作用域一樣,你能夠依據(jù)須要放心的更改所創(chuàng)建實(shí)例的內(nèi)部狀態(tài),而別的HTTP Session中依據(jù)userPreferences創(chuàng)建的實(shí)例,將不會(huì)看到這些特定于某個(gè)HTTP Session的狀態(tài)變化。當(dāng)HTTP Session終于被廢棄的時(shí)候,在該HTTP Session作用域內(nèi)的bean也會(huì)被廢棄掉。

?



global session作用域?

<bean id="userPreferences" class="com.foo.UserPreferences" scope="globalSession"/>?

global session作用域類似于標(biāo)準(zhǔn)的HTTP Session作用域,只是它只在基于portlet的web應(yīng)用中才有意義。Portlet規(guī)范定義了全局Session的概念。它被全部構(gòu)成某個(gè)portlet web應(yīng)用的各種不同的portlet所共享。

在global session作用域中定義的bean被限定于全局portlet Session的生命周期范圍內(nèi)。?



請(qǐng)注意,假如你在編寫一個(gè)標(biāo)準(zhǔn)的基于Servlet的web應(yīng)用,而且定義了一個(gè)或多個(gè)具有g(shù)lobal session作用域的bean,系統(tǒng)會(huì)使用標(biāo)準(zhǔn)的HTTP Session作用域,而且不會(huì)引起不論什么錯(cuò)誤?
二、為什么須要額外的配置RequestContextFilter?
或許會(huì)有一個(gè)疑問(wèn),已經(jīng)通過(guò)ContextLoaderListener(或ContextLoaderServlet)將Web容器與Spring容器整合。為什么這里還要用額外的RequestContextListener以支持Bean的另外3個(gè)作用域,原因是ContextLoaderListener實(shí)現(xiàn)ServletContextListener監(jiān)聽(tīng)器接口,而ServletContextListener僅僅負(fù)責(zé)監(jiān)聽(tīng)Web容器的啟動(dòng)和關(guān)閉的事件。

RequestContextFilter實(shí)現(xiàn)ServletRequestListener監(jiān)聽(tīng)器接口,該監(jiān)聽(tīng)器監(jiān)聽(tīng)HTTP請(qǐng)求事件,Webserver接收的每次請(qǐng)求都會(huì)通知該監(jiān)聽(tīng)器。通過(guò)配置RequestContextFilter,Spring容器與Web容器結(jié)合的更加密切。

?


三、作用域依賴問(wèn)題?

假設(shè)將Web相關(guān)作用域的Bean注入到singleton或prototype的Bean中,這樣的情況下。須要Spring AOP

<bean?name="car"?class="com.demo.Car"?scope="request">??

????<aop:scoped-proxy/>??

</bean>??

<bean?id="boss"?class="com.demo.Boss"?>??

???<properrty?name="car"?ref="car"?/>??

</bean>??



轉(zhuǎn)載于:https://www.cnblogs.com/llguanli/p/7372894.html

總結(jié)

以上是生活随笔為你收集整理的[Java][web]利用Spring随时随地获得Request和Session的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。