更新時間:2020-06-11 14:59:55 來源:動力節(jié)點 瀏覽2644次
程序員在寫代碼的時候,難免會遇到作用域的問題,今天我們要談的也是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ù)和屬性都將失效。
特別需要注意的是,當我們使用<jsp:forward .../>動作將當前請求轉(zhuǎn)向另一個頁面或者Servlet的時候,該請求的參數(shù)和屬性也一并轉(zhuǎn)過去,并不會因為<jsp:forward .../>動作而丟失request的參數(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)的所有屬性都將丟失。

Javaweb視頻教程下載
JSP視頻教程:http://www.soulsinkind.com/javavideo/120.html
以上就是動力節(jié)點java培訓(xùn)機構(gòu)的小編針對“Javaweb視頻下載之JSP四大作用”的內(nèi)容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。
相關(guān)閱讀