您好,登錄后才能下訂單哦!
這篇文章主要介紹了Jsp中的Cookies有什么用,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
一、Cookie是通過HttpServletResponse的addCookie方法加入到Set-Cookie應(yīng)答頭中的
例如:
Cookie userCookie = new Cookie("user", "admin"); response.addCookie(userCookie);
和設(shè)置有關(guān)系的還有以下兩個重要方法
1.setMaxAge
設(shè)置Cookie過期之前的時(shí)間,以秒計(jì)。如果不設(shè)置該值,則Cookie只在當(dāng)前會話內(nèi)有效,而且這些Cookie不會保存到磁盤上。
注意:刪除cookie就是通過該方法實(shí)現(xiàn)的。將要刪除的cookie的過期之前的時(shí)間指定為0就可以達(dá)到刪除該cookie的目的。
2.setPath
設(shè)置Cookie適用的路徑。如果不指定路徑,Cookie將返回給當(dāng)前頁面(jsp(SUN企業(yè)級應(yīng)用的***)頁面或者Servlet的映射)所在目錄及其子目錄下的所有頁面。
注意:
A:所有的cookie都是有路徑的
B:該方法設(shè)置的路徑為客戶端路徑,即“/”代表服務(wù)器根目錄,而不是WEB應(yīng)用根目錄
C:該方法設(shè)置路徑時(shí),“/myWeb/”與“/myWeb”是不同的,要特別注意;前者可以關(guān)聯(lián)到服務(wù)器的myWeb目錄下,而后者則不可以。
D:該方法設(shè)置路徑時(shí),沒有相對目錄可言,即不論在哪個目錄下設(shè)置setPath(“/myWeb/”),該cookie都將關(guān)聯(lián)到服務(wù)器的myWeb目錄下(setPath(“/myWeb”)則不可以),而不是當(dāng)前目錄的myWeb的子目錄下;同樣,設(shè)置setPath(“myWeb/”)和setPath(“myWeb”)也不能關(guān)聯(lián)到當(dāng)前目錄的myWeb的子目錄下。
這里有個奇怪的例子,就是在一個web應(yīng)用下設(shè)置的cookie可以在另一個web應(yīng)用下獲得(兩個web應(yīng)用在同一個服務(wù)器下)
目錄結(jié)構(gòu):在服務(wù)器根目錄上有web1和web2兩個目錄,在web1下有setcookie.jsp(SUN企業(yè)級應(yīng)用的***)和getcookie.jsp(SUN企業(yè)級應(yīng)用的***)、在web2下有g(shù)etcookie.jsp(SUN企業(yè)級應(yīng)用的***)
web1下的setcookie.jsp(SUN企業(yè)級應(yīng)用的***)
<% Cookie userCookie = new Cookie("user", "admin"); userCookie.setMaxAge(24*60*60); userCookie.setPath("/web2/"); response.addCookie(userCookie); %>
web1下的getcookie.jsp(SUN企業(yè)級應(yīng)用的***)
<% Cookie[] cookie = request.getCookies(); String user = new String(); if ( cookie != null ) { for (int i = 0; i < cookie.length; i++) { Cookie myCookie = cookie[i]; if (myCookie.getName().equals("user")) { user = myCookie.getValue(); } } } out.println("user = " + user); %> web2下的getcookie.jsp(SUN企業(yè)級應(yīng)用的***) <% Cookie[] cookie = request.getCookies(); String user = new String(); if ( cookie != null ) { for (int i = 0; i < cookie.length; i++) { Cookie myCookie = cookie[i]; if (myCookie.getName().equals("user")) { user = myCookie.getValue(); } } } out.println("user = " + user); %>
先訪問web1下的setcookie.jsp(SUN企業(yè)級應(yīng)用的***),然后分別訪問web1和web2下面的getcookie.jsp(SUN企業(yè)級應(yīng)用的***)文件,你會發(fā)現(xiàn)奇怪的現(xiàn)象,web1下的getcookie.jsp(SUN企業(yè)級應(yīng)用的***)中user為空而web2下的getcookie.jsp(SUN企業(yè)級應(yīng)用的***)中user卻有值,這就實(shí)現(xiàn)了從一個web應(yīng)用下設(shè)置的cookie在另一個web應(yīng)用下獲得。
大多數(shù)人刪除cookie不成功都是因?yàn)槟夸浽?。一個典型的原因是在某一個目錄中設(shè)置了cookie(沒有調(diào)用setPath方法)卻在另一個目錄中刪除該cookie(其實(shí)是調(diào)用setMaxAge方法)
3、跨域共享cookie的方法:設(shè)置
cookie.setDomain(".jszx.com");
A機(jī)所在的域:home.langchao.com,A有應(yīng)用cas
B機(jī)所在的域:jszx.com,B有應(yīng)用webapp_b
1)在cas下面設(shè)置cookie的時(shí)候,增加cookie.setDomain(".jszx.com");,這樣在webapp_b下面就可以取到cookie。
2)這個參數(shù)必須以“.”開始。
3)輸入url訪問webapp_b的時(shí)候,必須輸入域名才能解析。比如說在A機(jī)器輸入:http://lc-bsp.jszx.com:8080/webapp_b,可以獲取cas在客戶端設(shè)置的cookie,而B機(jī)器訪問本機(jī)的應(yīng)用,輸入:http://localhost:8080/webapp_b則不可以獲得cookie。
4)設(shè)置了cookie.setDomain(".jszx.com");,還可以在默認(rèn)的home.langchao.com下面共享。
二、讀取
從客戶端讀取Cookie時(shí)調(diào)用的是HttpServletRequest的getCookies方法。該方法返回一個與HTTP請求頭中的內(nèi)容對應(yīng)的Cookie對象數(shù)組。得到這個數(shù)組之后,一般是用循環(huán)訪問其中的各個元素,調(diào)用getName檢查各個Cookie的名字,直至找到目標(biāo)Cookie。然后對這個目標(biāo)Cookie調(diào)用getValue,根據(jù)獲得的結(jié)果進(jìn)行其他處理。
注意:若jsp(SUN企業(yè)級應(yīng)用的***)和Servlet所在目錄(Servlet為其映射目錄)的父目錄中有同名cookie,則request.getCookie()方法得到的Cookie數(shù)組中保存的是其父目錄中的cookie的信息;
三、說明
我們知道,對于一個頁面中的request和response,是一次http請求產(chǎn)生的,request是http請求中的所有參數(shù),因此包含了發(fā)出這次http請求時(shí)cookie的值,而response是對于這次http請求webapplication產(chǎn)生的反應(yīng),所以它可以寫cookie的值,這樣看來,request得到的cookie的值,和response要寫的cookie的值可以說是完全不同的。
簡單地說request得到的cookie的值是在這次http請求之前的cookie的值,而response要寫得值是這次http請求之后的cookie的值。所以,在同一個request和response中,如果response中增加了新的cookie,request中并不能得到。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Jsp中的Cookies有什么用”這篇文章對大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。