亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

請教下Cookie問題。

???String?list?="";
??????????????//從客戶端獲得Cookies集合
??????????????Cookie[]?cookies?=?request.getCookies();
??????????????//遍歷這個Cookies集合
??????????????if(cookies!=null&&cookies.length>0)
??????????????{
	??????????????for(Cookie?c:cookies)
	??????????????{
	??????????????????if(c.getName().equals("ListViewCookie"))
	??????????????????{
	?????????????????????list?=?c.getValue();
	??????????????????}
	??????????????}
	??????????}
??????????????
??????????????list+=request.getParameter("id")+",";
??????????????//如果瀏覽記錄超過1000條,清零.
??????????????String[]?arr?=?list.split(",");
??????????????if(arr!=null&&arr.length>0)
??????????????{
??????????????????if(arr.length>=1000)
??????????????????{
??????????????????????list="";
??????????????????}
??????????????}
??????????????Cookie?cookie?=?new?Cookie("ListViewCookie",list);
??????????????response.addCookie(cookie);
if(cookies!=null&&cookies.length>0)
??????????????{
	??????????????for(Cookie?c:cookies)
	??????????????{
	??????????????????if(c.getName().equals("ListViewCookie"))
	??????????????????{
	?????????????????????list?=?c.getValue();
	??????????????????}
	??????????????}
	??????????}
??????????????
??????????????list+=request.getParameter("id")+",";

這段代碼不太懂,c.getName().equals("ListViewCookie")中的“ListViewCookie”在第一次開始遍歷的時候是不存在的對嗎?因為在最后才創建了

?Cookie?cookie?=?new?Cookie("ListViewCookie",list);

這個cookie對象。如果我第一次點擊了id為1的商品

也就是說第一次遍歷的時候 list=“1,”。

等到如果我第二次我點擊了id為2的時候

list=“1,沃特籃球鞋,2”;

是醬紫嗎?

正在回答

6 回答

我建議你實在理不清就這樣理解。?

假設代碼是這樣執行的:

--------------------------------第一次執行-------------------------------------------------------

String?list?="";

list+=request.getParameter("id")+","; ? //這里相當于就是獲取商品的id值并添加到字符串中

??????????????//如果瀏覽記錄超過1000條,清零.

??????????????String[]?arr?=?list.split(","); ? ??

??????????????if(arr!=null&&arr.length>0)

??????????????{

??????????????????if(arr.length>=1000)?

??????????????????{

??????????????????????list="";

??????????????????}

??????????????}

?//設置一個cookie,名為ListView,值為list?(而這里的list就是上面的request.getParameter("id")即商品的id)

??????????????Cookie?cookie?=?new?Cookie("ListViewCookie",list);

??????????????response.addCookie(cookie);


--------------------------------第二次執行-------------------------------------------------------

?//從客戶端獲得Cookies集合

??????????????Cookie[]?cookies?=?request.getCookies();

??????????????//遍歷這個Cookies集合

??????????????if(cookies!=null&&cookies.length>0)

??????????????{

??????????????????for(Cookie?c:cookies)

??????????????????{

????????????????//匹配是否有名為ListViewCookie的cookie

? ? ? ? ? ? ? ? if(c.getName().equals("ListViewCookie"))?

??????????????????????{

?????????????????????????list?=?c.getValue(); ?//匹配到后獲取cookie的值,覆蓋原來的字符串。

??????????????????????}

??????????????????}

??????????????}

所以有可能你最后獲得的list就是“2,5,6,10,12,”只是商品的id而已,沒有商品的名稱...只用id即可確定某條具體信息。

1 回復 有任何疑惑可以回復我~
#1

慕田峪7021683 提問者

好吧,可能是我蠢,有點懂。但是很謝謝你。要是其他人跟我有同樣疑問的,說不定懂了,那我就采納你的答案了。
2016-11-23 回復 有任何疑惑可以回復我~
#2

Airly 回復 慕田峪7021683 提問者

剛開始都有個過程,愛鉆牛角尖,我也是這樣,或許可以多看幾遍視頻就懂啦,加油。
2016-11-23 回復 有任何疑惑可以回復我~

我始終覺得你是以為代碼始終就是從上到下執行,原本這是代碼的執行方式沒錯,但是第一段代碼并沒有滿足條件,所以會直接執行第2段,而下一次執行才會執行第1段,然后第2段

0 回復 有任何疑惑可以回復我~
#1

慕田峪7021683 提問者

我懂,就是第一次不執行第一段代碼。 那第二次呢,會執行第一段的代碼對吧。那value中的值不應該有中文吧list=c.getValue() 不應該是list="1,安踏運動鞋2," 應該是list="1,2,"
2016-11-23 回復 有任何疑惑可以回復我~
#2

Airly 回復 慕田峪7021683 提問者

唉,你為啥老是要把商品的名稱帶進去,不需要商品的名稱,只要商品的id就可以了。
2016-11-23 回復 有任何疑惑可以回復我~
#3

慕田峪7021683 提問者 回復 Airly

那list=c.getValue(); 這段代碼 獲得的值是存儲什么到list中去
2016-11-23 回復 有任何疑惑可以回復我~
#4

Airly 回復 慕田峪7021683 提問者

獲得的值是:由很多個商品id+","組成的拼接字符串。 這里相當于獲取最新的list覆蓋原來的list,所以可以理解為c.getValue()就是list
2016-11-23 回復 有任何疑惑可以回復我~
查看1條回復

cookie本身是有生命周期的,即有個過期時間。

下面這段代碼的用途是來判斷是否有匹配的cookie,如果有,執行這行代碼? ?list?=?c.getValue();

?Cookie[]?cookies?=?request.getCookies();

??????????????//遍歷這個Cookies集合

??????????????if(cookies!=null&&cookies.length>0)

??????????????{

??????????????????for(Cookie?c:cookies)

??????????????????{

??????????????????????if(c.getName().equals("ListViewCookie"))

??????????????????????{

?????????????????????????list?=?c.getValue();

??????????????????????}

??????????????????}

??????????????}

如果沒有,則上面這段代碼將不被執行,直接執行下面這段代碼

?list+=request.getParameter("id")+",";

??????????????//如果瀏覽記錄超過1000條,清零.

??????????????String[]?arr?=?list.split(",");

??????????????if(arr!=null&&arr.length>0)

??????????????{

??????????????????if(arr.length>=1000)

??????????????????{

??????????????????????list="";

??????????????????}

??????????????}

??????????????Cookie?cookie?=?new?Cookie("ListViewCookie",list);

??????????????response.addCookie(cookie);


實際上項目第一次被執行的時候是先執行的第2段代碼,然后第二次才是執行的第1段代碼

---------------------------------------------------------------------------------------------------

至于cookie里面存的值:

舉個例子,當我點擊的id為1的商品,?則list=“1,”;

????????????????????????點擊id為2的商品,則list ="1,2,";

因為?list+=request.getParameter("id")+","; 等同于 list = list +?request.getParameter("id")+","

即重新覆蓋原來字符串的意思。


0 回復 有任何疑惑可以回復我~
#1

慕田峪7021683 提問者

那可以請問下list = c.getValue();這條語句是保存什么到list當中。
2016-11-23 回復 有任何疑惑可以回復我~
#2

Airly 回復 慕田峪7021683 提問者

String list =""; list = c.getValue(); 這樣不是保存到了list中?
2016-11-23 回復 有任何疑惑可以回復我~
#3

Airly 回復 Airly

cookie是鍵值對保存的對吧。 c.getName().equals("ListViewCookie"),這里的c.getName()就是鍵值對的名 而 list = c.getValue();這里的c.getValue()就是鍵值對的值啊。
2016-11-23 回復 有任何疑惑可以回復我~
#4

Airly 回復 Airly

鍵值對的名及值就是這句代碼體現的。 Cookie cookie = new Cookie("ListViewCookie",list); cookie的名是ListViewCookie,值是list
2016-11-23 回復 有任何疑惑可以回復我~
#5

Airly 回復 慕田峪7021683 提問者

不是的。 cookie的名是ListViewCookie,值是list
2016-11-23 回復 有任何疑惑可以回復我~
#6

Airly 回復 Airly

而這里的list就是商品的id而已。舉例,這里的list值可能是String list = "2,3,4,5,6,";
2016-11-23 回復 有任何疑惑可以回復我~
查看4條回復

Cookie[]?cookies?=?request.getCookies();

??????????????//遍歷這個Cookies集合

??????????????if(cookies!=null&&cookies.length>0)

??????????????{

??????????????????for(Cookie?c:cookies)

??????????????????{

??????????????????????if(c.getName().equals("ListViewCookie"))

??????????????????????{

?????????????????????????list?=?c.getValue();

??????????????????????}

??????????????????}

??????????????}else{

????????????????????Cookie?cookie?=?new?Cookie("ListViewCookie",list);

?? ?? ??????????????response.addCookie(cookie);

???????????????? }


0 回復 有任何疑惑可以回復我~
#1

慕田峪7021683 提問者

可是老師就是這么寫的耶,而且我運行了也沒錯。。 你這個我運行試試看。 你這么寫的話,只能保存3條記錄。 好神奇
2016-11-22 回復 有任何疑惑可以回復我~
#2

aaaaaaaaten

你這么寫的話,每次訪問都要新建cookie,有些是重復的
2016-11-23 回復 有任何疑惑可以回復我~

c.getName().equals("ListViewCookie"),這段代碼是查找ListViewCookie,前面有條件?if(cookies!=null&&cookies.length>0),

Cookie?cookie?=?new?Cookie("ListViewCookie",list); response.addCookie(cookie);

這段代碼應該放在前面if語句接else里面。

代碼錯了


1 回復 有任何疑惑可以回復我~

不對,第二次的話應該是list="1,沃特籃球鞋2,"。

也就是說正確的話應該到第二次的時候list="沃特籃球鞋1,安踏運動鞋2"

但還是不懂。

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
JAVA遇見HTML——JSP篇
  • 參與學習       248277    人
  • 解答問題       3215    個

Java Web入門級教程JSP,帶你輕松的學習JSP基礎知識

進入課程

請教下Cookie問題。

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號