教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢/投訴熱線:400-618-4000

JAVA培訓(xùn)之Cookie的路徑和域

更新時(shí)間:2016年08月17日16時(shí)33分 來(lái)源:傳智播客JAVA培訓(xùn)學(xué)院 瀏覽次數(shù):

1.Cookie路徑介紹

我們知道Cookie的屬性有很多,其中有一個(gè)屬性是路徑。有些人認(rèn)為Cookie的路徑指的是Cookie在客戶端的保存路徑,其實(shí)并不是。
Cookie的路徑是在服務(wù)器創(chuàng)建Cookie時(shí)設(shè)置的,它的作用是決定瀏覽器訪問(wèn)服務(wù)器的某個(gè)資源時(shí),需要將瀏覽器端保存的那些Cookie歸還給服務(wù)器。如圖1-1所示:

圖1-1 cookie路徑
圖1-1中,瀏覽器端保存的Cookie有三個(gè),分別是Cookie1、Cookie2和Cookie3。它們?nèi)齻€(gè)的訪問(wèn)路徑分別為:“/Example/cookie“、”/Example/“、”Example1/cookie“。瀏覽器訪問(wèn)服務(wù)器端的路徑為:”http://localhost:8080/Example/cookie/a/index.jsp“。也就是說(shuō)index.jsp頁(yè)面的訪問(wèn)路徑為:”/Example/cookie/a/“,該路徑包含了Cookie1和Cookie2的路徑,因此在訪問(wèn)index.jsp時(shí),瀏覽器會(huì)將Cookie1和Cookie2發(fā)送給服務(wù)器。這就是Cookie的路徑的作用,其中涉及到訪問(wèn)路徑。
如果服務(wù)器創(chuàng)建Cookie時(shí)沒有設(shè)置路徑,那么該Cookie的路徑是當(dāng)前資源的訪問(wèn)路徑。例如:在index.jsp頁(yè)面中創(chuàng)建了一個(gè)Cookie,index.jsp頁(yè)面的訪問(wèn)路徑為“/Example/“,那么該Cookie的路徑就是”/Example/“。如果服務(wù)器創(chuàng)建Cookie時(shí)設(shè)置了路徑,那么Cookie的路徑就是設(shè)置的路徑,例如:cookie.setPath(“/Example/cookie”),那么該Cookie的路徑就是”/Example/cookie“。

2.Cookie路徑練習(xí)

通過(guò)上面對(duì)Cookie路徑的介紹,我們對(duì)它有了一定的了解,現(xiàn)在通過(guò)一個(gè)案例來(lái)驗(yàn)證以上結(jié)論。具體步驟如下:
(1)創(chuàng)建一個(gè)web應(yīng)用,Example20,在該應(yīng)用下的WebRoot目錄下新建一個(gè)目錄cookie,并在該目錄下新建一個(gè)jsp文件,名稱為one.jsp,主要代碼如例1-1所示:
例1-1 one.jsp
<body>
 <%
   Cookie cookie=new Cookie("one","hello");
   response.addCookie(cookie);
  %>
</body>
例1-1中,服務(wù)器創(chuàng)建cookie但是并沒有設(shè)置其路徑,那么該cookie的路徑應(yīng)為one.jsp的訪問(wèn)路徑。
(2)將Example20發(fā)布到服務(wù)器,然后啟動(dòng)服務(wù)器,在谷歌瀏覽器端地址欄上輸入:http://localhost:8080/Example20/cookie/one.jsp,然后查看cookie信息,如圖1-2所示:

圖1-2 cookie信息
由圖1-2可知,cookie的路徑是:“/Example20/cookie“,該路徑正是one.jsp頁(yè)面的訪問(wèn)路徑。
(3)在WebRoot目錄下的cookie目錄中新建一個(gè)jsp文件,名稱為two.jsp,主要代碼如例1-2所示:
例1-2 two.jsp
<body>
 <%
  Cookie[] cookies=request.getCookies();
  if(cookies!=null){
  for(Cookie c:cookies){
    out.print(c.getName()+"="+c.getValue()+"<br>");
  }
  }
  %>
</body>
(4)重新啟動(dòng)服務(wù)器,在瀏覽器端地址欄上輸入:http://localhost:8080/Example20/cookie/two.jsp,并使用瀏覽器的開發(fā)者工具,查看請(qǐng)求信息中的cookie,如圖1-3所示:

圖1-3 請(qǐng)求信息
由圖1-3可知,在訪問(wèn)two.jsp頁(yè)面時(shí),瀏覽器將名稱為one和JSESSIONID的cookie歸還給服務(wù)器。因?yàn)閠wo.jsp頁(yè)面的訪問(wèn)路徑也是“/Example20/cookie”。JSESSIONID能夠發(fā)送過(guò)來(lái)是因?yàn)樗穆窂绞?ldquo;/Example20/”,也包含在訪問(wèn)路徑中,因此被瀏覽器發(fā)送過(guò)來(lái)。
(5)在瀏覽器端訪問(wèn)Example20工程的index.jsp頁(yè)面,訪問(wèn)路徑為:http://localhost:8080/Example20,使用開發(fā)者工具查看請(qǐng)求信息,觀察名稱為one的cookie是否在請(qǐng)求信息中,如圖1-4所示:

圖1-4 請(qǐng)求信息
由圖1-4可知,訪問(wèn)index.jsp頁(yè)面時(shí),瀏覽器只將名稱為JSESSIONID的cookie發(fā)送給服務(wù)器,而名稱為one的cookie并沒有發(fā)送服務(wù)器,原因是index.jsp頁(yè)面的訪問(wèn)路徑是“/Example20/”,而one的訪問(wèn)路徑是“/Example20/cookie”,index.jsp頁(yè)面的訪問(wèn)路徑并不包含one的路徑。
需要注意的是,大家不要將包含的關(guān)系弄混淆了,是訪問(wèn)路徑包含cookie的路徑。例如,瀏覽器中保存如下幾個(gè)cookie,它們的路徑分別是:
aCookie.path=/Example20/;bCookie.path=/Example20/jsps/;cCookie.path=/Example20/jsps/cookie
  • 訪問(wèn)路徑是:http://localhost:8080/Example20/index.jsp
瀏覽器發(fā)送給服務(wù)器的cookie有:aCookie;
  • 訪問(wèn)路徑是:http://localhost:8080/Example20/jsps/a.jsp
瀏覽器發(fā)送給服務(wù)器的cookie有:aCookie,bCookie;
  • 訪問(wèn)路徑是:http://localhost:8080/Example20/jsps/cookie/b.jsp
瀏覽器發(fā)送給服務(wù)器的cookie有:aCookie,bCookie,cCookie。

3.Cookie的域

Cookie還有一個(gè)屬性就是域,Cookie類中有設(shè)置和獲取cookie域的方法,如下所示:
  • Void setDomain(String pattern):設(shè)置cookie的域;
  • String getDomain():獲取cookie的域,返回值的類型是String類型。
其中Domain單詞就有域名的意思。一般我們很少使用cookie的域,只有在多個(gè)二級(jí)域共享Cookie時(shí)才用。例如:www.baidu.com、zhidao.baidu.com、news.baidu.com、tieba.baidu.com這些域可以理解是百度的子項(xiàng)目,現(xiàn)在要在這些域中共享cookie,就需要使用cookie的域,使用時(shí)需要注意以下兩點(diǎn):
  • 設(shè)置domain為:setDomain(".baidu.com”);
  • 設(shè)置path為:setPath(“/”)。
我們?nèi)绻约涸O(shè)置Cookie的域,需要在電腦上配置虛擬主機(jī),下面大家按照以下的步驟操作,如下:
(1) 在C:\WINDOWS\system32\drivers\etc\hosts文件中添加如下內(nèi)容:
127.0.0.1       news.qdmmy6.com
127.0.0.1       tieba.qdmmy6.com
這兩個(gè)域名后面兩個(gè)單詞要一致,如:qdmmy6.com。
(2) 在Tomcat的安裝目錄下的/conf/server.xml文件中添加如下配置:
<Host name="news.qdmmy6.com"  appBase="news"
            unpackWARs="true" autoDeploy="true">
<Value className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
 <Host name="tieba.qdmmy6.com"  appBase="tieba"
            unpackWARs="true" autoDeploy="true">
<Value className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
(3)點(diǎn)擊此處下載 資源,將它們解壓后拷貝到Tomcat的安裝目錄下。
(4)啟動(dòng)Tomcat服務(wù)器,在瀏覽器端訪問(wèn):http://news.qdmmy6.com/SaveServlet.使用HttpWatch或者其他開發(fā)者工具查看請(qǐng)求響應(yīng)信息,觀察cookie的信息。
(5)在瀏覽器端訪問(wèn):http://tieba.qdmmy6.com/GetServle,使用HttpWatch或者其他開發(fā)者工具查看請(qǐng)求響應(yīng)信息,觀察cookie的信息。

本文版權(quán)歸傳智播客Java培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!
作者:傳智播客Java培訓(xùn)學(xué)院
首發(fā):http://oisangadgets.com/javaee
0 分享到:
和我們?cè)诰€交談!