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);
???????? ?
????????? %>
明明listviewCookie是后面才創(chuàng)建的,但在前面就引用,這樣可以么,代碼執(zhí)行順序不是從上到下?還是因為先編譯完了,對象都加載完了,所以調(diào)用沒關(guān)系?不是很清楚。
2016-11-08
??? 當(dāng)你用瀏覽器請求某個服務(wù)器時,瀏覽器會將該服務(wù)器存放在本地的cookie(可能有,也可能沒有,這是你判斷cookies是否為null以及長度是否大于0的原因)放入請求中,而listviewCookie是一段字符串,是其中一個cookie名稱。如果你之前存放在本地的cookie中有叫這個名稱的cookie,那么就能取到這個cookie(就是你遍歷cookie中equals判斷的原因)。所以listviewCookie并不是后面才創(chuàng)建的,而是來自你瀏覽存放在本地的cookie中的,可能存在也可能不存在,如果存在的話,服務(wù)器收到瀏覽器的請求時,就會在這次請求對應(yīng)的request對象中創(chuàng)建此cookie(名稱為listviewCookie)。
??? 你后面的代碼:Cookie cookie = new Cookie("ListViewCookie",list);是創(chuàng)建了一個新的cookie對象,這個cookie名稱為ListViewCookie,值為list。將這個cookie對象放入response對象后,瀏覽器獲得服務(wù)器的響應(yīng)后,將從response中獲取這個cookie并將它存放在本地(如果之前有來自該服務(wù)器并且也叫這個名稱的cookie則會覆蓋之前的)。當(dāng)你再次訪問這個服務(wù)器的時候,就會將該服務(wù)器存放在本地的cookie放入請求中發(fā)送至服務(wù)器(這里就可以接到上一段開始了)。
??? 表達(dá)無力,不好意思。
2017-10-02
簡單點說 就是當(dāng)你第一次點擊商品的時候還沒有一個鍵值名為listviewcookie的cookie對象(這也是設(shè)計的核心所在,因為當(dāng)你在創(chuàng)建一個listviewcookie的cookie對象時它會覆蓋你之前的名為listviewcookie的cookie對象的值從而實現(xiàn)字符串追加的目的并將他保存在cookie中),所以會跳過判斷,執(zhí)行l(wèi)ist追加字符串后的語句