小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

response.encodeURL的用法 - 神雕大俠 - JavaEye技術(shù)網(wǎng)站

 ShangShujie 2010-04-16
文章分類:Java編程
Java Servlet API 中引用 Session 機(jī)制來(lái)追蹤客戶的狀態(tài)。Servlet API 中定義了 javax.servlet.http.HttpSession 接口,Servlet 容器必須實(shí)現(xiàn)這個(gè)接口。當(dāng)一個(gè) Session 開始時(shí),Servlet 容器將創(chuàng)建一個(gè) HttpSession 對(duì)象,Servlet 容器為 HttpSession 分配一個(gè)唯一標(biāo)識(shí)符,稱為 Session ID。Servlet 容器將 Session ID 作為 Cookie 保存在客戶的瀏覽器中。每次客戶發(fā)出 HTTP 請(qǐng)求時(shí),Servlet 容器可以從 HttpRequest 對(duì)象中讀取 Session ID,然后根據(jù) Session ID 找到相應(yīng)的 HttpSession 對(duì)象,從而獲取客戶的狀態(tài)信息。
    當(dāng)客戶端瀏覽器中禁止 Cookie,Servlet 容器無(wú)法從客戶端瀏覽器中取得作為 Cookie 的 Session ID,也就無(wú)法跟蹤客戶狀態(tài)。
    Java Servlet API 中提出了跟蹤 Session 的另一種機(jī)制,如果客戶端瀏覽器不支持 Cookie,Servlet 容器可以重寫客戶請(qǐng)求的 URL,把 Session ID 添加到 URL 信息中。
    HttpServletResponse 接口提供了重寫 URL 的方法:public java.lang.String encodeURL(java.lang.String url)
   該方法的實(shí)現(xiàn)機(jī)制為:
    ● 先判斷當(dāng)前的 Web 組件是否啟用 Session,如果沒(méi)有啟用 Session,直接返回參數(shù) url。
    ● 再判斷客戶端瀏覽器是否支持 Cookie,如果支持 Cookie,直接返回參數(shù) url;如果不支持 Cookie,就在參數(shù) url 中加入 Session ID 信息,然后返回修改后的 url。
    我們可以對(duì)網(wǎng)頁(yè)中的鏈接稍作修改,解決以上問(wèn)題:
    修改前:
        <a href=“maillogin.jsp“>
   修改后:
        <a href=“<%=response.encodeURL(“maillogin.jsp“)%>“>

Java 代碼
  1. //HTTP協(xié)議與狀態(tài)保持  
  2. HTTP 協(xié)議本身是無(wú)狀態(tài)的,這與HTTP協(xié)議本來(lái)的目的是相符的,客戶端只需要簡(jiǎn)單的向服務(wù)器請(qǐng)求下載某些文件,無(wú)論是客戶端還是服務(wù)器都沒(méi)有必要紀(jì)錄 彼此過(guò) 去的行為,每一次請(qǐng)求之間都是獨(dú)立的,好比一個(gè)顧客和一個(gè)自動(dòng)售貨機(jī)或者一個(gè)普通的(非會(huì)員制)大賣場(chǎng)之間的關(guān)系一樣。  
  3.   
  4. 然 而聰明(或者貪心?)的人們很快發(fā)現(xiàn)如果能夠提供一些按需生成的動(dòng)態(tài)信息會(huì)使web變得更加有用,就像給有線電視加上點(diǎn)播功能一樣。這種需求一方 面迫使 HTML逐步添加了表單、腳本、DOM等客戶端行為,另一方面在服務(wù)器端則出現(xiàn)了CGI規(guī)范以響應(yīng)客戶端的動(dòng)態(tài)請(qǐng)求,作為傳輸載體的HTTP協(xié)議也 添加 了文件上載、cookie這些特性。其中cookie的作用就是為了解決HTTP協(xié)議無(wú)狀態(tài)的缺陷所作出的努力。至于后來(lái)出現(xiàn)的session機(jī)制則 是 又一種在客戶端與服務(wù)器之間保持狀態(tài)的解決方案。  
  5.   
  6. 讓 我們用幾個(gè)例子來(lái)描述一下cookie和session機(jī)制之間的區(qū)別與聯(lián)系。筆者曾經(jīng)常去的一家咖啡店有喝5杯 咖啡免費(fèi)贈(zèng)一杯咖啡的優(yōu)惠,然而一次性消費(fèi)5杯咖啡的機(jī)會(huì)微乎其 微,這時(shí)就需要某種方式來(lái)紀(jì)錄某位顧客的消費(fèi)數(shù)量。想象一下其實(shí)也無(wú)外乎下面的幾種方案:  
  7. 1、該店的店員很厲害,能記住每位顧客的消費(fèi)數(shù)量,只要顧客一走進(jìn)咖啡店,店員就知道該怎么 對(duì)待了。這種做法就是協(xié)議本身支持狀態(tài)。  
  8. 2、 發(fā)給顧客一張卡片,上面記錄著消費(fèi)的數(shù)量,一般還有個(gè)有效期限。每次消費(fèi)時(shí),如果顧客出示這張卡片,則此次消費(fèi)就會(huì)與以前或以后的消費(fèi)相聯(lián)系起來(lái)。這種做 法就是在客戶端保持狀態(tài)。  
  9. 3、 發(fā)給顧客一張會(huì)員卡,除了卡號(hào)之外什么信息也不紀(jì)錄,每次消費(fèi)時(shí),如果顧客出示該卡片,則店員在店里的紀(jì)錄本上找到這個(gè)卡號(hào)對(duì)應(yīng)的紀(jì)錄添加一些消費(fèi)信息。 這種做法就是在服務(wù)器端保持狀態(tài)。  
  10.   
  11. 由 于HTTP協(xié)議是無(wú)狀態(tài)的,而出于種種考慮也不希望使之成為有狀態(tài)的,因此,后面兩種方案就成為現(xiàn)實(shí)的選擇。具體來(lái)說(shuō)cookie機(jī)制采用的是在 客戶端 保持狀態(tài)的方案,而session機(jī)制采用的是在服務(wù)器端保持狀態(tài)的方案。同時(shí)我們也看到,由于采用服務(wù)器端保持狀態(tài)的方案在客戶端也需要保存一個(gè) 標(biāo) 識(shí),所以session機(jī)制可能需要借助于cookie機(jī)制來(lái)達(dá)到保存標(biāo)識(shí)的目的,但實(shí)際上它還有其他選擇。  

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多