JavaWeb開辟應用Cookie創立-獲得-耐久化、主動登錄、購物記載、感化途徑。本站提示廣大學習愛好者:(JavaWeb開辟應用Cookie創立-獲得-耐久化、主動登錄、購物記載、感化途徑)文章只能為提供參考,不一定能成為您想要的結果。以下是JavaWeb開辟應用Cookie創立-獲得-耐久化、主動登錄、購物記載、感化途徑正文
1、cookie是啥?順手百度了網友的說說
簡略的說,Cookie就是辦事器暫寄存在你盤算機上的一筆材料,好讓辦事器用來識別你的盤算機。當你在閱讀網站的時刻,Web辦事器會先送一小小材料放在你的盤算機上,當下次你再惠臨統一個網站,Web辦事器會先看看有無它前次留下的Cookie材料,有的話,就會根據Cookie裡的內容來斷定應用者,送出特定的網頁內容給你。
2、cookie在哪裡?
3、cookie可以刪除嗎?
4、cookie完成道理
第一次要求閱讀器,在閱讀器的cookie存儲區,沒有cookie,
第一次拜訪不帶Cookie,閱讀器經由過程Http要求新聞中增長Cookie要求頭將Cookie回傳給web辦事器,閱讀器會把Cookie的信息片段以”名/值”對(name-value pairs)的情勢貯存保留在當地,下次拜訪,web辦事器經由過程http呼應新聞中增長Set-Cookie呼應頭,將Cookie信息發送給閱讀器
我們經由過程現實來看下cookie吧
創立一個cookie.jsp,為了便於不雅察,設置session=”false”
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" session="false"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% //創立一個cookie Cookie cookie = new Cookie("name","wyf"); response.addCookie(cookie); %> </body> </html>
我們第一次拜訪cookie.jsp文件,在IE輸出
http://localhost:8080/day01/cookie.jsp
要求標頭中,可以看到初次拜訪是不攜帶cookie的
在呼應標頭中,經由過程Set-Cookie傳回,而且保留在閱讀器當地cookie存儲區
我們第二次拜訪cook.jsp文件,看看有無變更
要求標頭中,可以看到再次拜訪,是從閱讀器當地cookie存儲區,攜帶cookie的要求的
以下是呼應標頭:
我們用一個交互圖,來懂得下cookie機制:
我們來看下cookie的創立、獲得
cookie.jsp中代碼意思是:假如要求中,沒有cookie,就創立並前往,要求中帶cookie的話,就輸入cookie鍵值對(name-value)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" session="false"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% Cookie[] cookies = request.getCookies(); if(cookies !=null && cookies.length>0){ for(Cookie cookie : cookies){ out.print(cookie.getName()+":"+cookie.getValue()); } }else{ out.print("沒有cookie,正在創立,而且前往"); Cookie cookie = new Cookie("name","wyf"); response.addCookie(cookie); } %> </body> </html>
第一次拜訪
第二次拜訪
以上操作是我們須要從新封閉閱讀器,在停止調試為何呢?
由於默許情形下,cookie是一個會話級其余cookie,存儲在閱讀器的內核中,用戶加入閱讀器後被刪除,若願望閱讀器將該cookie存儲在磁盤上,則須要應用maxAge,單元為秒
我們來看下耐久化cookie
<% Cookie[] cookies = request.getCookies(); if(cookies !=null && cookies.length>0){ for(Cookie cookie : cookies){ out.print(cookie.getName()+":"+cookie.getValue()); } }else{ out.print("沒有cookie,正在創立,而且前往"); Cookie cookie = new Cookie("name","wyf"); cookie.setMaxAge(30); response.addCookie(cookie); } %>
cookie.setMaxAge(30);設置為30秒,這裡就不截圖了,說名下便可,第一次拜訪沒有cookie創立cookie,第二次拜訪輸入cookie鍵值對,封閉閱讀器,在30秒內拜訪,仍然提醒cookie鍵值對,而不是之前的提醒沒有cookie創立cookie
主動登錄
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <form action="success.jsp" method="post"> name:<input type="text" name="name"/> <input type="submit" value="sumit"/> </form> </body> </html>
success.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" session="false"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% //若可以獲得到參數name,則打印登錄信息,將信息存儲到cookie中,並設置cookei的時光 String name = request.getParameter("name"); if (name != null && !name.trim().equals("")) { Cookie cookie = new Cookie("nameCookie", name); cookie.setMaxAge(60); response.addCookie(cookie); } else { //假如沒有參數,可以用cookie登錄,從cookie中讀取用戶信息,假如存在則打印迎接信息 Cookie[] cookies = request.getCookies(); if (cookies != null && cookies.length > 0) { for (Cookie cookie : cookies) { String cookieName = cookie.getName(); if ("nameCookie".equals(cookieName)) { String val = cookie.getValue(); name = val; } } } } if (name != null && !name.trim().equals("")) { out.print("hello" + name); } else { //若沒有要求參數,也沒有cookie,則重定向到login.jsp response.sendRedirect("login.jsp"); } %> </body> </html>
第一次拜訪http://localhost:8080/day01/login.jsp輸出name參數值,提交,在success.jsp中,起首獲得提交過去的參數name值,假如不為null,那末就直接設置一個cookie,保留參數name值,然後頁面輸入name參數值,第二次拜訪直接輸出http://localhost:8080/day01/success.jsp,
因為此次麼有攜帶參數name值,我們只須要從cookie的value值中獲得值,然後顯示輸入便可
顯示比來的購物記載
books.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h4>Books Page</h4> <a href="book.jsp?book=JavaWeb">JavaWeb</a> <a href="book.jsp?book=Java">Java</a> <a href="book.jsp?book=Oracle">Oracle</a> <a href="book.jsp?book=Ajax">Ajax</a> <a href="book.jsp?book=JavaScript">JavaScript</a> <a href="book.jsp?book=Android">Android</a> <a href="book.jsp?book=Jbpm">Jbpm</a> <br><br> <% //獲得一切的Cookie Cookie[] cookies = request.getCookies(); //從挑選出的Book的Cookie,假如cookieName為ATGUIGU_BOOK_ 開首的即相符前提 if(cookies!=null&&cookies.length>0){ for(Cookie c:cookies){ String cookieName = c.getName(); if(cookieName.startsWith("Safly")){ //顯示cookieValue out.println(c.getValue()); out.print("<br>"); } } } %> </body> </html>
book.jsp
<%@page import="java.util.ArrayList"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> Book:<%= request.getParameter("book") %> <br><br> <a href="books.jsp">return</a> <% String book = request.getParameter("book"); //肯定要被刪除的Cookie Cookie[] cookies = request.getCookies(); //保留一切Safly 開首的Cookie ArrayList<Cookie> bookCookies = new ArrayList<Cookie>(); //用來保留和books.jsp 傳入的book婚配的誰人Cookie Cookie tempCookie = null; if(cookies!=null&&cookies.length>0){ for(Cookie c:cookies){ String cookieName = c.getName(); if(cookieName.startsWith("Safly")){ bookCookies.add(c); //選購5個以後,在選5個中的一個 if(c.getValue().equals(book)){ out.print("c.getValue().equals(book)"); tempCookie = c; } } } } //選購5個選除這5本之外的一本 if(bookCookies.size() >= 5&&tempCookie == null){ tempCookie = bookCookies.get(0); // out.print("tempCookie == null"); } //若在個中則刪除bookCookie自己,將列表的反復cookie刪失落,而且將其回傳 if(tempCookie != null){ tempCookie.setMaxAge(0); response.addCookie(tempCookie); } //把從books.jsp傳入的book作為一個Cook前往 Cookie cook = new Cookie("Safly"+book,book); response.addCookie(cook); %> </body> </html>
說一下邏輯關系:
在Books.jsp中以下是書本的列表,
JavaWeb
Java
Oracle
Ajax
JavaScript
Android
Jbpm
我隨意選擇一個鏈接(好比JavaWeb),去跳轉到book.jsp,第一次拜訪是沒有帶Cookie的,所以會挪用book.jsp以下的辦法,創立了一個cookie,在book.jsp頁面中,點擊return前往到books.jsp就掏出cooks.jsp帶過去的cookieValue,然後展示選中的書本列表便可
Cookie cook = new Cookie("Safly"+book,book); response.addCookie(cook);
此刻曾經回到books.jsp中,曾經選擇了JavaWeb一本書,我們在選擇一本(假設Java),然後跳轉到books.jsp,此刻我們會帶著1個cookie(就是第一次選中JavaWeb拜訪books.jsp時刻,給我傳過去的),這個cookie的鍵值就是SaflyJavaWeb–JavaWeb,然則呢?選中第二本書Java是沒有帶cookie的(沒有SaflyJava–Java)
然後就進入到cooks.jsp中
if(cookieName.startsWith("Safly")){ bookCookies.add(c);}
所以也就將SaflyJavaWeb–JavaWeb放入到一bookCookies中(寄存選中的書本列表)然後呢,誰人SaflyJava–Java就會創立,在點擊renturn時刻,反給cookies.jsp
。。。。第3、4、5次選擇書時,是一樣的進程
假如等books.jsp當選擇了5本書時刻,在選擇這5本書中的某一本時刻,怎樣處置呢?
c.getValue().equals(book)來獲得選中的那本書,我們須要將此cookie刪除然後,重新添加出去然後回傳給cookies.jsp代碼以下:
tempCookie.setMaxAge(0); response.addCookie(tempCookie);
假如等books.jsp當選擇了5本書時刻,在選擇非此5本書的第6本書,怎樣處置呢?
我們就tempCookie = bookCookies.get(0); 掏出來那5本書的第一本,然後tempCookie.setMaxAge(0);刪除調第一本的cookie,然後將第6本書,創立cookie回傳給cookies.jsp便可
以下是部門截圖:
cookie的感化途徑
cookie2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% String cookieValue = null; Cookie [] cookies = request.getCookies(); if(cookies!=null&& cookies.length>0){ for(Cookie cookie:cookies){ if("cookiePath".equals(cookie.getName())){ cookieValue = cookie.getValue(); } } } if(cookieValue != null){ out.print(cookieValue); }else{ out.print("沒有指定的cookie"); } %> </body> </html>
writerCookie.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% //可以感化以後目次,和以後目次的子目次,但不克不及感化於以後目次的上一級目次 //可以經由過程setPath設置cookie的感化規模,/代表站點的根目次 Cookie cookie = new Cookie("cookiePath","CookiePathValue"); cookie.setPath(request.getContextPath()); response.addCookie(cookie); %> <a href="../cookie2.jsp">to cookie2.jsp</a> </body> </html>
to cookie2.jsp就是拜訪writerCookie.jsp下級目次的cookie2.jsp
以上所述是小編給年夜家引見的JavaWeb開辟應用Cookie創立-獲得-耐久化、主動登錄、購物記載、感化途徑,願望對年夜家有所贊助,假如年夜家有任何疑問請給我留言,小編會實時答復年夜家的。在此也異常感激年夜家對網站的支撐!