1. 程式人生 > >Servlet中三種域物件的總結

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過期/失效:

  1. 伺服器會把長時間沒有活動的session從伺服器記憶體中清楚,此時Session便失效。Tomcat中Session的預設失效時間為20分鐘。
  2. 手動銷燬session:session.invalidate();
  3. 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物件。