Servlet中三種域物件的總結
什麼是域物件?
有的同學聽到“域物件”這個詞感到很高階,其實沒那麼複雜。儲存資料的區域就稱為“域物件”。
打個比喻:你家有一個池塘,池塘裡面有魚,有蝦,有螃蟹等等。這些水產品就是資料,整個池塘就是“域物件”。你可以將一些魚、蝦放進池塘裡,也可以從池塘裡撈出來。這就類比於從域物件中存取資料。
域物件也有大有小,不同的域物件有著不同的作用範圍。
Servlet有三個域物件,分別為:request,application( ServletContext ),session。下面我就來介紹下這三種作用域的作用範圍。
request
request物件是一個域物件,只要傳送一個請求就會發送request物件。這個域物件的作用範圍僅在本次請求中有效。即
- 何時建立:HTTP請求時
- 何時銷燬:HTTP響應結束時
- 域的作用範圍:一次請求中
在request域中存取資料:
request.setAttribute("name","zhangsan");
request.getAttribute("name");
這個request域有什麼用呢?
答:可以用在請求“轉發”場景下。當前Servlet物件A收到一個HTTP請求時,轉發到另一個Servlet物件B進行處理,此時B Servlet物件內的request、response還是A物件內那一對,請求沒有改變,則request域就沒有改變。在A中set的key-value對,在B中可以取出來使用。
session
session表示會話,Tomcat會為每一個會話建立一個session物件。
session物件的生命週期:
session何時建立:使用者第一次訪問伺服器時建立,值得注意的是:訪問JSP、Servlet等程式時才會建立Session,只訪問HTML、IMAGE等靜態資源時並不會
session過期/失效:
- 伺服器會把長時間沒有活動的session從伺服器記憶體中清楚,此時Session便失效。Tomcat中Session的預設失效時間為20分鐘。
- 手動銷燬session:session.invalidate();
- Tomcat非正常關閉時。
Session作用範圍:預設在一次會話中,即一次會話中的任何資源公用一個session物件。
application(ServletContext)
ServletContext 代表一個web應用的環境物件。它的作用範圍是整個web應用,即所有的web資源(比如Servlet物件、靜態檔案)都可以隨意向ServletContext域中存取資料。
在ServletContext域中存取資料:
ServletContext context1 = getServletContext();
context1.setAttribute("name","zhangsan"); //將鍵值對放入context域中
ServletContext context2 = getServletContext();
context2.getAttribute("name"); //從context域中取值
注意:伺服器只會建立一個ServletContext物件,所以context1、context2所引用的是同一個context物件。