這篇文章主要介紹“JSP四大作用域及其請求范圍”,在日常操作中,相信很多人在JSP四大作用域及其請求范圍問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”JSP四大作用域及其請求范圍”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
專業(yè)從事成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計,高端網(wǎng)站制作設(shè)計,小程序設(shè)計,網(wǎng)站推廣的成都做網(wǎng)站的公司。優(yōu)秀技術(shù)團隊竭力真誠服務(wù),采用html5+CSS3前端渲染技術(shù),響應(yīng)式網(wǎng)站開發(fā),讓網(wǎng)站在手機、平板、PC、微信下都能呈現(xiàn)。建站過程建立專項小組,與您實時在線互動,隨時提供解決方案,暢聊想法和感受。
程序員在寫代碼的時候,難免會遇到作用域的問題,今天我們要談的也是JSP的四大作用域。本文主要總結(jié)了JSP四大作用域page、request、session和application和它們的請求范圍。
1、page
page直譯就是頁面的意思,所以page作用域就比較好理解了——page作用域表示只在當前頁面有效,也就是用戶請求的頁面有效。當當前頁面關(guān)閉或轉(zhuǎn)到其他頁面時,page對象將在響應(yīng)回饋給客戶端后釋放。當程序運行跑出了當前的頁面,你就無法在其它的頁面訪問當前頁面設(shè)置的屬性值。
我們都知道,JSP最終會被編譯成Servlet文件。在Servlet容器中,每個Servlet都只存在一個實例。但是對于page作用域的屬性來說,在當前頁面設(shè)置的屬性只在本次訪問該頁面有效,當你再次訪問該頁面時,又會重新初始化頁面的屬性。例如以下代碼:
<%
out.print(pageContext.getAttribute("SiteName")); // 輸出null
pageContext.setAttribute("SiteName", "果凍想-一個原創(chuàng)技術(shù)文章分享網(wǎng)站");
%>
當我在瀏覽器訪問該頁面時會輸出null;當我再重新打開一個該頁面時,還會輸出null,并不會輸出”果凍想-一個原創(chuàng)技術(shù)文章分享網(wǎng)站”。也就是說,page作用域范圍的不會存在線程安全的問題,每一次訪問同一個頁面,設(shè)置的page作用域的屬性都是不一樣的。
2、request作用域
request表示一次客戶端的請求,他在請求中有效。
request可以通過setAttribute()和getAttribute方法存取值實現(xiàn)頁面中的信息傳遞,也可以通過forward()方法進行頁面間的跳轉(zhuǎn)(需要注意的是request是轉(zhuǎn)發(fā)不是重定向,轉(zhuǎn)發(fā)相對于瀏覽器來說是透明的,也就是無論頁面如何跳轉(zhuǎn),地址欄上顯示的依舊是最初的地址,瀏覽器感知不到),在這些轉(zhuǎn)發(fā)頁面中都可以使用request中存儲的信息。
一次請求的生命周期從客戶端發(fā)起到服務(wù)器接收并響應(yīng)該請求,或者將該請求forward到另一個頁面或者Servlet進行處理而結(jié)束。在此期間,本次請求的參數(shù),屬性都是有效的;一旦客戶端刷新瀏覽器,重新發(fā)起請求,則之前的請求參數(shù)和屬性都將失效。
特別需要注意的是,當我們使用
3、session作用域
session作用域在當前回話中有效。當我們向服務(wù)器發(fā)送第一個請求開始,只要頁面不關(guān)閉,或者會話未過期(默認30分鐘),或者未調(diào)用HttpSession的invalidate()方法,接下來的操作都屬于同一次會話的范疇。當一個臺電腦上的同一瀏覽器對服務(wù)器進行多次訪問時,在這多次訪問之間傳遞的信息就是session作用域的范圍。它從瀏覽器發(fā)出第一個HTTP請求即可認為會話開始,在瀏覽器關(guān)閉時結(jié)束會話,但是會話結(jié)束的時間是不確定的,因為在瀏覽器關(guān)閉時并不會通知服務(wù)器,一般Tomcat設(shè)置的默認時間為120分鐘,也可以通過setMaxInactiveInterval(int)方法進行設(shè)置,或是通過invalidate()方法強制結(jié)束當前會話。session也可以通過setAttribute賦值和getAttribute取值。
在JSP中,每當向服務(wù)器發(fā)送一個請求,服務(wù)器響應(yīng)這個請求的時候,會在客戶端的Cookie中寫一個session id值。每次發(fā)送請求的時候,會將該session id值一起發(fā)送到服務(wù)器端,服務(wù)器端根據(jù)該session id值來判斷每次請求是否屬于同一個session的范疇之內(nèi)。
4、application作用域
application的作用域是最廣的,它在所有的應(yīng)用程序中都有效。它代表著整個Web應(yīng)用的全局變量,對每一個頁面,每一個Servlet都是有效的。當我們在application中設(shè)置屬性時,這個屬性在任意的一個頁面都是可以訪問的。
也就是當服務(wù)器開始到服務(wù)器結(jié)束這段時間,application作用域中存儲的數(shù)據(jù)都是有效的,同樣可以通過setAttribute賦值和getAttribute取值。要注意application里的變量可以被所有用戶共用,當一個用戶對application中的變量做了修改,其他用戶再訪問的是修改后的值。
在application作用域中設(shè)置的屬性如果不手動調(diào)用removeAttribute函數(shù)進行刪除的話,那么application中的屬性將永遠不會刪除,如果Web容器發(fā)生重啟,此時application范圍內(nèi)的所有屬性都將丟失。
到此,關(guān)于“JSP四大作用域及其請求范圍”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
分享名稱:JSP四大作用域及其請求范圍
新聞來源:http://weahome.cn/article/iijesd.html