国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

Java中的cookie管理方案(2)-與J2ME結(jié)合

2019-11-18 16:04:27
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
java中的狀態(tài)管理
Java應(yīng)用程序在以下幾種情況要求cookie操作:
● 網(wǎng)站交互:為了與網(wǎng)站交互,基于Internet的客戶端應(yīng)用程序經(jīng)常扮演小型網(wǎng)絡(luò)瀏覽器的角色。這些站點(diǎn)使用cookies進(jìn)行狀態(tài)管理以維護(hù)用戶的會(huì)話數(shù)據(jù)。
● 網(wǎng)絡(luò)服務(wù)實(shí)現(xiàn):網(wǎng)絡(luò)服務(wù)承諾使網(wǎng)絡(luò)成為電腦機(jī)器的友好地方。一個(gè)都希望的允許機(jī)器-網(wǎng)站進(jìn)行交互的方法就是在網(wǎng)站前面有一個(gè)網(wǎng)絡(luò)服務(wù)。因此,網(wǎng)絡(luò)服務(wù)將目標(biāo)網(wǎng)站的視窗十分友好地呈現(xiàn)在機(jī)器面前。這種網(wǎng)絡(luò)服務(wù)的實(shí)現(xiàn)將需要cookie操作以達(dá)到真正的網(wǎng)站交互。
● 網(wǎng)絡(luò)瀏覽:基于網(wǎng)絡(luò)瀏覽的Java將需要cookie操作模塊以支持狀態(tài)管理。
為了執(zhí)行客戶端cookie操作,先看下面幾個(gè)步驟:
● 檢索cookies:
1. 從收到的HTTP頭提取cookies。
2. 分別解析cookies的組成部分(名稱,值,路徑等等)。
3. 判定主機(jī)是否允許設(shè)置這些cookies。
● 發(fā)送cookies:
1. 判定哪些cookies能被發(fā)送給主機(jī)。
2. 對(duì)于多個(gè)cookies,判定必須發(fā)送的cookies的順序。
3. 與外發(fā)的HTTP頭一起格式并發(fā)送cookies。
一個(gè)客戶端Java應(yīng)用程序須遵循上面的所有步驟,但是用RFC2965列出的規(guī)范執(zhí)行上述步驟將消耗大量的時(shí)間并分散開(kāi)發(fā)者在核心程序上的注意力。結(jié)果,開(kāi)發(fā)者經(jīng)常選擇向規(guī)范妥協(xié)而用很容易就被破壞的隨意編寫的cookie操作代碼結(jié)束。
例如,假設(shè)你想要寫一個(gè)與網(wǎng)絡(luò)商店應(yīng)用程序的servlet交互的Java客戶應(yīng)用程序,在服務(wù)器端,當(dāng)servlet第一次通過(guò)調(diào)用request.getsession()為一個(gè)會(huì)話詢問(wèn)servlet容器時(shí),容器創(chuàng)建一個(gè)新的會(huì)話并且服務(wù)器用一個(gè)會(huì)話ID在并發(fā)請(qǐng)求時(shí)檢索會(huì)話對(duì)象,服務(wù)器自動(dòng)將這個(gè)會(huì)話ID作為一個(gè)HTTP cookie發(fā)送到客戶端。在并發(fā)請(qǐng)求時(shí),客戶端與請(qǐng)求一起回送同一個(gè)會(huì)話ID。服務(wù)器用ID區(qū)別正確的會(huì)話對(duì)象以便servlet處理請(qǐng)求。典型的客戶端代碼如下:


/* 取得cookie.*/
...
HttpURLConnection hUC= (HttpURLConnection) url.openConnection();
...
InputStream is = huc.getInputStream();
// 從響應(yīng)中檢索會(huì)話ID.
String cookieVal = hc.getHeaderField("Set-Cookie");
String sessionId;
if(cookieVal != null)
{
sessionId = cookieVal.substring(0, cookieVal.indexOf(";"));
}
...
/* 發(fā)送cookie. */
HttpURLConnection huc= (HttpURLConnection) url.openConnection();
if(sessionId != null)
{
huc.setRequest}
InputStream is = huc.getInputStream();
...



cookie規(guī)范RFC2965為cookies版本1定義了一個(gè)新報(bào)頭,Set-Cookie2。假如我們用新報(bào)頭升級(jí)服務(wù)器,上面的代碼將不能履行。上述代碼也不能處理多重cookies。另外,版本1的cookie值可以是一個(gè)加引號(hào)的字符串,假如會(huì)話cookie的值是一個(gè)包含分號(hào)的加引號(hào)字符串,這也將引起上述代碼不能履行。簡(jiǎn)而言之,上面的代碼片斷不是與cookie的版本使用孤立開(kāi)來(lái)的。
上述代碼對(duì)于只和一個(gè)特別的主機(jī)及路徑影射交互的簡(jiǎn)單程序是適合的,但對(duì)于一個(gè)更龐大的應(yīng)用程序,當(dāng)涉及多重主機(jī)及路徑時(shí)cookie管理將變得更復(fù)雜。開(kāi)發(fā)者實(shí)現(xiàn)cookie規(guī)范中的所有算法、安全檢查及平衡將證明是痛苦和徒然的。
進(jìn)入jCookie
為了減輕這種情形,我開(kāi)發(fā)了一個(gè)普通用途cookie庫(kù),命名為jCookie,用來(lái)實(shí)現(xiàn)cookie規(guī)范。這個(gè)庫(kù)使客戶端cookie操作所必需的額外代碼和努力最小化并讓開(kāi)發(fā)者的精力集中在核心應(yīng)用程序上。其他APIs庫(kù)也有(例如,Apache的HTTPClient),但是他們使用了從內(nèi)建本地的java.net APIs移出的結(jié)構(gòu),因此需要一個(gè)新的學(xué)習(xí)過(guò)程。我的API是一個(gè)調(diào)用已存在的java.net對(duì)象的簡(jiǎn)單方法。
你也能使用現(xiàn)在發(fā)展的jCookie延伸版本,叫jCookieMicro,在J2ME移動(dòng)設(shè)備上創(chuàng)建一套令人激動(dòng)的能與網(wǎng)絡(luò)服務(wù)應(yīng)用程序交互的客戶系統(tǒng)。
現(xiàn)在我介紹jCookie API的主要行為,先從兩個(gè)主要數(shù)據(jù)結(jié)構(gòu)開(kāi)始:
1. Cookie類:此類的一個(gè)實(shí)例表明一個(gè)獨(dú)立的cookie。它封裝了RFC 2965定義的所有cookie屬性并提供用getters和setters訪問(wèn)這些屬性。
2. CookieJar類:此類的一個(gè)實(shí)例被作為一個(gè)Cookie對(duì)象集的容器。它符合集合結(jié)構(gòu)并提供操作cookie集合的方法。
API提供兩個(gè)視野以同時(shí)滿足開(kāi)發(fā)者對(duì)于cookie透明操作的要求及開(kāi)發(fā)者對(duì)于高級(jí)特性的要求。下面的圖形說(shuō)明了這些視野或?qū)印?

Java中的cookie管理方案(2)-與J2ME結(jié)合



jCookie庫(kù)的分層視圖

(出處:http://m.survivalescaperooms.com)



發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 仁怀市| 孙吴县| 芦山县| 郁南县| 新干县| 峨眉山市| 建宁县| 沙田区| 隆德县| 龙山县| 永寿县| 西乌珠穆沁旗| 西和县| 丰都县| 谢通门县| 太湖县| 思茅市| 青龙| 台前县| 贺州市| 汉中市| 德庆县| 萝北县| 绩溪县| 贵南县| 泌阳县| 太和县| 沁源县| 南昌市| 钟祥市| 滨海县| 新兴县| 乐都县| 张家港市| 遂平县| 武夷山市| 汉沽区| 天津市| 达州市| 武强县| 连平县|