response.encodeURL的用法

 

Java Servlet API 中引用 Session 機制來追蹤客戶的狀態。Servlet API 中定義了 javax.servlet.http.HttpSession 接口,Servlet 容器必須實現這個接口。當一個 Session 開始時,Servlet 容器將建立一個 HttpSession 對象,Servlet 容器爲 HttpSession 分配一個惟一標識符,稱爲 Session ID。Servlet 容器將 Session ID 做爲 Cookie 保存在客戶的瀏覽器中。每次客戶發出 HTTP 請求時,Servlet 容器能夠從 HttpRequest 對象中讀取 Session ID,而後根據 Session ID 找到相應的 HttpSession 對象,從而獲取客戶的狀態信息。 
    當客戶端瀏覽器中禁止 Cookie,Servlet 容器沒法從客戶端瀏覽器中取得做爲 Cookie 的 Session ID,也就沒法跟蹤客戶狀態。 
    Java Servlet API 中提出了跟蹤 Session 的另外一種機制,若是客戶端瀏覽器不支持 Cookie,Servlet 容器能夠重寫客戶請求的 URL,把 Session ID 添加到 URL 信息中。 
    HttpServletResponse 接口提供了重寫 URL 的方法:public java.lang.String encodeURL(java.lang.String url) 
   該方法的實現機制爲: 
    ● 先判斷當前的 Web 組件是否啓用 Session,若是沒有啓用 Session,直接返回參數 url。 
    ● 再判斷客戶端瀏覽器是否支持 Cookie,若是支持 Cookie,直接返回參數 url;若是不支持 Cookie,就在參數 url 中加入 Session ID 信息,而後返回修改後的 url。 
    咱們能夠對網頁中的連接稍做修改,解決以上問題: 
    修改前: 
        <a href=「maillogin.jsp「> 
   修改後: 
        <a href=「<%=response.encodeURL(「maillogin.jsp「)%>「> java

 

HTTP協議自己是無狀態的,這與HTTP協議原本的目的是相符的,客戶端只須要簡單的向服務器請求下載某些文件,不管是客戶端仍是服務器都沒有必要紀錄 彼此過去的行爲,每一次請求之間都是獨立的,比如一個顧客和一個自動售貨機或者一個普通的(非會員制)大賣場之間的關係同樣。瀏覽器

用response.sendRedirect(response.encodeURL(ABC))的好處就是他能將用戶的session追加到網址的末尾,也就是可以保證用戶在不一樣的頁面時的session對象是一致的. 
這樣作的目的是防止某些瀏覽器不支持或禁用了COOKIE致使session跟蹤失敗 
服務器

相關文章
相關標籤/搜索