HTTP協(xié)議的無狀態(tài)
1. 在HTTP協(xié)議中無狀態(tài)的優(yōu)缺點(diǎn)
a) HTTP交互是無狀態(tài)的
無狀態(tài)是指,當(dāng)瀏覽器發(fā)送請(qǐng)求給服務(wù)器的時(shí)候,服務(wù)器響應(yīng),但是同一個(gè)瀏覽器再發(fā)送請(qǐng)求給服務(wù)器的時(shí)候,他會(huì)響應(yīng),但是他不知道你就是剛才那個(gè)瀏覽器。
b) 優(yōu)點(diǎn)
i. 客戶瀏覽器不會(huì)注意到服務(wù)器出現(xiàn)故障并重啟.
ii. 在服務(wù)器不需要先前信息時(shí)它的應(yīng)答就較快
c) 缺點(diǎn)
i. 對(duì)于事務(wù)處理沒有記憶能力,可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大
ii. 很難產(chǎn)生收集信息去產(chǎn)生良好用戶體驗(yàn)的一組頁面.
2. HTTP如果有狀態(tài)的好處
a) 減少數(shù)據(jù)的傳送量
b) 認(rèn)證網(wǎng)頁可以收集用戶的認(rèn)證信息
c) 可以定義用戶的對(duì)網(wǎng)頁的訪問權(quán)限
Cookie的原理和應(yīng)用
1. Cookie
a) 定義:
是一種由服務(wù)器發(fā)送給客戶的片段信息,存儲(chǔ)在客戶端瀏覽器的內(nèi)在中或硬盤上,在客戶隨后對(duì)該服務(wù)器的請(qǐng)求中發(fā)回它。
b) Cookie規(guī)范:
i. Netscape規(guī)范(版本0):
ii. RFC2109(HTTP狀態(tài)管理機(jī)制,版本1):http://www.ietf.org/rfc
c) 響應(yīng)報(bào)頭:
Set-Cookie: NAME=VALUE; Comment=value; Domain=value; Max-Age=value; Path=value; Secure; Version=1*DIGIT
d) 其他
Cookie中文譯為小甜餅,是由Netscape公司發(fā)明的。Netscape公司也是最早開發(fā)瀏覽器的公司,在互聯(lián)網(wǎng)剛剛發(fā)展的前期,它憑借著先入為主的優(yōu)勢(shì)Netscape也曾經(jīng)成為最流行的瀏覽器。但由于windows95的普及,微軟公司將IE瀏覽器與windows進(jìn)行綁定銷售,Netscape逐漸銷聲匿跡,不為人知了。但現(xiàn)在大多數(shù)的互聯(lián)網(wǎng)協(xié)議與規(guī)范都源于Netscape公司的產(chǎn)品。Cookie就是其中之后。它是一種由服務(wù)器發(fā)送給客戶的片段信息,它可以存儲(chǔ)在客戶端瀏覽器的內(nèi)在中或硬盤上,然后在客戶隨后對(duì)該服務(wù)器的請(qǐng)求中發(fā)回它。Cookie目前遵循的規(guī)范主要是兩種,一個(gè)就是Netscape規(guī)范,它的規(guī)范文件可以在找到。另一個(gè)是RFC2109,它的規(guī)范文件可以在上找到。這兩個(gè)規(guī)范,規(guī)定了在HTTP協(xié)議中,關(guān)于cookie的報(bào)頭的形式。比如,在RFC2109規(guī)范中,規(guī)定了響應(yīng)報(bào)頭的形式是這樣子的。Name是cookie的名字,vlue是它的值。Name=value屬性-值對(duì)必須首先出現(xiàn),在此之后的屬性值對(duì)可以以任何順序出現(xiàn)。Comment屬性是可選的,因?yàn)閏ookies可能包含關(guān)于用戶私有的信息,這個(gè)屬性允許服務(wù)器說明這個(gè)cookie的使用,用戶可以檢查這個(gè)信息,然后決定是否加入或繼續(xù)會(huì)話。 Domain屬性是可選的,用于指定Cookie在哪一個(gè)域有效,所指定的域必須以點(diǎn)號(hào)開始。Max-age屬性是可選可的,用于定義Cookie的生存時(shí)間,以秒為單位,如果超過了這個(gè)時(shí)間,客戶端應(yīng)該丟棄這個(gè)cookie,如果指定的秒數(shù)為0,表示這個(gè)cookie應(yīng)該立即被丟棄。Path屬性是可選的,用于指定這個(gè)cookie在哪一個(gè)URL子集下有效。Secure屬性是可選的,它沒有值,用于指示瀏覽器使用安全的方式與服務(wù)器交互。Version屬性是必需的,它的值是一個(gè)十進(jìn)制的整數(shù),標(biāo)識(shí)cookie依照的狀態(tài)管理規(guī)范的版本,對(duì)于RFC2109 Version應(yīng)該設(shè)為1.
2. 使用Cookie編程
a) 特點(diǎn)
i. 以鍵-值對(duì)的方式記錄會(huì)話跟蹤的內(nèi)容
ii. Cookie的持久性較高
iii. 用戶可以手動(dòng)限制cookie的使用
iv. Session可以用來替代Cookie
3. 設(shè)置一個(gè)Cookie
a) 創(chuàng)建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. 實(shí)例—登錄程序
a) 功能:
i. 使用cookie來保存用戶登錄信息
ii. 初次登錄,將信息保存到客戶端的硬盤上
iii. 再次訪問,先驗(yàn)證用戶登錄信息,通過后顯示歡迎信息
b) 步驟:
i. 第一步:編寫LoginServlet.java和GreetServlet.java
ii. 第二步:編譯JAVA源文件
iii. 第三步:部署servlet
5. 實(shí)例—LoginSerlvet
6. 實(shí)例—GreetServlet
7. 向?yàn)g覽器輸出會(huì)話
a) Cookie
i. 跟蹤跟瀏覽器有關(guān)的會(huì)話
ii. 有些瀏覽器不支持
iii. 有些用戶由于安全原因不使用
b) 重寫URL
i. 通過一個(gè)請(qǐng)求URL的會(huì)話ID把一個(gè)會(huì)話綁定到一個(gè)瀏覽器上
ii. 耗費(fèi)時(shí)間去掃描頁面和URL重定向
iii. 使用encodeURL()和encodeRedirectURL()
Session的原理和應(yīng)用
1. Session
a) 定義:
i. 一個(gè)瀏覽器到一個(gè)服務(wù)器相關(guān)的HTTP交互的集合.
ii. 是被瀏覽器訪問的Servlet獲取的與那些交互相關(guān)的數(shù)據(jù)集合.
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. 補(bǔ)充說明
a) Servlet運(yùn)行就會(huì)創(chuàng)建會(huì)話.
b) Servlet可以通過下面的方法來獲得session對(duì)象:
getSession()
c) 任何servlet可以請(qǐng)求創(chuàng)建會(huì)話.
d) 對(duì)處理目標(biāo)瀏覽器中請(qǐng)求的所有Servlet都可以訪問會(huì)話中的信息.
e) 會(huì)話會(huì)由于瀏覽器的不活躍而超時(shí)而失效。
4. Cookie和Session比較
a) session
i. 由服務(wù)器端創(chuàng)建
ii. 由服務(wù)端保存信息
iii. 打開新的瀏覽器,就會(huì)開始一次新的會(huì)話
b) Cookie
i. 由服務(wù)器發(fā)送給客戶端的片段信息,存儲(chǔ)在客戶端瀏覽器的內(nèi)存中或硬盤上。
ii. 由客戶端保存信息
iii. 在cookie有效期間內(nèi),多個(gè)瀏覽器可訪問同一個(gè)cookie對(duì)象
回顧C(jī)ookie和Session
Cookie在一個(gè)瀏覽器中存儲(chǔ)一個(gè)變量和對(duì)應(yīng)的值.
Cookie可以由瀏覽器用戶配置.
不是所有的瀏覽器都支持Cookie.
可以使用addCookie()和getCookie ()方法獲取Cookie.
session是由瀏覽器和網(wǎng)絡(luò)服務(wù)器之間的交互所關(guān)聯(lián)的數(shù)據(jù)集合.
每打開一個(gè)瀏覽器,就會(huì)創(chuàng)建一個(gè)新的session對(duì)象
會(huì)話開發(fā)時(shí)存在下列方法:
getSession()
setAttribute(key, value)
getAttribute(key)
更多信息請(qǐng)查看IT技術(shù)專欄