天天看點

針對Java 四大域對象的彙總

一、servletcontext

1、生命周期:當web應用被加載進容器時建立代表整個web應用的servletcontext對象,當伺服器關閉或web應用被移除時,servletcontext對象跟着銷毀。

2、作用範圍:整個web應用。

3、作用:

針對Java 四大域對象的彙總

a)在不同servlet 之間轉發

this.getservletcontext().getrequestdispatcher("/servlet/demo10servlet").forward(request, response);

方法執行結束,service就會傳回到伺服器,再有伺服器去調用目标servlet,其中request會重新建立,并将之前的request的資料拷貝進去。

b)讀取資源檔案。

1、由于相對路徑預設相對的是java虛拟機啟動的目錄,是以我們直接寫相對路徑将會是相對于tomcat/bin目錄,是以是拿不到資源的。

如果寫成絕對路徑,當項目釋出到其他環境時,絕對路徑就錯了。

2、為了解決這個問題servletcontext提供了:

this.getservletcontext().getrealpath(“/1.properties”),給進一個資源的虛拟路徑,将會傳回該資源在目前環境下的真實路徑。

this.getservletcontext().getresourceasstream(“/1.properties”),給一個資源的虛拟路徑傳回到該資源真實路徑的流。

3、當在非servlet下擷取資源檔案時,就沒有servletcontext對象用了,此時隻能用類加載器

classloader.getresourceasstream(“../../1.properties”),此方法利用類加載器直接将資源加載到記憶體中,有更新延遲的問題,

以及如果檔案太大,占用記憶體過大。

classloader.getresource(“../1.properties”).getpath(),直接傳回資源的真實路徑,沒有更新延遲的問題。

二、request 域

1、生命周期:在service 方法調用前由伺服器建立,傳入service方法。整個請求結束,request生命結束。

2、作用範圍:整個請求鍊(請求轉發也存在)。

3、作用:  在整個請求鍊中共享資料。最常用到:在servlet 中處理好的資料交給jsp顯示,此時參數就可以放置在request域中帶過去。

三、session 域

httpsession 在伺服器中,為浏覽器建立獨一無二的記憶體空間,在其中儲存會話相關的資訊。

1、生命周期:在第一次調用 request.getsession() 方法時,伺服器會檢查是否已經有對應的session,如果沒有就在記憶體  中建立一個session并傳回。

當一段時間内session沒有被使用(預設為30分鐘),則伺服器會銷毀該session。

如果伺服器非正常關閉(強行關閉),沒有到期的session也會跟着銷毀。

如果調用session提供的invalidate() ,可以立即銷毀session。

注意:伺服器正常關閉,再啟動,session對象會進行鈍化和活化操作。同時如果伺服器鈍化的時間在session 預設銷毀時間之内,

則活化後session還是存在的。否則session不存在。  如果javabean 資料在session鈍化時,沒有實作serializable 則當session活化時,會消失。

2、作用範圍:一次會話。

四、pagecontext 域

1、生命周期:當對jsp的請求時開始,當響應結束時銷毀。

2、作用範圍:整個jsp頁面,是四大作用域中最小的一個。

作用:

(1)擷取其它八大隐式對象,可以認為是一個入口對象。

(2)擷取其所有域中的資料

pagecontext 操作所有域中屬性的方法

public java.lang.object getattribute(java.lang.string name,int scope)

public void setattribute(java.lang.string name, java.lang.object value,int scope)

public void removeattribute(java.lang.string name,int scope)

pagecontext 中代表域的常量

pagecontext.application_scope

pagecontext.session_scope

pagecontext.request_scope

pagecontext.page_scope

findattribute方法,在四大域中搜尋屬性,搜尋的順序是page域、request域、session域、application域,

從小域到大域開始搜尋,如果搜尋到就直接擷取該值,如果所有域中都找不到,傳回一個null(與el表達式不同,此處傳回null,對網頁是不友好的)

(3)跳轉到其他資源      其身上提供了forward和include方法,簡化重定向和轉發的操作

來源:51cto

上一篇: Hadoop