更新時間:2022-05-11 10:59:53 來源:動力節(jié)點 瀏覽2152次
在Java語言中,作用域是由括號的位置決定的,它決定了其定義的變量名的可見性與生命周期。那java作用域及范圍是什么?接下來動力節(jié)點小編就來給大家講解一下java作用域及范圍。

1.生命周期:當Web應用被加載進容器時創(chuàng)建代表整個web應用的ServletContext對象,當服務器關閉或Web應用被移除時,ServletContext對象跟著銷毀。
2.作用范圍:整個Web應用。
3.作用:
(1)在不同Servlet 之間轉(zhuǎn)發(fā)
this.getServletContext().getRequestDispatcher("/servlet/Demo10Servlet").forward(request,response);
方法執(zhí)行結(jié)束,service就會返回到服務器,再有服務器去調(diào)用目標servlet,其中request會重新創(chuàng)建,并將之前的request的數(shù)據(jù)拷貝進去。
(2)讀取資源文件。
1)由于相對路徑默認相對的是java虛擬機啟動的目錄,所以我們直接寫相對路徑將會是相對于tomcat/bin目錄,所以是拿不到資源的。
如果寫成絕對路徑,當項目發(fā)布到其他環(huán)境時,絕對路徑就錯了。
2)為了解決這個問題ServletContext提供了:
this.getServletContext().getRealPath(“/1.properties”),給進一個資源的虛擬路徑,將會返回該資源在當前環(huán)境下的真實路徑。
this.getServletContext().getResourceAsStream(“/1.properties”),給一個資源的虛擬路徑返回到該資源真實路徑的流。
(3)當在非servlet下獲取資源文件時,就沒有ServletContext對象用了,此時只能用類加載器
classLoader.getResourceAsStream(“../../1.properties”),此方法利用類加載器直接將資源加載到內(nèi)存中,有更新延遲的問題,以及如果文件太大,占用內(nèi)存過大。
classLoader.getResource(“../1.properties”).getPath(),直接返回資源的真實路徑,沒有更新延遲的問題。
1.生命周期:在service方法調(diào)用前由服務器創(chuàng)建,傳入service方法。整個請求結(jié)束,request生命結(jié)束。
2.作用范圍:整個請求鏈(請求轉(zhuǎn)發(fā)也存在)。
3.作用: 在整個請求鏈中共享數(shù)據(jù)。最常用到:在Servlet 中處理好的數(shù)據(jù)交給Jsp顯示,此時參數(shù)就可以放置在Request域中帶過去。
HttpSession 在服務器中,為瀏覽器創(chuàng)建獨一無二的內(nèi)存空間,在其中保存會話相關的信息。
1.生命周期:在第一次調(diào)用 request.getSession() 方法時,服務器會檢查是否已經(jīng)有對應的session,如果沒有就在內(nèi)存 中創(chuàng)建一個session并返回。
當一段時間內(nèi)session沒有被使用(默認為30分鐘),則服務器會銷毀該session。
如果服務器非正常關閉(強行關閉),沒有到期的session也會跟著銷毀。
如果調(diào)用session提供的invalidate(),可以立即銷毀session。
注意:服務器正常關閉,再啟動,Session對象會進行鈍化和活化操作。同時如果服務器鈍化的時間在session 默認銷毀時間之內(nèi),則活化后session還是存在的。否則Session不存在。如果JavaBean 數(shù)據(jù)在session鈍化時,沒有實現(xiàn)Serializable 則當Session活化時,會消失。
2.作用范圍:一次會話。
1.生命周期:當對JSP的請求時開始,當響應結(jié)束時銷毀。
2.作用范圍:整個JSP頁面,是四大作用域中最小的一個,即超過這個頁面就不能夠使用了。(所以使用pageContext對象向其它頁面?zhèn)鬟f參數(shù)是不可能的.)
作用:
(1)獲取其它八大隱式對象,可以認為是一個入口對象。
(2)獲取其所有域中的數(shù)據(jù),從小域到大域開始搜索,如果搜索到就直接獲取該值,如果所有域中都找不到,返回一個null(與el表達式不同,此處返回null,對網(wǎng)頁是不友好的)。
(3)跳轉(zhuǎn)到其他資源,其身上提供了forward和include方法,簡化重定向和轉(zhuǎn)發(fā)的操作。
java作用域就是以上這幾種,作用域的作用就是為了在一定范圍內(nèi)共享數(shù)據(jù),大家可以多了解java作用域及范圍。