天天看點

Servlet的會話跟蹤

本章技能目标:

Ø  了解會話跟蹤的原理

Ø  會使用獲得HttpSession對象的方法

Ø  會使用HttpSession對象進行資料的存儲

  HTTP協定的無狀态

Ø  HTTP協定是無狀态的,也就是說,如果我們僅使用Http協定是不能夠進行使用者狀态的跟蹤的。

  會話跟蹤

Ø  什麼是會話?

²  在Java Servlet API 中引入session機制來跟蹤客戶的狀态。Session指的是一段時間内,單個使用者與Web伺服器的一連串相關的互動過程,

Ø  如何進行會話跟蹤的?

²  在Servlet API中定義了javax.servlet.http.HttpSession接口,Servlet容器必須實作這個接口。

²  當一個session開始時,Servlet容器建立一個HttpSession對象,并同時在記憶體中為其開辟一個空間,在HttpSession對象中可以存放客戶狀态的資訊(例如:購物車)。

²  Servlet容器為HttpSession配置設定一個唯一辨別符,稱為SessionID。Servlet容器把SessionID儲存在客戶的浏覽器中。每次客戶發送HTTP請求時,Servlet容器可以從HttpSession對象中讀取Se.ssionID,然後根據SessionID找到相應的HttpSession對象,進而擷取客戶的狀态資訊。

Ø  會話的建立和使用

²  會話的建立

Servlet中的HttpRequestServlet對象為我們提供了以下兩種建立和擷取HttpSession對象的方法。

1.           HttpSession session=request.getSession(Boolean value);

2.           HttpSession session=request.getSession();

差別:

        在第一種方法中,布爾值為true時,如果存在與目前請求關聯的會話,就會傳回該會話,否則就建立一個新會話,并傳回。布爾值為false時,如果存在與目前請求關聯的會話,就傳回該會話,否則傳回NULL,不再建立會話。

                            第二種方法等同于第一種方法中的布爾參數為true的情況。

²  會話的使用

在Javax.servlet.http.HttpSession接口定義的方法,我們常用的是有關資料存儲的方法。

1.          session.setAttribute(String name, Object value);

2.          session.getttribute(String name);

注意:在取出資料時,需要類型轉換。

Ø  HttpSession對象存在的周期

1.       HttpSession對象的建立

²  當用戶端浏覽器第一次通路伺服器時,伺服器為每個浏覽器建立了不同的HttpSession對象。在伺服器端使用request.getSession()方法來獲得HttpSession對象。并以此來使用HttpSession接口為什麼提供的方法。

2.       HttpSession對象的使用

²  在建立HttpSession對象後,使用該對象進行資料的存儲,以進行資料的傳遞,在此過程中我們常用的方法如下。

(1) void set Attribute(String name, Object value);           //進行資料的存儲。

(2)Object getAttribute(String name);         //進行資料的讀取。

3.       HttpSession對象的結束

²  在以下3種情況,可以結束session

(1)    關閉浏覽器,關閉session

(2)    調用HttpSession的invalidate()方法,删除HttpSession對象和資料。

(3)    兩次通路時間間隔大于session定義的非活動時間間隔。

Ø  網頁計數器

²  HttpSession技術不屬于HTTP協定的範圍内,它是因為HTTP協定不能滿足對使用者的跟蹤而産生的一直技術,它是由Web伺服器為程式提供的服務。

²  Session是由伺服器也就是Web容器建立的,我們使用request.getSession()來獲得HttpSession對象,使用session.setAttribute()進行資料的儲存,而使用session.getAttribute()來獲得session内以儲存的值。

Ø  在使用session進行資料存儲的時候,需要考慮該資料是否合适被存入session中,如果是目前使用者經常使用的資料,則可以存入session中。如果使用者隻用了一次,不要使用或者偶爾才使用一次的資料,則不要存入session中,因為這樣會增加系統資源的浪費。

  總結:

Ø  在Web項目中使用session,是為了跟蹤使用者狀态,并區分不同的使用者。

Ø  會話是Web容器建立的,而不是由程式員編碼建立的,當用戶端第一次通路的伺服器的時候,伺服器會為客戶建立一個session/

Ø  結束session有以下3中方式:

l  關閉浏覽器

l  兩次通路的時間間隔大于非活動時間

l  調用HttpSession的invalidate()方法

Ø  使用HttpSession提供的setAttribute()方法儲存資料,而使用getAttribute()方法擷取資料。