cookie的基礎以及小案例
1.會話技術
用戶打開一個瀏覽器訪問頁面,訪問網站的很多頁面,訪問完成後將瀏覽器關閉的過程稱為是一次會話
cookie:將數據保存到客戶端瀏覽器
session:將數據保存到服務器端
向瀏覽器保存數據:
response.addCookie(Cookie cookie)
獲取瀏覽器帶過來的數據:
request.getCookies();
創建cookie對象:
cookie(String name,String value);
2.JSP的簡單概述
jsp:java代碼+html的元素+jsp內置的東西
jsp的執行過程:
jsp會被翻譯成servlet,編譯成class進行執行
jsp的腳本元素:
<%! %>:翻譯成類中的成員部分,定義變量,定義方法,定義類,Servlet是線程不安全的,盡量少在類中定義成員變量
<% %>:翻譯成類的service方法內部的內容,定義變量,定義類,直接寫代碼塊
<%= %>:翻譯成service方法內部的out.print();
3.記錄用戶的上次登錄訪問時間
public class ServletDemo1 extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //獲取當前時間 String time = new Date().toLocaleString();//獲得所有cookie Cookie[] cookies = request.getCookies(); //遍歷cookies判斷有沒有記錄登錄時間的cookie if(cookies != null) { for (Cookie cookie : cookies) { //如果匹配到保存時間的cookie,用戶不是第一次訪問 if(cookie.getName().equals("visitTime")) { String visitTime= cookie.getValue(); response.getWriter().write("歡迎回來,上次訪問的時間是:"+cookie.getValue()); } } }else { response.getWriter().write("歡迎訪問本網站!"); } //創建cookie對象保存 Cookie c = new Cookie("visitTime", time); //發送cookie response.addCookie(c); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
4.cookie常用的api
getName();獲得名字
getValue();獲得對應的值
setDomain(String domain);設置cookie的有效域名
setPath(String path);設置cookie的有效路徑
setMaxAge(int maxAge);設置cookie的有效時間
5.cookie的分類
會話級別的cookie:默認的cookie,關閉瀏覽器cookie就會銷毀
持久級別的cookie:可以設置cookie的有效時間,那麽關閉瀏覽器cookie還會存在,手動銷毀持久性Cookie.setMaxAge(0);
6.商品的瀏覽歷史記錄
步驟:
點擊某個商品,將商品ID傳遞給一個Servlet
在Servlet中判斷是否是第一次瀏覽商品
如果是第一次:將商品ID存入到cookie中
如果不是,判斷商品是否被瀏覽過,如果瀏覽過,就 刪除對應的cookie,添加到首尾,沒有就判斷是否達到瀏覽商品顯示的最大值,
如果沒有就直接添加到第一個,如果達到了就刪除最後一個,再添加都首位
public class ServletDemo2 extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //接收用戶點擊商品傳遞過來的id String id = request.getParameter("id"); //獲得所有的cookie信息 Cookie[] cookies = request.getCookies(); //判斷有沒有瀏覽過這個商品 Cookie cookie = CookieUtils.findCookie(cookies,id); //用戶是第一次瀏覽 if(cookie == null) { //創建cookie對象 Cookie c = new Cookie("history", id); //設置一個小時的銷毀 cookie.setMaxAge(60*60); //發送cookie response.addCookie(c); //用戶不是第一次瀏覽 }else { //得打cookie的值 String value = cookie.getValue(); //切掉在拼接cookie時的,號 String[] ids = value.split(","); //將數組轉換成集合 List<String> aslist = Arrays.asList(ids); //將list轉換成linkedlist LinkedList<String> list = new LinkedList<>(aslist); //如果用戶之前瀏覽過這個商品 if(list.contains(id)) { //刪除對應的 list.remove(id); list.addFirst(id); //沒有瀏覽過 }else { //判斷是否達到最大值 if(list.size() < 3) { //直接添加到第一個 list.addFirst(id); //達到最大值 }else { //刪除最後一個 list.removeLast(); list.addFirst(id); } } //創建拼接的StringBuffer StringBuffer sb = new StringBuffer(); for(String s:list) { sb.append(s).append(","); } //去掉最後一個,號 String idValue = sb.toString().substring(0,sb.length()-1); //保存到cookie中 Cookie c = new Cookie("history", idValue); //發送 response.addCookie(c); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } class CookieUtils { public static Cookie findCookie(Cookie[] cookies,String name){ if(cookies == null){ return null; }else{ for(Cookie cookie:cookies){ if(name.equals(cookie.getName())){ return cookie; } } return null; } } }
7.清空瀏覽歷史記錄
點擊清空瀏覽歷史記錄的超鏈接,
跳轉到servlet
得到指定保存瀏覽歷史記錄的cookie,
設置保存時間為0
重定向到商品顯示頁面
public class Demo3Servlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //獲得所有的cookie Cookie[] cookies = request.getCookies(); //遍歷cookies,拿到保存瀏覽歷史記錄的cookie for (Cookie cookie : cookies) { if(cookie.getName().equals("history")) { //設置保存時間為0 cookie.setMaxAge(0); } } //重定向 response.sendRedirect(request.getContextPath()+"/list.jsp"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
cookie的基礎以及小案例