萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> oracle教程 >> Oracle知識—HTTP Servlet中持久化狀態

Oracle知識—HTTP Servlet中持久化狀態

  HTTP協議的無狀態

  1. 在HTTP協議中無狀態的優缺點

  a) HTTP交互是無狀態的

  無狀態是指,當浏覽器發送請求給服務器的時候,服務器響應,但是同一個浏覽器再發送請求給服務器的時候,他會響應,但是他不知道你就是剛才那個浏覽器。

  b) 優點

  i. 客戶浏覽器不會注意到服務器出現故障並重啟.

  ii. 在服務器不需要先前信息時它的應答就較快

  c) 缺點

  i. 對於事務處理沒有記憶能力,可能導致每次連接傳送的數據量增大

  ii. 很難產生收集信息去產生良好用戶體驗的一組頁面.

  2. HTTP如果有狀態的好處

  a) 減少數據的傳送量

  b) 認證網頁可以收集用戶的認證信息

  c) 可以定義用戶的對網頁的訪問權限

  Cookie的原理和應用

  1. Cookie

  a) 定義:

  是一種由服務器發送給客戶的片段信息,存儲在客戶端浏覽器的內在中或硬盤上,在客戶隨後對該服務器的請求中發回它。

  b) Cookie規范:

  i. Netscape規范(版本0):http://wp.netscape.com/newsref/std/cookie_spec.html

  ii. RFC2109(HTTP狀態管理機制,版本1):http://www.ietf.org/rfc

  c) 響應報頭:

  Set-Cookie: NAME=VALUE; Comment=value; Domain=value; Max-Age=value; Path=value; Secure; Version=1*DIGIT

  d) 其他

  Cookie中文譯為小甜餅,是由Netscape公司發明的。Netscape公司也是最早開發浏覽器的公司,在互聯網剛剛發展的前期,它憑借著先入為主的優勢Netscape也曾經成為最流行的浏覽器。但由於windows95的普及,微軟公司將IE浏覽器與windows進行綁定銷售,Netscape逐漸銷聲匿跡,不為人知了。但現在大多數的互聯網協議與規范都源於Netscape公司的產品。Cookie就是其中之後。它是一種由服務器發送給客戶的片段信息,它可以存儲在客戶端浏覽器的內在中或硬盤上,然後在客戶隨後對該服務器的請求中發回它。Cookie目前遵循的規范主要是兩種,一個就是Netscape規范,它的規范文件可以在http://wp.netscape.com/newsref/std/cookie_spec.html找到。另一個是RFC2109,它的規范文件可以在http://www.ietf.org/rfc上找到。這兩個規范,規定了在HTTP協議中,關於cookie的報頭的形式。比如,在RFC2109規范中,規定了響應報頭的形式是這樣子的。Name是cookie的名字,vlue是它的值。Name=value屬性-值對必須首先出現,在此之後的屬性值對可以以任何順序出現。Comment屬性是可選的,因為cookies可能包含關於用戶私有的信息,這個屬性允許服務器說明這個cookie的使用,用戶可以檢查這個信息,然後決定是否加入或繼續會話。 Domain屬性是可選的,用於指定Cookie在哪一個域有效,所指定的域必須以點號開始。Max-age屬性是可選可的,用於定義Cookie的生存時間,以秒為單位,如果超過了這個時間,客戶端應該丟棄這個cookie,如果指定的秒數為0,表示這個cookie應該立即被丟棄。Path屬性是可選的,用於指定這個cookie在哪一個URL子集下有效。Secure屬性是可選的,它沒有值,用於指示浏覽器使用安全的方式與服務器交互。Version屬性是必需的,它的值是一個十進制的整數,標識cookie依照的狀態管理規范的版本,對於RFC2109 Version應該設為1.

  2. 使用Cookie編程

  a) 特點

  i. 以鍵-值對的方式記錄會話跟蹤的內容

  ii. Cookie的持久性較高

  iii. 用戶可以手動限制cookie的使用

  iv. Session可以用來替代Cookie

  3. 設置一個Cookie

  a) 創建cookie:

  Cookie c = new Cookie("MyName", "MyValue");

  b) Cookie的方法:

  i. getConnment()、setComment(String purpose)

  ii. getDomain()、setDomain(String pattern)

  iii. getMaxAge()、setMaxAge(int expiry)

  iv. getName()、getValue()

  v. setValue(String newValue)

  vi. getPath()、setpath(String uri)

  c) 使用cookie

  i. Response.addCookie()

  ii. Request.getCoonkie()

  4. 實例—登錄程序

  a) 功能:

  i. 使用cookie來保存用戶登錄信息

  ii. 初次登錄,將信息保存到客戶端的硬盤上

  iii. 再次訪問,先驗證用戶登錄信息,通過後顯示歡迎信息

  b) 步驟:

  i. 第一步:編寫LoginServlet.java和GreetServlet.java

  ii. 第二步:編譯JAVA源文件

  iii. 第三步:部署servlet

  5. 實例—LoginSerlvet

  6. 實例—GreetServlet

  7. 向浏覽器輸出會話

  a) Cookie

  i. 跟蹤跟浏覽器有關的會話

  ii. 有些浏覽器不支持

  iii. 有些用戶由於安全原因不使用

  b) 重寫URL

  i. 通過一個請求URL的會話ID把一個會話綁定到一個浏覽器上

  ii. 耗費時間去掃描頁面和URL重定向

  iii. 使用encodeURL()和encodeRedirectURL()

  Session的原理和應用

  1. Session

  a) 定義:

  i. 一個浏覽器到一個服務器相關的HTTP交互的集合.

  ii. 是被浏覽器訪問的Servlet獲取的與那些交互相關的數據集合.

  b) javax.servlet.http.HttpSession支持的接口.

  2. HttpSession接口

  a) HttpSession接口中的方法

  i. public Object getAttribute(String name)

  ii. public void setAttribute(String name,Object value)

  iii. public void removeAttribute(String name)

  iv. public int setMaxInactiveInterval()

  v. public void invalidate()

  3. 補充說明

  a) Servlet運行就會創建會話.

  b) Servlet可以通過下面的方法來獲得session對象:

  getSession()

  c) 任何servlet可以請求創建會話.

  d) 對處理目標浏覽器中請求的所有Servlet都可以訪問會話中的信息.

  e) 會話會由於浏覽器的不活躍而超時而失效。

  4. Cookie和Session比較

  a) session

  i. 由服務器端創建

  ii. 由服務端保存信息

  iii. 打開新的浏覽器,就會開始一次新的會話

  b) Cookie

  i. 由服務器發送給客戶端的片段信息,存儲在客戶端浏覽器的內存中或硬盤上。

  ii. 由客戶端保存信息

  iii. 在cookie有效期間內,多個浏覽器可訪問同一個cookie對象

  回顧Cookie和Session

  Cookie在一個浏覽器中存儲一個變量和對應的值.

  Cookie可以由浏覽器用戶配置.

  不是所有的浏覽器都支持Cookie.

  可以使用addCookie()和getCookie ()方法獲取Cookie.

  session是由浏覽器和網絡服務器之間的交互所關聯的數據集合.

  每打開一個浏覽器,就會創建一個新的session對象

  會話開發時存在下列方法:

  getSession()

  setAttribute(key, value)

  getAttribute(key)

copyright © 萬盛學電腦網 all rights reserved