传智播客---用cookie实现。你曾购买过的商品

cookieDemo1:

 

 

package cn.itcast.cookie;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.itcast.domain.Book;
import cn.itcast.domain.DB;

public class CookieDemo1 extends HttpServlet {

 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  
  response.setCharacterEncoding("utf-8");
  response.setContentType("text/html; charset=utf-8");
  request.setCharacterEncoding("utf-8");
  
  PrintWriter writer = response.getWriter();
  //显示网站的商品列表
  writer.write("本网站有如下商品:<br>");
  Map<String, Book> all = DB.getAll();
  for(Map.Entry<String, Book> me : all.entrySet()) {
   Book book = me.getValue();
   writer.write("<a href='/day07/servlet/CookieDemo2?id="+book.getId()+"'>" + book.getName() + "</a><br>");
  }
  //显示用户曾经浏览过的商品
  
  writer.write("<br><br>您曾经购买过的商品:<br>");
  //获得cookie, bookHistory=1_2_3
  Cookie[] cookies = request.getCookies();
  for(int i=0; cookies!=null&&i<cookies.length; i++) {
   if("bookHistory".equals(cookies[i].getName())) {
    String[] ids = cookies[i].getValue().split("//_"); 
    for(String id : ids) {
     Book book = all.get(id);
     writer.write(book.getName() + "<br>");
    }
   }
  }
 }

 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  doGet(request, response);
 }

}

 

CookieDemo2:

 

package cn.itcast.cookie;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.itcast.domain.Book;
import cn.itcast.domain.DB;

public class CookieDemo2 extends HttpServlet {

 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  
  response.setCharacterEncoding("utf-8");
  response.setContentType("text/html; charset=utf-8");
  request.setCharacterEncoding("utf-8");
  
  PrintWriter writer = response.getWriter();
  //显示商品详细信息
  //获得用户选择的书的id
  String bookid = request.getParameter("id");
  writer.write("这本书的详细信息如下:<br>");
  Book book = DB.find(bookid);
  writer.write(book.getId() + "<br>");
  writer.write(book.getName() + "<br>");
  writer.write(book.getAuthor() + "<br>");
  writer.write(book.getPrice() + "<br>");
  //发送Cookie
  String bookHistory = getCookie(bookid, request);
  Cookie cookie = new Cookie("bookHistory", bookHistory);
  cookie.setMaxAge(60*5);
  response.addCookie(cookie);
 }

 private String getCookie(String bookid, HttpServletRequest request) {
  // 生成cookie的value  bookHistory=1
  //获得以前发给客户端的cookie
  String bookHistory = null;
  Cookie[] cookies = request.getCookies();
  for(int i=0; cookies!=null&&i<cookies.length; i++) {
   if("bookHistory".equals(cookies[i].getName()))
    bookHistory = cookies[i].getValue();
  }
  //假设买的是1  最多放三本
  //bookHistory null  bookHistory=1
  //bookHistory 2_1_3  1_2_3
  //bookHistory 3_5    1_3_5
  //bookHistory 2_3_5  1_2_3
  
  if(bookHistory==null)
   return bookid;
  String ids[] = bookHistory.split("//_");
  List<String> l = Arrays.asList(ids);
  LinkedList<String> list = new LinkedList<String>();
  list.addAll(l);
  if(list.contains(bookid)) {
   //包含
   list.remove(bookid);
   list.addFirst(bookid);
  } else if(list.size()==3) {
   //不包含,但是已经有3本了
   list.removeLast();
   list.addFirst(bookid);
  } else {
   //不包含,不足3本
   list.addFirst(bookid);
  }
  StringBuilder sb = new StringBuilder();
  for(String str : list) {
   sb.append(str + "_");
  }
  sb.deleteCharAt(sb.length()-1); //2_3_5_
  return sb.toString();
 }

 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  doGet(request, response);
 }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值